2016-04-20 53 views
0

我想在webview中一个接一个地加载2个URL,并抓住他们的html。我的代码看起来如下:loadUrl在Android的webview中两次

final WebView webview = (WebView) findViewById(R.id.showInfo_webView); 
webview.getSettings().setJavaScriptEnabled(true); 
webview.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); 

webview.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return false; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     webview.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); 
     } 
    }); 

    webview.loadUrl(response); 
    webview.loadUrl(response2); <-- 

class MyJavaScriptInterface { 
    @JavascriptInterface 
    public void showHTML(String html) { 
    ... 
    } 
} 

showHTML我有一个计数器,以便我可以在第一和第二个呼叫区分。但是,showHTML只被调用一次。这是为什么?我需要完全重新创建webview吗?

我试过在第二个loadUrl之后调用webview.reload(),但是看起来第二个页面加载了两次?

编辑:我需要处理第一个网址的html来获取第二个网址。

+1

@MikeM。你的意思是做HTTP post/get?不起作用,因为我正在处理动态网页 – Dimebag

回答

0

我通过创建一个基本上只有webview的活动来解决它。 I startActivityForResult连续两次,就是这样。这当然不是优雅的,但它的作品。

0
 String[] urls = {"http://www.demo.com", "http://www.fb.com"}; 

      int delay = 50 * 1000; 
      Handler handler = new Handler(); 
      for(int i = 0; i < urls.length; i++) { 

       webview.setWebViewClient(new WebViewClient()); 
       webview.getSettings().setJavaScriptEnabled(true); 
       MyRunnable runnable = new MyRunnable(urls[i], webview); 
       handler.postDelayed(runnable, delay); 
       delay = delay + 50 * 1000; 
      } 

private class MyRunnable implements Runnable { 

     private String url; 
     private WebView wv; 

     public MyRunnable(String url, WebView wv) { 
      this.url = url; 
      this.wv = wv; 
     } 

     public void run() { 
      webview.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); 

webview.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return false; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     webview.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); 
     } 
    }); 
     } 
    } 
+0

我看到的问题是,我需要在调用第二个URL之前处理来自第一个url的html,这只会在这里假设它在预设期间完成延迟 – Dimebag

相关问题