我正在使用包含一些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;
};
有人知道为什么吗?
提前致谢。
答案 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();”在返回声明之前。