soc*_*qwe 7 javascript android webview
是否可以检查用户是否已点击带有target ="_ blank"的html链接.
我想要做的是在我的应用程序中在WebView中显示htlm,但在android默认浏览器中启动"外部"链接."外部"链接对我来说是一个target ="_ blank"的链接.所有其他链接应在webview中处理.
例如:用户在我的WebView中点击这样的链接:
<a href="http://www.google.com" target="_blank">new window</a>
Run Code Online (Sandbox Code Playgroud)
然后我想在Android浏览器中打开给定的URL.
我用shouldOverrideUrlLoading()尝试了它,但此时我无法确定目标是"_blank"还是普通链接(没有目标).
我也试过setSupportMultipleWindows(true); 与onCreateWindow()结合使用,但在此回调中我无法获取url.
我无法更改显示的HTML,因此我无法使用带有addJavascriptInterface()的JavaScript Bridge
我还可以做些什么?还有其他想法吗?
小智 7
我自己刚刚解决了这个问题。这是我修复它的方法。
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;
}
});
Run Code Online (Sandbox Code Playgroud)
小智 2
您可以执行以下操作:(丑陋但可行)
在 onPageFinished() 内部,将 javascript 代码片段注入到页面中,其执行类似以下操作:
如果网站使用jquery,那应该很容易。如果没有,您仍然可以使用标准 DOM Javascript 来完成。
在您的 shouldOverrideUrlLoading() 上,查找这些 external://* 链接并从外部打开它们。
为了注入 javascript ,请执行以下操作:
webView.loadUrl("javascript:(function() { PLACE YOUR JS CODE HERE })()");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4974 次 |
| 最近记录: |