2011-02-21 4 views
1

Я попытался переопределить используемый по умолчанию WebChromeClient, чтобы получить возможность WebView Web-приложениям открывать новые окна. Для этого, как указано в руководстве, я переопределяю метод onCreateWindow для WebChromeClient, в котором я делаю следующую простую логику.Переопределение метода onCreateWindow для WebChromeClient для Android. В 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. После этого я не вижу никаких обновлений этой проблемы. Кто-нибудь знает статус того же?

Thanks, Ashok.

+0

Ответ здесь http://stackoverflow.com/questions/9654529/handle-url-from-oncreatewindow-web-view/23371661#23371661 – albeee

ответ

6

Приложение вылетает, если вы повторно используете веб-просмотр в 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, предназначенный для содержания веб-просмотра

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

 Смежные вопросы

  • Нет связанных вопросов^_^