最近做個項目,應用裡面要嵌入網頁,而網頁中又用到JS的"open_windows_and_get_selectedinfo",需要打開一個子網頁并擷取資料。
查閱了各種資料終于找到解決方案:
wv_edit.setWebChromeClient(new WebChromeClient() {
WebView childView = null;
@Override
public boolean onCreateWindow(WebView view, boolean isDialog,
boolean isUserGesture, Message resultMsg) {
// wv_edit.removeAllViews();
is_child = true;
childView = new WebView(MVMEdit.this);
childView.setTag("child");//友善查找并銷毀頁面
childView.getSettings().setJavaScriptEnabled(true);
childView.setWebChromeClient(this);
childView.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
// wv_edit.addView(childView);
ll.addView(childView);
wv_edit.setVisibility(View.GONE);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(childView);
resultMsg.sendToTarget();
return true;
}
@Override
public void onCloseWindow(WebView window) {
is_child = false;
// wv_edit.removeView(childView);
wv_edit.setVisibility(View.VISIBLE);
ll.removeView(childView);
childView.destroy();
childView = null;
super.onCloseWindow(window);
}
});
其中wv_edit是主網頁。最早是将子網頁add到wv_edit中的。後來使用時發現生成的子網頁是以wv_edit為參照。如果wv_edit是可滾動的,則滾動後不能保證子網頁生成在螢幕中央。于是部落客将子網頁add到wv_edit的父容器中,與wv_edit同級。ll是LinearLayout。但是這樣add進以後發現看不到子網頁。最後将wv_edit隐藏後發現子網頁藏在它後面。
這樣解決方案就出來了。重寫onCreateWindow,在其中建立子網頁并隐藏主網頁。在onCloseWindow中将子網頁移除銷毀并顯示主網頁。