Android,在WebView中从javascript调用浏览器

时间:2015-06-05 16:53:49

标签: javascript android webview

我尝试调用我的设备的浏览器加载包含以下内容的WebView中的页面:

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

我需要从加载到WebView的html中执行此操作

但我没有成功,任何想法!?

2 个答案:

答案 0 :(得分:2)

您的应用需要做几件事:

  1. 使用setJavaScriptCanOpenWindowsAutomatically作为@ajpolt说。这将使window.open不会失败。

  2. 启用setSupportMultipleWindows。这使WebView实际上尝试打开一个新窗口。否则,它将在同一个WebView中打开URL。

  3. 连接到WebChromeClient.onCreateWindow回调并在那里创建一个新的WebView实例。对于这个新实例,您需要设置WebViewClient,以便从shouldOverrideUrlLoading启动意图。

  4. 以下是示例代码:

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

答案 1 :(得分:0)

您可能错过了网络视图中的设置。

尝试在您的设置中使用setJavaScriptCanOpenWindowsAutomatically,如下所示:

mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);