2015-06-05 2 views
0

я пытаюсь вызвать браузер моего устройства загрузки страницы внутри WebView, который содержит:Android, вызывая браузер из JavaScript внутри WebView

window.open(
    'http://www.stackoverflow', 
    '_blank'. 
); 

мне нужно сделать это с HTML, который загружается в WebView

но у меня нет успеха, любая идея !?

+0

вы можете запустить JavaScript на WebView как этот view.loadUrl ("JavaScript: $ ('.CARS_panelTitle ') CSS (' дисплей', 'ни'). "); с использованием Webclient – 3xplore

ответ

0

Возможно, вам не хватает настроек на вашем веб-просмотре.

Попробуйте использовать setJavaScriptCanOpenWindowsAutomatically в настройках, например:

mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
2

Есть несколько вещей, которые нужно сделать в вашем приложении:

  1. Используйте setJavaScriptCanOpenWindowsAutomatically, как @ajpolt говорит. Это позволит не допустить window.open.

  2. Включить setSupportMultipleWindows. Это заставляет WebView фактически пытаться открыть новое окно. В противном случае он откроет URL-адрес в том же WebView.

  3. Подключиться к WebChromeClient.onCreateWindow Обратный вызов и создать новый экземпляр WebView. Для этого нового экземпляра вам необходимо установить WebViewClient, который запустит намерение с shouldOverrideUrlLoading.

Ниже приведен пример кода:

WebView webView = (WebView)findViewById(R.id.webView); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
webView.getSettings().setSupportMultipleWindows(true); 
webView.setWebChromeClient(new ChromeClient()); 

И это ChromeClient:

class ChromeClient extends WebChromeClient { 
    @Override 
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { 
     WebView tempWebView = new WebView(MainActivity.this); 
     tempWebView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       browserIntent.addCategory(Intent.CATEGORY_BROWSABLE); 
       startActivity(browserIntent); 
       return true; 
      } 
     }); 
     WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
     transport.setWebView(tempWebView); 
     resultMsg.sendToTarget(); 
     return true; 
    } 
} 
Смежные вопросы