覆盖Android WebChromeClient的onCreateWindow方法会导致SIGSEGV

时间:2011-02-21 18:43:46

标签: android webchromeclient

我试图覆盖默认的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报告。之后我没有看到该问题的任何更新。有人知道相同的状态吗?

谢谢, 阿肖克。

1 个答案:

答案 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

这不干净但解决了这个问题。