内部存储JS文件未与android webview链接

时间:2015-07-17 07:07:45

标签: javascript android webview

我已将index.html文件存储在内部存储中,而html文件使用以下代码添加脚本以便在webview上显示:

<script type="text/javascript" src="http://url.net/4.2/something.js"></script>

工作正常但是当我尝试从内部存储而不是链接链接JS文件时,我在webview中什么都没得到。

<script type="text/javascript" src="something.js"></script>

以上不起作用。有人能告诉我如何链接内部存储中的文件?我也试过了/sdcard/something.js,这也没用。

JS文件夹和index.html文件位于根目录中。

2 个答案:

答案 0 :(得分:0)

js文件是否存储在相对于index.html的位置?你可以使用

@Override
public void onLoadResource(WebView view, String resUrl) {
    super.onLoadResource(view, resUrl);
    // LOG resURL
}

我发现使用另一个技巧shouldInterceptRequest自己加载js

        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, String resUrl) {
            if (resUrl.startsWith("somepattern")) {
                // Figure out where the file is
                // Load it into a stream
                WebResourceResponse response = new WebResourceResponse("text/javascript", "utf-8", /*Input stream*/);
                    return response;
                } catch (Exception e) {
                    return null;
                }
            }
            return null;
        }

答案 1 :(得分:0)

如果您将js文件存储到app内部存储空间,请使用此

<script type="text/javascript" src="file:///data/data/***com.yourproject.example***/files/js/tinymce/tinymce.min.js"></script>

并相应更改您的包名称。

最好的方法是动态创建脚本标记,而不是创建硬编码。这样你就可以在android api的帮助下找到绝对路径,然后将路径传递给javascript方法。 例如

mWebView.loadUrl("javascript:loadPage('" + Yourfile path +
                        "');");

和JS方法是

function loadPage(path){
    var articleTextScript = document.createElement('script');
    articleTextScript.type = 'text/javascript';
    articleTextScript.src = path;
    articleTextScript.id = 'articleTextScript';
    var header = document.getElementsByTagName('head')[0];
    header.appendChild(articleTextScript);
}