2014-11-15 83 views
0

我使用javascript和用戶提示(webview加載之前的對話框以外的對話框)製作了一個WebView應用程序,用於登錄該網站。現在我想用jsoup獲取一些信息,但問題是jsoup從未登錄的主頁獲取信息。例如,如果我沒有在網站上登錄主頁沒有用戶名,消息等信息我想用jsoup獲取這些信息,但是我不能這樣做,因爲jsoup實際上並不是在webview中讀取相同的頁面。有什麼辦法我可以以某種方式「連接」jsoup和webview,所以jsoup閱讀頁面,因爲它們在WebView內?我需要這個使android通知新消息...使用jsoup解析webview登錄的網站

在此先感謝!

回答

2

可以執行JavaScript來傳遞加載回包含它通過註冊JavascriptInterface

您可以創建在活動界面爲私有內部類活動中的HTML內容:

private class MyJavaScriptInterface { 
    @JavascriptInterface 
    public void handleHtml(String html) { 
     // Use jsoup on this String here to search for your content. 
     Document doc = Jsoup.parse(html); 

     // Now you can, for example, retrieve a div with id="username" here 
     Element usernameDiv = doc.select("#username").first(); 
    } 
} 

然後,將這個附加到你的WebView:

webview.addJavascriptInterface(new MyJavaScriptInterface(), "HtmlHandler"); 

最後,添加WebViewClient,將調用此javascript方法每次頁面加載完成。您將不得不根據當時的頁面內容確定用戶何時登錄:

webview.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      webview.loadUrl("javascript:window.HtmlHandler.handleHtml" + 
        "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); 
     } 
    }); 
+0

我不確定我知道如何使用jsoup檢查某個div是否存在於網站上?我應該連接jsoup到什麼?你能編輯你的問題,並更深入地解釋「handleHtml」部分嗎?提前致謝! –

+0

'handleHtml(String html)'是你的回調函數,在這個時候你將會傳遞一個包含頁面完整HTML內容的String。您可以像平常一樣使用JSoup來解析此String並處理結果。我編輯了我的回答,以顯示第一次給JSoup的電話。 – mattgmg1990

+0

現在我得到這個錯誤:11-19 04:56:05.787 899-899/ba.gamers.gamersba I/chromium:[INFO:CONSOLE(1)]「Uncaught TypeError:Object [object Object] has no method'handleHTML '「,來源:http://www.mywebsite.com/(1) 11-19 04:56:05.817 899-899/ba.gamers.gamersba I/chromium:[INFO:CONSOLE(1)]」Uncaught TypeError:無法設置null的屬性「值」,來源:http://www.mywebsite.com/(1) –