【发布时间】:2013-03-31 20:41:08
【问题描述】:
只有在设置了 target="_blank" 的情况下,我才能让我的 WebView 拦截链接?
我知道 shouldOverrideUrlLoading() 方法,但如果链接设置了 target="_blank",那并没有给我信息。问题是,仅凭 url 我无法区分链接,我想拦截。我需要知道是否设置了 target="_blank"。
有办法吗?谢谢。
【问题讨论】:
只有在设置了 target="_blank" 的情况下,我才能让我的 WebView 拦截链接?
我知道 shouldOverrideUrlLoading() 方法,但如果链接设置了 target="_blank",那并没有给我信息。问题是,仅凭 url 我无法区分链接,我想拦截。我需要知道是否设置了 target="_blank"。
有办法吗?谢谢。
【问题讨论】:
我也希望看到一个检查 target="_blank" 的解决方案,但我认为这是不可能的(除非可能有一些讨厌的 JavaScript 注入黑客)
将额外的参数(例如?oib=1)附加到 URL 并在shouldOverrideUrlLoading 中检查它要简单得多:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("oib=1")) {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
} else {
return false;
}
}
为此,您当然需要控制链接。如果你有很多这样的链接,你可以编写一个 JavaScript 函数来为你工作:
jQuery('a[target="_blank"]').attr('href', function(i, h) {
return h + (h.indexOf('?') != -1 ? '&oib=1' : '?oib=1');
});
【讨论】: