class MyJavaScriptInterface
{
@SuppressWarnings("unused")
public void processHTML(String html)
{
// process html
}
}
final WebView browser = (WebView)findViewById(R.id.browser);
browser.getSettings().setJavaScriptEnabled(true);
browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
browser.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url)
{
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
browser.loadUrl("javascript:window.HTMLOUT.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
}
}, 2000);
}
});
browser.loadUrl("someurl");
我想要实现的是仅在页面上加载所有javascripts时调用processHTML方法(通常在onPageFinished发生后2-3秒)。
我找到的粗鲁的解决方案是使用延迟处理程序,但我会问是否有办法知道何时加载了所有脚本。
我可以循环该处理程序,直到我找不到我想要的信息,但它似乎不是一个优雅的解决方案。
答案 0 :(得分:0)
这个怎么样:
webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
new Thread(){
public void run(){
try {sleep(2000); } catch(Throwable t){} //change 2 000 ms if you want
runOnUiThread(new Runnable(){
public void run() {
webview.loadUrl("javascript:window.HtmlViewer.showHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
}
}
}}.start();
}
});
class MyJavaScriptInterface {
MyJavaScriptInterface(Context ctx) {
}
@JavascriptInterface //add this, if your target api is higher than 17
public void showHTML(String html) {
//html is your code
}
}
来源:how to get html content from a webview?
您无法获取信息,所有脚本都已加载。 Somes脚本(例如在线stoper)总是使用JavaScript,它不会结束。 (我的英语不好)