1
我已經嘗試了很長時間,現在可以找到一種方法從Web視圖中獲取HTML內容,並在Android應用程序中加載。我發現了幾個指南,指出我需要使用JavaScript界面,並且在某種程度上我已經完成了這項工作。現在的問題是,我無法得到最終的步驟,我實際上得到了一個可以處理的HTML字符串。我需要一個字符串,我可以在Web代碼中檢索到它後,在java代碼中使用html。這是我到目前爲止的代碼:在Android中將JavaScript注入到Web視圖並將HTML獲取爲字符串
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//login button
Button loginButton = (Button) findViewById(R.id.loginButton);
final WebView webview = (WebView)(findViewById(R.id.webview));
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Call private method
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
/* This call inject JavaScript into the page which just finished loading. */
webview.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('body')[0].innerHTML+'</head>');");
webview.setVisibility(View.INVISIBLE);
}
});
webview.setVisibility(View.VISIBLE);
MyJavaScriptInterface JSInterface = new MyJavaScriptInterface();
webview.getSettings().setJavaScriptEnabled(true);
webview.postUrl(url, SAMLreq.getBytes());
webview.addJavascriptInterface(JSInterface, "HTMLOUT");
//The html from the webview should be stored here
String htmlFromWebView = JSInterface.getTheHTMLToGo();
class MyJavaScriptInterface {
private String theHTMLToGo = null;
public String getTheHTMLToGo() {
return theHTMLToGo;
}
public void setTheHTMLToGo(String theHTMLToGo) {
this.theHTMLToGo = theHTMLToGo;
}
@SuppressWarnings("unused")
@JavascriptInterface
public void processHTML(String html) {
theHTMLToGo = html
}
}
}
我可以看到,當我調試,在被稱爲「processHTML」 JavaScript方法的「HTML」字符串實際上包含正確的價值,但我仍然無法弄清楚如何從那裏拿出來。
你是否看到'processHTML(...)'方法中的html數據,對不對?加載後立即調用'getTheHTMLToGo()'函數。你必須等一會才能得到結果,或者你可以在'processHTML(..)'方法中做你想做的事情。 – Ozgur