2 Stimmen

Das Überschreiben der onCreateWindow-Methode von Android WebChromeClient führt zu SIGSEGV

Ich habe versucht, den Standard-WebChromeClient zu überschreiben, um dem WebView meiner Anwendung die Möglichkeit zu geben, neue Fenster zu öffnen. Für diese, wie im Handbuch angewiesen, ich bin überschreiben die 'onCreateWindow' Methode von WebChromeClient, wo ich die folgende einfache Logik zu tun.

    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;
    }

Dies führt jedoch zu dem oben erwähnten Segmentierungsfehler. Ich habe nachgeforscht und herausgefunden, dass dies bereits berichtet wurde unter http://code.google.com/p/Android/issues/detail?id=11655 . Danach habe ich keine Aktualisierungen zu diesem Thema mehr gesehen. Weiß jemand, wie der Stand der Dinge ist?

Danke, Ashok.

6voto

Animesh Punkte 1234

Die Anwendung stürzt ab, wenn Sie eine Webansicht in onCreateWindow wiederverwenden.

Verwenden Sie anstelle von webview eine ViewGroup im Bildschirmlayout und geben Sie ihr die gleichen Layout-Parameter (Position, Größe usw.) wie dem 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;
    }

im obigen Code

1) Ich habe Layout-Parameter festgelegt, so dass meine Web-Ansichten das übergeordnete füllt, sollten Sie Layout-Parameter wie pro Ihre Anforderung verwenden. 2) mContext => Kontext-Objekt 3) contentContainer => Viewgroup, die in XML deklariert wurde, um die Webansicht zu enthalten

Das ist nicht sauber, aber das Problem ist gelöst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X