Android Webview无法加载javascript注入的图片

时间:2015-12-22 13:52:18

标签: javascript android jquery html webview

我有以下申请:

从一开始就创建了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再次添加时,它会显示出来。但只显示相同的图像,所有其他图像仍未加载。

1 个答案:

答案 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);
        }

    });