我正在尝试通过使用 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
吗?如果没有,还有另一种方法吗?感谢
答案 0 :(得分:2)
在API级别16中,WebSettings添加了方法setAllowFileAccessFromFileURLs()和setAllowUniversalAccessFromFileURLs()。对webView设置为true可能会解决您的问题。
答案 1 :(得分:0)
正如我对此进行测试一样,似乎只会拦截外部请求 - 您可以尝试将本地引用修改为外部引用为" http://foo.com/ ..." (而不是" file:///android_asset /...")。