2011-02-21 6 views
1

私のアプリケーションのWebViewに新しいウィンドウを開く機能を与えるために、デフォルトのWebChromeClientをオーバーライドしようとしました。このために、マニュアルで指示されているように、WebChromeClientの 'onCreateWindow'メソッドをオーバーライドしています。ここでは、次の単純なロジックを実行します。Android WebChromeClientのonCreateWindowメソッドのオーバーライドによりSIGSEGVが発生する

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

回答はこちらhttp://stackoverflow.com/questions/9654529/handle-url-from-oncreatewindow-web-view/23371661#23371661 – albeee

答えて

6

onCreateWindowでWebビューを再利用すると、アプリケーションがクラッシュします。

webviewの代わりに、画面レイアウトでViewGroupを使用し、webview(mWebViewPopup)と同じレイアウトパラメータ(場所、サイズなど)を指定します。上記のコード

1で

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

)私は私のWebビューが親を満たすように、あなたはあなたの要件ごとにレイアウトパラメータを使用する必要があり、レイアウトのパラメータを設定しました。 2)mContext =>コンテキストオブジェクト 3)contentContainer => Webビューを含むXMLで宣言されたビューグループ

これはクリーンではありませんが、問題を解決します。

関連する問題