2016-04-20 51 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

相關問題