MS Edge有一个window.chrome对象??破坏浏览器检测

MS Edge has a window.chrome object?? Breaks browser detection

本文关键字:浏览器 检测 对象 Edge 有一个 window chrome MS      更新时间:2023-12-30

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);