JS注入后,Android Webview停止加载90%的进度

时间:2016-01-05 13:40:44

标签: java android mobile webview

我正在使用包含一些HTML内容和JS的WebViews的ViewPager。

当我致电以下时间时:

public void goToAnchor(String hash) {
    this.loadUrl("javascript:alert(myapp.getAnchorOffset(\'"+hash+"\'));");
}

它正确地符合javascript,并且在我的WebChromeClient中,我听到在" getAnchorOffset"中创建的警报。 JS函数,像这样:

public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

            //Set the page
            int offset = Math.round(Float.parseFloat(message));

            Log.d("Anchor - ", "Offset = " + offset);
            Log.d("Anchor - ", "width = " + mWebView.getWidth());

            //Get the page
            int page = Math.round(offset / mWebView.getWidth());

            //Make the callback
            anchorListener.didGetAnchorPage(page);
            return true;
        }

这也被正确调用,我在变量" page"中得到了正确的值。现在有趣/烦人的部分是,当我使用anchorListener.didGetAnchorPage进行回调时,它会进行回调,但我正在使用的所有以下webView都不会加载,并且进度将停止在90%。

如果我要在ViewPager中转到第20页,那么WebView将停止加载90%,这总是发生在我做的JS调用之后。

调用JS函数是这样的:

myapp.getAnchorOffset = function(elementId) {
var searchResult = $(document).find("#"+elementId).first();
if (searchResult.length == 0) {
    console.log("ERROR - no DOM element found by id: " + elementId);
    return 0;
}
return searchResult.offset().left;

};

有人知道为什么吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我刚刚找到了解决方案。

诀窍是处理js警报,如下所示:

mWebView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

            //Set the page
            int offset = Math.round(Float.parseFloat(message));

            Log.d("Anchor - ", "Offset = " + offset);
            Log.d("Anchor - ", "width = " + mWebView.getWidth());

            //Get the page
            int page = Math.round(offset / mWebView.getWidth());

            //Make the callback
            anchorListener.didGetAnchorPage(page + pageInEpub);
            result.cancel();
            return true;
        }

使用“result.cancel();”在返回声明之前。