Bri*_*tro 15 javascript browser uiwebview webview feature-detection
根据我的研究:
我需要检测此功能何时不可用.不可能?
附加说明
我正在尝试检测是否可以通过target = _blank打开一个新窗口.例如,UIWebView [应用内浏览器]可以阻止target = _blank按预期工作[它只是在同一个窗口而不是新窗口中打开].我需要一个解决方案来指示由于浏览器限制而无法打开新窗口,例如在UIWebView案例中.不幸的是,弹出窗口阻止程序阻止检查这样的功能,因为它们永远不允许打开新窗口而无需绕过用户输入(即点击).
Cin*_*inn 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 ...).用户代理有其不完善之处,但在许多情况下都可以使用.有解释这里或这里来构建它.
小智 5
根据OP请求我测试了它.它有效.如果弹出窗口阻止程序已启用,我将捕获它,因此我将获得一个可靠的方法来知道它已启用.在这种情况下,我只是发送警报,但你可以做任何你想做的事情.
这是代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Testing Pop-up Blocker</title>
<script>
function openPopUp(urlToOpen) {
var popup_window=window.open(urlToOpen,"myWindow","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=yes, width=400, height=400");
try {
popup_window.focus();
}
catch (e) {
alert("Pop-up Blocker is enabled! Please add this site to your exception list.");
}
}
</script>
</head>
<body onload="openPopUp('http://www.google.com'); return false;">
<p>Testing Pop-up Blocker</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是我得到的,因为弹出窗口阻止程序已启用.
| 归档时间: |
|
| 查看次数: |
3306 次 |
| 最近记录: |