【问题标题】:Access android assets folder using javascript file使用 javascript 文件访问 android assets 文件夹
【发布时间】:2018-09-29 15:11:47
【问题描述】:

我正在向 WebView 注入一个 javascript 文件,并且该 javascript 文件需要从应用资产文件夹中加载更多文件。 我曾经从远程服务器加载文件,但现在我需要在本地加载它们。 我得到“不允许加载本地资源”。 这甚至可能吗?我在这里或使用谷歌找不到任何解决方案。 示例:

...
webView.loadUrl("javascript:(function() {" +
                    "var parent = document.getElementsByTagName('head').item(0);" +
                    "var script = document.createElement('script');" +
                    "script.type = 'text/javascript';" +
                    "script.innerHTML = window.atob('" + encoded + "');" +
                    "parent.appendChild(script)" +
                    "})()");

这会将“script.js”文件注入到 web 视图中。 在 script.js 文件中,我想注入位于 app assets 文件夹内的 css 背景图像。当我尝试访问“file:///android_asset”时,出现“不允许加载本地资源”错误。

【问题讨论】:

    标签: javascript java android android-studio webview


    【解决方案1】:

    如果你想将本地 html 页面和资源加载到 web 视图中,你应该使用 webView.loadDataWithBaseURL

      public void loadLocalHtmlToWebView() throws IOException {
    
            WebView mWebView = findViewById(R.id.my_webview);
    
            File publicDir = new File(getCacheDir(), "public");
    
            if (publicDir.exists() == false) {
    
                publicDir.mkdirs();
    
                String[] ls = getAssets().list("public");
    
    
                for (int i = 0; i < ls.length; i++) {
    
                    InputStream inputStream = getAssets().open("public/" + ls[i]);
    
                    File outFileLocation = new File(publicDir, ls[i]);
    
                    outFileLocation.createNewFile();
    
                    Log.e("AMIR", "Wrinting to : " + outFileLocation.getPath());
    
                    FileOutputStream fileOutputStream = new FileOutputStream(outFileLocation);
    
                    byte[] buffer = new byte[1024];
    
                    while (inputStream.read(buffer) != -1) {
    
                        fileOutputStream.write(buffer);
    
                    }
    
                    fileOutputStream.flush();
                    fileOutputStream.close();
    
                    inputStream.close();
    
    
                }
    
            }
    
    
            String indexHtml="";
    
            BufferedReader bufferedReader=new BufferedReader(new FileReader(new File(publicDir,"index.html")));
    
            String ln="";
    
            while((ln=bufferedReader.readLine())!=null){
    
                indexHtml+=ln;
    
            }
    
            bufferedReader.close();
    
            Log.e("AMIR","Html : "+indexHtml);
    
    
            String baseUrl = "file://" + publicDir.getPath() + "/";
    
            mWebView.loadDataWithBaseURL(baseUrl, indexHtml, "text/html", "UTF-8", null);
    
        }
    

    资产文件夹:

    我的 index.html 代码:

    <html>
    
    <head>
    
    <title>Hello</title>
    
    <head>
    
    <body>
    Hello
    <img src="./img.jpg"/>
    
    <body>
    
    </html>
    

    这是一个很好且解释清楚的 webView 教程:

    http://tutorials.jenkov.com/android/android-web-apps-using-android-webview.html

    【讨论】:

    • 谢谢,但我无法让我的示例与您的解决方案一起使用
    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2015-03-26
    • 2012-09-05
    相关资源
    最近更新 更多