如何檢索當前在WebView中顯示的所有HTML內容?如何從WebView中檢索HTML內容(作爲字符串)
我發現WebView.loadData()
但我無法找到相反的當量(如WebView.getData())
請注意,我感興趣的檢索的網頁,我無法控制的數據(即我不能將Javascript函數注入到這些頁面中,以便在WebView中調用Javascript接口)。
如何檢索當前在WebView中顯示的所有HTML內容?如何從WebView中檢索HTML內容(作爲字符串)
我發現WebView.loadData()
但我無法找到相反的當量(如WebView.getData())
請注意,我感興趣的檢索的網頁,我無法控制的數據(即我不能將Javascript函數注入到這些頁面中,以便在WebView中調用Javascript接口)。
不幸的是,有沒有簡單的方法來做到這一點。
見How do I get the web page contents from a WebView?
你可以只讓一個HTTPRequest,在同一頁面的網頁視圖,並得到響應。
你可以做到這一點通過:
final Context myApp = this;
/* An instance of this class will be registered as a JavaScript interface */
class MyJavaScriptInterface
{
@SuppressWarnings("unused")
public void processHTML(String html)
{
// process the html as needed by the app
}
}
final WebView browser = (WebView)findViewById(R.id.browser);
/* JavaScript must be enabled if you want it to work, obviously */
browser.getSettings().setJavaScriptEnabled(true);
/* Register a new JavaScript interface called HTMLOUT */
browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
/* WebViewClient must be set BEFORE calling loadUrl! */
browser.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url)
{
/* This call inject JavaScript into the page which just finished loading. */
browser.loadUrl("javascript:window.HTMLOUT.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
}
});
/* load a web page */
browser.loadUrl("http://lexandera.com/files/jsexamples/gethtml.html");
您將獲得processHTML方法的整個HTML contnet。 ,它不會再提出網頁請求。所以它也是這樣做的更有效的方法。
謝謝。
看起來類似於http:// lexandera。COM/2009/01 /提取-HTML-從-A-web視圖/。該教程最後還有一個警告。 – 2014-01-10 22:19:57
@shridutt kothari http://stackoverflow.com/questions/28194699/webview-content-are-not-loaded-properly-if-it-is-xml – GOLDEE 2015-01-29 11:16:52
如果被加載的內容不是HTML格式,即XML或其他任何東西現在javascriptinterface沒有得到調用,並最終與TypeError – GOLDEE 2015-01-29 11:20:00
你可以通過webview中的JavaScriptInterface傳遞數據..我已經做到了。 將數據保存爲靜態變量,然後在Android應用程序中進行處理
你不需要把它保存到一個靜態變量,否則這種方法當然是正確的 - 就像它已經被上面的kothari所示。 – 2014-04-10 17:08:10
您可以攔截WebView所做的HTTP請求,然後修改HTML以包含您需要與HTML頁面通信的任何JavaScript函數。您可以通過WebViewClient shouldInterceptRequest()方法攔截HTTP請求。
使用此機制,您可以通過自己加載來訪問加載的頁面,在將其傳遞到WebView之前對其進行修改,甚至可以將其緩存在本地(如果需要)。
webView.evaluateJavascript("(function(){return window.document.body.outerHTML})();",
new ValueCallback<String>() {
@Override
public void onReceiveValue(String html) {
}
});
作品像一個魅力 – 2017-07-05 10:19:20
添加到您的代碼:
private String getUrlSource(String site) throws IOException {
//GNU Public, from ZunoZap Web Browser
URL url = new URL(site);
URLConnection urlc = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
urlc.getInputStream(), "UTF-8"));
String inputLine;
StringBuilder a = new StringBuilder();
while ((inputLine = in.readLine()) != null)
a.append(inputLine);
in.close();
return a.toString();
}
那麼可以說你得到什麼谷歌的來源,你會怎麼做:
getURLSource("http://google.com");
的
崩潰在緩衝器。 – 2016-07-24 20:27:29
不應該崩潰下載它在那裏工作的ZunoZap瀏覽器 – 2016-07-27 04:37:46
可能重複[我怎樣網頁內容從WebView?](http://stackoverflow.com/questions/2376471/how-do-i-get-the-web-page-contents-from-a-webview) – Guru 2013-03-20 14:50:45