2011-02-21 2 views
1

J'ai essayé de remplacer le WebChromeClient par défaut afin de donner à l'application WebView de mon application la possibilité d'ouvrir de nouvelles fenêtres. Pour cela, comme indiqué dans le manuel, je remplace la méthode 'onCreateWindow' de WebChromeClient dans laquelle je fais la logique simple suivante.Surcharge Android La méthode onCreateWindow de WebChromeClient aboutit à 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; 
    } 

Mais cela entraîne le défaut de segmentation mentionné ci-dessus. J'ai fait une recherche & trouvé qu'il est déjà signalé à http://code.google.com/p/android/issues/detail?id=11655. Je ne vois aucune mise à jour de ce problème après cela. Est-ce que quelqu'un connaît le statut de la même chose?

Merci, Ashok.

+0

La réponse est ici http://stackoverflow.com/questions/9654529/handle-url-from-oncreatewindow-web-view/23371661#23371661 – albeee

Répondre

6

L'application se bloque si vous réutilisez une vue Web dans onCreateWindow. Au lieu de webview, utilisez un ViewGroup dans la disposition de l'écran, donnez-lui les mêmes paramètres de disposition (emplacement, taille, etc.) que vous avez donné à la vue Web (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; 
    } 

dans le code ci-dessus

1) Je définir les paramètres disposition afin que mon point de vue Web remplit le parent, vous devez utiliser les paramètres de mise en page selon vos besoins. 2) mContext => objet contexte 3) contentContainer => viewgroup qui a été déclarée en XML destiné à contenir l'affichage Web

Ce n'est pas propre, mais résout le problème.

Questions connexes