MS Edge有一个名为window.chrome的对象与Google Chrome中的名称相同。
对我而言,这会破坏Chrome polyfill的浏览器检测代码。我想象这也会给别人带来麻烦。
使用:
边缘:25.10586.0.0
Edgehtml:13.10586
Edge window.chrome对象的内容较少。它唯一的子对象是window.chrome.app,而Chrome版本有app,webstore和runtime(Chrome版本49.0.2623.110,64位)。
他们为什么要这样做?我可以看到制作一个合适的window.chrome对象具有所有功能,但制作一个残缺的对象似乎会造成更多伤害而不是帮助任何东西。
有人遇到过这个吗?我环顾四周,无法找到任何东西。谢谢!
答案 0 :(得分:7)
“你应该检查功能而不是浏览器”
像某人一样,从未遇到过多个浏览器中存在的功能,但在其出现的所有浏览器中都无法运行或功能相同。
我自己最近的案例,我有一个小功能,在所有浏览器中工作至少12年,因为在Chrome存在之前。该函数只会触发在客户端操作系统上注册的自定义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());
好吧,不是世界末日,除了并非所有浏览器都有这个功能......
等等,不要告诉我......“测试FEATURE !!!!”
为什么我没想到这个?也许是因为,猜猜是什么,Edge有这个功能,而且行为不正确。
所以在这里,我正在谷歌搜索方法来检测Chrome,BY NAME,原因。
我是否不仅要测试该功能的存在,还要构建某种实际尝试调用该功能的测试,看看它是否正常工作?我正在测试的事情恰好是窗口打开和关闭行为。我不能弹出垃圾窗口,然后卡住并且不会自己关闭,每次加载该死的页面,或者每次用户点击需要该功能的该死的按钮时......
如果!!window.chrome
不再可行,因为再一次是Edge,那么我想回到这个彻头彻尾的小丑:
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
答案 1 :(得分:1)
我知道您已经标记了以上答案,但是,如果您确实想通过Google检测到Google Chrome浏览器,我建议您使用以下方式:
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);