11
4

2 回答 2

8

我自己解决了这个问题。这是我修复它的方法。

mWebView.setWebChromeClient(new WebChromeListener() {
    @Override
    public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
        WebView newWebView = new WebView(view.getContext());
        newWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(browserIntent);
                return true;
            }
        });
        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(newWebView);
        resultMsg.sendToTarget();
        return true;
    }
});
于 2013-11-26T19:13:57.193 回答
2

您可以执行以下操作:(丑陋但会起作用)

在 onPageFinished() 中,将一个 javascript 代码片段注入到页面中,它执行以下操作:

  1. 迭代具有 target=_blank 属性的所有元素
  2. 将这些元素的 href 更改为 external://[original href]

如果该站点使用 jquery,它应该很容易。如果没有,您仍然可以使用标准 DOM Javascript 来完成。

在您的 shouldOverrideUrlLoading() 上,查找那些 external://* 链接并在外部打开它们。

为了注入 javascript ,请执行以下操作:

webView.loadUrl("javascript:(function() { PLACE YOUR JS CODE HERE })()");
于 2013-03-13T21:28:08.337 回答