2

アプリケーションの WebView に新しいウィンドウを開く機能を与えるために、デフォルトの WebChromeClient をオーバーライドしようとしました。このために、マニュアルで指示されているように、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で既に報告されていることがわかりました。その後、その問題の更新は見られません。誰かが同じ状態を知っていますか?

ありがとう、アショク。

4

1 に答える 1

6

onCreateWindow で webview を再利用すると、アプリがクラッシュします。

WebView の代わりに、画面レイアウトで ViewGroup を使用し、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 ビューを含むことを目的としたビューグループ

これはきれいではありませんが、問題は解決します。

于 2012-01-12T01:20:29.100 に答える