MS Edge有一个window.chrome对象??破坏浏览器检测
MS Edge has a window.chrome object?? Breaks browser detection
MS Edge有一个名为window.chrome的对象,与Google chrome中的对象同名,这是怎么回事。
对我来说,这是破坏Chrome polyfills的浏览器检测代码。我想这也会给其他人带来问题。
使用:
边缘:25.10586.0.0
Edgehtml:13.10586
Edge window.chrome对象中的内容较少。它唯一的子对象是window.chrome.app,而chrome版本有应用程序、网店和运行时(chrome版本49.0.2623.110,64位)。
他们为什么要这样做?我可以看到制作一个具有所有功能的合适的window.chrome对象,但制作一个残缺的对象似乎弊大于利。
有人遇到过这个吗?我环顾四周,什么也找不到。谢谢
"您应该检查功能而不是浏览器"
像从未遇到过在多个浏览器中存在但在所有浏览器中都不起作用或功能相同的功能的人一样说话。
在我最近的案例中,我有一个小功能,从Chrome出现之前开始,它已经在所有浏览器中运行了至少12年。该函数只是触发一个自定义url,该url在客户端操作系统上注册以运行外部处理程序。因此,它只是在子_blank窗口中启动自定义url,并立即关闭该子窗口。
function foo(stuff,otherstuff) {
t = window.open("myproto://"+stuff,"_blank");
t.close();
window.location.replace("path/to/...?"+otherstuff);
}
Chrome,只有Chrome,直到2016年底左右的某个时候,才更改了window.open(),使其不再阻塞,所以现在我必须解决这个问题:
t = window.open("myproto://"+stuff,"_blank");
t.addEventListener('load',t.close());
好吧,不是世界末日,只是,不是所有的浏览器都有这个功能。。。
等等,等等,不要告诉我…"测试功能!!!"
为什么我没有想到呢?也许是因为,你猜怎么着,Edge有这个功能,但它的行为不正常。
因此,我在谷歌上搜索检测Chrome的方法,按名称,有原因。
我不仅应该测试该功能的存在,还应该构建某种测试来实际调用该功能,看看它是否正确?我正在测试的是窗口打开和关闭行为。我不能每次加载该死的页面,或者每次用户点击需要该功能的该死按钮时,弹出垃圾窗口,然后被卡住而不关闭。。。
如果!!window.chrome
因为Edge而不再可行,那么我想我又回到了这个彻头彻尾的小丑:
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
我知道你已经标记了上面的答案,但如果你真的想通过谷歌检测谷歌Chrome浏览器,我建议你使用这样的东西:
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
- 如何识别“;输入“;没有浏览器检测的事件
- 使用浏览器进行浏览器检测
- 现代浏览器检测
- 浏览器检测-移动与PC
- 用于浏览器检测和url链接的脚本
- Javascript浏览器检测与IE 11
- MS Edge有一个window.chrome对象??破坏浏览器检测
- 安卓手机浏览器检测
- safari 7的浏览器检测
- 使用IE10/IE11进行浏览器检测
- 浏览器检测和 Firefox data-src 属性
- 桌面浏览器检测Javasctipt
- 浏览器检测浏览器,如 Chrome Canary
- 功能检测(不是用户代理嗅探)以执行浏览器检测
- 安卓原生浏览器检测通过用户代理正则表达式
- 浏览器检测
- 使用 Zend Framework 或 Javascript 进行浏览器检测
- 浏览器检测和重定向
- 如何跨浏览器检测(并纠正?)各种滚动条可见性
- 浏览器检测脚本和 if 语句