我使用javascript和用户提示创建了一个WebView应用程序(在webview加载之前的网站外部对话框),我用它来登录该网站。现在我想使用jsoup获取一些信息,但问题是jsoup从未登录的主页获取信息。例如,如果我没有登录网站主页没有像用户名,消息等信息。我想使用jsoup获取这些信息,但我不能,因为jsoup实际上并没有阅读与webview中的页面相同。有什么方法我可以以某种方式"连接" jsoup和webview所以jsoup读取WebView中的页面?我需要这个来制作关于新消息的Android通知......
提前致谢!
答案 0 :(得分:2)
您可以执行javascript,通过注册JavascriptInterface
您可以在Activity中创建一个私有内部类的接口:
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>');");
}
});