我试图覆盖默认的WebChromeClient,以便让我的应用程序的WebView能够打开新窗口。为此,按照手册中的说明,我将覆盖WebChromeClient的'onCreateWindow'方法,其中我执行以下简单逻辑。
public boolean onCreateWindow (WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
((WebView.WebViewTransport) resultMsg.obj).setWebView(myWebView);
Log.d("webviewdemo", "from the chrome client");
resultMsg.sendToTarget();
return true;
}
但这会导致上述分段错误。我做了一些搜索&发现它已在http://code.google.com/p/android/issues/detail?id=11655报告。之后我没有看到该问题的任何更新。有人知道相同的状态吗?
谢谢, 阿肖克。
答案 0 :(得分:6)
如果您在onCreateWindow中重复使用webview,应用程序会崩溃。
在屏幕布局中使用ViewGroup,而不是webview,给它提供与webview(mWebViewPopup)相同的布局参数(位置,大小等)。
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg)
{
contentContainer.removeAllViews();
WebView childView = new WebView(mContext);
childView.getSettings().setJavaScriptEnabled(true);
childView.setWebChromeClient(this);
childView.setWebViewClient(new WebViewClient());
childView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
contentContainer.addView(childView);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(childView);
resultMsg.sendToTarget();
return true;
}
在上面的代码中
1)我已经设置了布局参数,以便我的Web视图填充父级,您应该根据您的要求使用布局参数。 2)mContext =>上下文对象 3)contentContainer =>以XML格式声明包含Web视图的viewgroup
这不干净但解决了这个问题。