Android webView 外部链接 -> 新建 Activity
Posted
技术标签:
【中文标题】Android webView 外部链接 -> 新建 Activity【英文标题】:Android webView external link -> new Activity 【发布时间】:2016-11-20 10:47:44 【问题描述】:在活动 1 中,我得到了一个网络视图。对于指向外部网站的每个链接(例如,如果您在 facebook 上并单击指向亚马逊的链接)应该开始活动 2。
活动 2 还包含一个网络视图。此 Web 视图应加载活动 1 中单击的链接。
我读到了“shouldOverrideUrlLoading”方法。但是新的 API 级别太高了。并且不推荐使用的触发器会触发网络视图中的每次点击(如果您不离开该站点也是如此)。我可以过滤 - 但它仍然被弃用。
所以我尝试了这种方式:
WebView view = (WebView) rootView.findViewById(R.id.webView);
view.setWebViewClient(new WebViewClient());
view.getSettings().setSupportMultipleWindows(true);
view.setWebChromeClient(new WebChromeClient()
@Override public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg)
Intent externalLinkIntent = new Intent(getActivity(), ExternalLinkActivity.class);
Bundle bundle = new Bundle();
bundle.putString("externalLink", "externalLinkGoesHere");
externalLinkIntent.putExtras(bundle);
startActivity(externalLinkIntent);
return true;
);
仅当我真的离开实际站点时才会触发此方法。但对我来说,不可能取出 resultMsg 的该死的 url。通常用于调用外部链接的默认chrome浏览器。
有什么想法或其他方法吗?
谢谢!
【问题讨论】:
【参考方案1】:已解决
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg)
String targetUrl = view.getHitTestResult().getExtra();
//More actions
【讨论】:
可能没那么简单。这应该适用于许多情况,但不适用于“javascript 链接”。检查此文档:“如果锚点没有 URL 或者它是 JavaScript URL,则类型将为 UNKNOWN_TYPE 并且必须通过 requestFocusNodeHref(Message) 异步检索 URL”developer.android.com/reference/android/webkit/… 此外,即使您成功获取了 URL,也可能不足以正确打开新窗口,具体取决于用例。原始窗口和新窗口可能需要交换消息(与浏览器选项卡可以相互通信的方式相同)。在这种情况下,您似乎必须使用推荐的resultMessage.obj.setWebView(newWebView); resultMessage.sendToTarget();
方法并在与原始 webview 相同的活动中打开新的 webview。
view.getHitTestResult().getExtra();
return null
仅此而已。以上是关于Android webView 外部链接 -> 新建 Activity的主要内容,如果未能解决你的问题,请参考以下文章
如何在WebView Android中过滤手机和其他Web链接
Flutter Webview - 在浏览器或窗口中打开外部链接
Android WebView 链接到同一个窗口,target=_blank 打开新窗口
ios 8 webview在Safari中打开外部链接,除了一个