【问题标题】:How to load a js file from assets into webview when loading html from assets?从资产加载html时如何将js文件从资产加载到webview中?
【发布时间】:2017-05-26 03:44:12
【问题描述】:

我想从 Android Asset 文件夹加载具有 JS 引用的 HTML 文件。当我在浏览器中打开 HTML 文件时,它会正确加载所有 JS 引用。但是当我从 Android 加载时,JS 文件并没有引用。
示例代码

WebView web_view = FindViewById<WebView>(Resource.Id.webView); `web_view.Settings.JavaScriptEnabled = true;`
                string sampleHtmlData = "<html><head>" +
                "<script src=\"epub.min.js\"></script>" +
                "<script src=\"jquery-1.10.2.min.js\" type=\"text/javascript\"></script>" +
                "<script>" +
                "var book = ePub(\"Azure_Cosmos_DB_and_DocumentDB_Succinctly/\");" +
                "$(document).ready(function(){  book.renderTo(\"area\"); });" +
                "</script>" +
                "</head><body> <div id=\"prev\" onclick=\"book.prevPage()\" style=\"font - size: 64px; cursor: pointer;\" class=\"arrow\">‹</div>" +
                "<div id =\"area\" style =\"height:500px;\" ></ div >" +
                "<div id = \"next\" onclick = \"book.nextPage()\" style = \"font-size: 64px;cursor:pointer;\" class=\"arrow\">›</div></body></html>";
                web_view.LoadDataWithBaseURL("file:///android_asset/Sample/", sampleHtmlData, "text/html", "UTF-8", null);

我也尝试使用 LoadUrl 加载。

web_view.LoadUrl("file:///android_asset/Sample/index.html")

文件路径: 资产/样本

谁能建议我用相应的 JS 文件加载本地 Html 文件? Android 会支持 EPUB js 吗?

【问题讨论】:

  • 您可能还需要设置web_view.setDomStorageEnabled = true;
  • 我也启用了 DomStorage。还是不能给JS。 HTML 文件正在加载。但是对应的 JS 代码不起作用。我指的是 Epub.js 并使用 epub 方法来加载 epub 文件

标签: android html webview


【解决方案1】:

你应该试试这个朋友。

webView.loadData("Your HTML source", "text/html", "UTF-8");

webView.loadData() 将网页源代码直接加载到WebView中

请将您的 JAVASCRIPT 嵌入 HTML 中

【讨论】:

    【解决方案2】:

    你好,如果有帮助,试试这个例子

    public class MainActivity extends Activity {
    
    WebView view;
    JSInterface api;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        view = (WebView) findViewById(R.id.webView);
        api = new JSInterface();
        WebSettings asd = view.getSettings();
    
        asd.setJavaScriptEnabled(true);
        view.addJavascriptInterface(api, "api");
    
        String url = "file:///android_asset/index.html";
        view.loadUrl(url);
        view.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
    
            public void onPageFinished(WebView view, String url) {
                view.loadUrl("javascript:api.getString(document.getElementsByClassName('txtTitle')[0].innerHTML)");
            }
        });
    }
    
    private class JSInterface {
    
        @JavascriptInterface
        public void getString(String str) {
            Log.d("STRING", str);
        }
    
    }
    }
    

    【讨论】:

      【解决方案3】:

      已通过启用以下属性解决了该问题。

      if (Build.VERSION.SdkInt >= Build.VERSION_CODES.JellyBean)
                  {
                      webView.Settings.AllowUniversalAccessFromFileURLs = true;
                      webView.Settings.AllowFileAccessFromFileURLs = true;
                  }
      

      注意:将需要的JS文件直接保存到Assets文件夹中,而不是保留内部文件夹来保存JS文件

      -谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-04
        • 2017-06-06
        • 2011-03-10
        • 2012-09-05
        • 1970-01-01
        • 1970-01-01
        • 2016-09-13
        • 2020-05-16
        相关资源
        最近更新 更多