天天看點

android-webview 子網頁

最近做個項目,應用裡面要嵌入網頁,而網頁中又用到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中将子網頁移除銷毀并顯示主網頁。