代码正在使用模拟器,但不能在真实设备上运行。
classJavaScriptInterface{
private TextView contentView;
public JavaScriptInterface(TextView aContentView){
contentView = aContentView;
}
@SuppressWarnings("unused")
public void processContent(String aContent){
final String content = aContent;
contentView.post(new Runnable(){
public void run(){
contentView.setText(content);
contentView.setTextColor(Color.DKGRAY);
}
});
}
}
TextView tv2 = (TextView) findViewById(R.id.source);
webview1.addJavascriptInterface(new JavaScriptInterface(tv2), "INTERFACE");
webview1.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
view.loadUrl("javascript:window.INTERFACE.processContent(document.getElementsByTagName('body')[0].innerText);");
}
});
答案 0 :(得分:0)
根据我的经验,onPageFinished()
并不总是一种可靠的方式来了解页面是否真正完成。根据您正在加载的内容,可能会在调用 onPageFinished()
之后发生其他重定向或框架。有关详细信息,请参阅此其他SO帖子:How to determine when Android WebView is completely done loading?
您可以通过在onPageFinished中添加延迟来快速检查是否存在此问题:
@Override
public void onPageFinished(final WebView view, String url)
{
view.postDelayed(new Runnable()
{
public void run()
{
view.loadUrl("javascript:window.INTERFACE.processContent(document.getElementsByTagName('body')[0].innerText);");
}
}, 5000);
}
如果它适用于延迟,您应该使用其他帖子中描述的方法来解决问题(不要在最终产品中使用延迟5s的postDelayed)。