根据我的研究:
我需要检测此功能何时不可用。不可能?
附加说明
我正在尝试检测是否可以通过target = _blank打开一个新窗口。例如,UIWebView [应用内浏览器]可以阻止target = _blank按预期工作[它只是在同一个窗口而不是新窗口中打开]。我需要一个解决方案来指示由于浏览器限制而无法打开新窗口,例如在UIWebView案例中。不幸的是,弹出窗口阻止程序阻止检查这样的功能,因为它们永远不允许打开新窗口而无需绕过用户输入(即点击)。
答案 0 :(得分:10)
你不会有100%可靠的东西。
只需尝试使用JS打开一个新窗口就会触发弹出窗口阻止程序;使它成为一种不可靠的方法来测试是否可以打开一个新窗口。
你是对的,它绝对不可靠... window.open()
被屏蔽(即使有window.open(url, '_blank');window.focus();
之类的技巧),click()
也被屏蔽(在包含target =的链接上) _blank“),就像evt = document.createEvent("MouseEvents");evt.initEvent("click", true, true);
...
但无论如何:如果WebView不允许在新选项卡中打开链接,那么它将正常工作。但是,正如您所暗示的,Webview可能会对其进行授权。在这种情况下,您将不知道您是否在webview中。很容易检测新标签中的开放链接是否最终以相同或不同的方式打开(可以在非显示的iframe中以javascript进行测试),但如果在浏览器中打开链接,则无法知道(并设想用户体验javascript代码,从应用程序中打开浏览器中的新选项卡...)。正如Dave Alperovich所说,如果没有尝试过,你无法提前知道会被阻挡的是什么。所以你不应该看那边。
没有可靠的功能或行为区分Webview与Web浏览器。在webview中,您可以获得浏览器中的所有内容(cookies,WebStorage ...)。用户代理有其不完善之处,但在许多情况下都可以使用。有解释here或here来构建它。
答案 1 :(得分:5)