我在模拟器上从webview获取源代码,但没有获得真正的设备? - Android

时间:2014-03-07 01:42:08

标签: javascript android eclipse android-webview

代码正在使用模拟器,但不能在真实设备上运行。

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);");        
    }    
});  

1 个答案:

答案 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)。