Переопределение метода Android WebChromeClient onCreateWindow приводит к SIGSEGV - PullRequest
1 голос
/ 21 февраля 2011

Я попытался переопределить стандартный WebChromeClient, чтобы дать WebView моего приложения возможность открывать новые окна.Для этого, как указано в руководстве, я переопределяю метод onCreateWindow в WebChromeClient, в котором я использую следующую простую логику:

    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 Ответ

6 голосов
/ 12 января 2012

Приложение аварийно завершает работу, если вы повторно используете веб-просмотр в onCreateWindow.

Вместо веб-просмотра используйте ViewGroup в макете экрана, присвойте ему те же параметры макета (местоположение, размер и т. Д.), Что и веб-просмотру (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) Я установил параметры макета так, чтобы мои веб-представления заполняли родительский элемент, вы должны использовать параметры макета в соответствии с вашими требованиями. 2) mContext => объект контекста 3) contentContainer => viewgroup, которая была объявлена ​​в XML, предназначенная для содержания веб-представления

Это не чисто, но решает проблему.

...