Android WebView:应该由XmlHttpRequest触发inInterceptRequest

时间:2013-03-28 17:44:00

标签: android webview xmlhttprequest

我正在尝试通过使用 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。官方documentation非常简短,并未指明截获哪种类型的请求。 This article意味着该方法会拦截 XmlHttpRequest 调用,但它似乎无法正常工作。

有人知道在 XmlHttpRequest 之后是否应该调用shouldInterceptRequest吗?如果没有,还有另一种方法吗?感谢

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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