我正在尝试集成一个通过使用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之后调用?如果没有,还有其他方法可以做到这一点吗?谢谢