2

我正在尝试集成一个通过使用XmlHttpRequest调用加载一些资源的 javascript 插件。我希望这个脚本在 WebView 的本地加载页面中运行。正如您可能已经猜到的那样,本地资源不允许XmlHttpRequest调用,所以我立即收到以下错误:

XMLHttpRequest 无法加载 file:///android_asset/resources.html。仅 HTTP 支持跨源请求。

此时我认为我可以通过拦截调用然后自己加载文件来模拟Web服务器,例如:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(final WebView view, String url) {
        try {
            if (url.contains("resources.html")) { //breakpoint here is not triggering
                return new WebResourceResponse("text/html", "UTF-8", getAssets().open("resources.html"));
            }
        } catch (IOException e) {
            return super.shouldInterceptRequest(view, url);
        }
        return super.shouldInterceptRequest(view, url);
    }
});

问题是shouldInterceptRequest没有被调用。官方文档很简短,并没有具体说明拦截什么类型的请求。这篇文章有点暗示该方法确实拦截了XmlHttpRequest调用,但它似乎不起作用。

有谁知道是否shouldInterceptRequest应该在XmlHttpRequest之后调用?如果没有,还有其他方法可以做到这一点吗?谢谢

4

2 回答 2

2

在 API 级别 16 WebSettings 添加了方法 setAllowFileAccessFromFileURLs() 和 setAllowUniversalAccessFromFileURLs()。将 webView 设置为 true 可能会解决您的问题。

于 2013-08-29T02:31:14.277 回答
0

正如我对此的测试,似乎只有外部请求会被拦截 - 您可以尝试将本地引用修改为外部的“ http://foo.com/ ...”(而不是“file:/// android_asset/...")。

于 2014-09-11T09:15:05.017 回答