我有以下申请:
从一开始就创建了webview,并将加载本地(到应用程序)HTML文件。 这个本地HTML文件包含一些javascript,可以在解析数据时更新HTML。
只有当我向其解析数据时才会加载图像,但是我能够看到HTML更改并看到正确的img标记显示正确的URL。我测试了javascript以及我在浏览器中发送给它的数据,它可以正常工作。
我的应用:
private static final String URL = "file:///android_asset/overview.html";
private WebView wView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Set settings
wView = (WebView) findViewById(R.id.webView);
wView.getSettings().setJavaScriptEnabled(true);
wView.getSettings().setUseWideViewPort(true);
wView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
wView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
//TMP DEBUDDING
wView.setWebContentsDebuggingEnabled(true);
//Create interface called "AppBridge" for JavaScript
wView.addJavascriptInterface(new WebAppInterface(this), "AppBridge");
wView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:testInject('Hello World');");
view.loadUrl("javascript:updateOverview(SOME DATA);");
}
@Override
public void onLoadResource (WebView view, String url) {
Log.v(TAG, "Webview load Resouce " + url);
}
});
wView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(TAG, message);
return true;
}
});
wView.loadUrl(URL);
有没有人知道禁止webview加载我注入的html图像是什么。
----更新---- 一些额外的测试,当手动将img标签添加到html时,图像被加载,然后当通过javascript再次添加时,它会显示出来。但只显示相同的图像,所有其他图像仍未加载。
答案 0 :(得分:1)
经过大约8个小时的测试,调试和扑头。我找到了解决方案。
受以下文章http://artemzin.com/blog/android-webview-io/启发
通过覆盖shouldInterceptRequest
,WebView将加载图像。
wView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:testInject('Hello World');");
view.loadUrl("javascript:updateOverview("SOME DATA");
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
return super.shouldInterceptRequest(view, request);
}
});