如何讓安卓WebView支援js呼叫window.open()和window.close()的方法。
阿新 • • 發佈:2019-01-08
最近專案中遇到一個webview開發時的問題,web前端開發人員在網頁上實現了一個功能。功能是在A html頁面,開啟一個新的B html頁面,然後再B頁面中選擇一個聯絡人,把值返回給A頁面。做web開發的朋友應該知道,這個需要在A中通過window.open()開啟B,在B中選擇完畢和呼叫window.close()關閉B,並且把獲取的值傳遞給A。由於我不是做web開發的,表述可能不是特別對,但是大概就是這麼個意思。js中呼叫window.open(),其實會回撥我們WebChromeClient中的
onCreateWindow(WebView view, boolean isDialog,重寫這個方法是新建立webview去載入新的地址,類似於新開一個瀏覽器視窗的意思(個人理解)。注意:webview還需要設定如下幾個屬性(紅色部分):@Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {//html中呼叫window.open(),會回撥此函式 DebugUtil.log("建立新視窗:" + isDialog + ";" + isUserGesture + ";" + resultMsg); newWebView = new WebView(OAWebActivity.this);//新建立一個webview initWebView(newWebView);//初始化webview fl_web_activity.addView(newWebView);//把webview載入到activity介面上 WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;//以下的操作應該就是讓新的webview去載入對應的url等操作。 transport.setWebView(newWebView); resultMsg.sendToTarget(); return true; // return super.onCreateWindow(view, isDialog, isUserGesture, // resultMsg); }
WebSettings webSettings = wv.getSettings();
/*
*/
@Override
public void onCloseWindow(WebView window) {//html中,用js呼叫.close(),會回撥此函式
super.onCloseWindow(window);
DebugUtil.err("關閉當前視窗");
if (newWebView != null) {
fl_web_activity.removeView(newWebView);
}
}
其實就是把新的webview移出介面。當然還可以把新建立的webview的資源回收掉,這裡只寫一個思路。