作者:wang-zhiwen | 来源:互联网 | 2023-08-31 12:12
最近做个项目,应用里面要嵌入网页,而网页中又用到JS的”open_windows_and_get_selectedinfo“,需要打开一个子网页并获取数据。查阅了各种资料终于找到解
最近做个项目,应用里面要嵌入网页,而网页中又用到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中将子网页移除销毁并显示主网页。