MS Edge 有一个 window.chrome 对象??打破浏览器检测
MS Edge has a window.chrome object?? Breaks browser detection
MS Edge 有一个名为 window.chrome 的对象,与 Google Chrome.
中的对象同名,这是怎么回事?
对我来说,这会破坏 Chrome polyfill 的浏览器检测代码。我想这也会给其他人带来麻烦。
使用:
边缘:25.10586.0.0
Edgehtml: 13.10586
Edge window.chrome 对象中的内容较少。它唯一的子对象是 window.chrome.app,而 Chrome 版本有应用程序、网上商店和运行时(Chrome 版本 49.0.2623.110,64 位)。
他们为什么要这样做?我可以看到制作一个具有所有功能的合适的 window.chrome 对象,但制作一个残缺的对象似乎会造成更大的损害而不是帮助任何事情。
有人遇到过这个吗?我环顾四周,找不到任何东西。谢谢!
"you should be checking features not browsers"
就像一个从未遇到过存在于多个浏览器中但在所有浏览器中都不起作用或功能相同的功能的人一样说话。
我自己最近的案例是,我有一个小功能在所有浏览器中至少工作了 12 年,甚至在 Chrome 出现之前。该函数只是触发一个自定义 url,它在客户端 OS 上注册到 运行 一个外部处理程序。所以它只是在子 _blank window 中启动自定义 url 并立即关闭子 window.
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());
好吧,不是世界末日,除了,不是所有的浏览器都有那个功能...
等等,等等不要告诉我... "Test for the FEATURE!!!!"
我怎么没想到呢?也许是因为,你猜怎么着,Edge 有这个功能,但它的行为不正常。
所以在这里我正在谷歌搜索检测 Chrome 的方法,按名称,出于某种原因。
我是否应该不仅测试该功能是否存在,还应该构建某种实际尝试调用该功能的测试,看看它是否正常工作?我正在测试的东西恰好是 window 打开和关闭行为。我不能弹出垃圾 windows,然后卡住并且不会自行关闭,每次该死的页面加载时,或者每次用户单击需要该功能的该死的按钮时...
如果 !!window.chrome
不再可行,因为 Edge 再次出现,那么我想我又回到了这个彻头彻尾的小丑中:
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
我知道你已经标记了上面的答案,但如果你真的想通过 Google 检测 Google Chrome 浏览器,我建议你使用这样的东西:
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
MS Edge 有一个名为 window.chrome 的对象,与 Google Chrome.
中的对象同名,这是怎么回事?对我来说,这会破坏 Chrome polyfill 的浏览器检测代码。我想这也会给其他人带来麻烦。
使用:
边缘:25.10586.0.0
Edgehtml: 13.10586
Edge window.chrome 对象中的内容较少。它唯一的子对象是 window.chrome.app,而 Chrome 版本有应用程序、网上商店和运行时(Chrome 版本 49.0.2623.110,64 位)。
他们为什么要这样做?我可以看到制作一个具有所有功能的合适的 window.chrome 对象,但制作一个残缺的对象似乎会造成更大的损害而不是帮助任何事情。
有人遇到过这个吗?我环顾四周,找不到任何东西。谢谢!
"you should be checking features not browsers"
就像一个从未遇到过存在于多个浏览器中但在所有浏览器中都不起作用或功能相同的功能的人一样说话。
我自己最近的案例是,我有一个小功能在所有浏览器中至少工作了 12 年,甚至在 Chrome 出现之前。该函数只是触发一个自定义 url,它在客户端 OS 上注册到 运行 一个外部处理程序。所以它只是在子 _blank window 中启动自定义 url 并立即关闭子 window.
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());
好吧,不是世界末日,除了,不是所有的浏览器都有那个功能...
等等,等等不要告诉我... "Test for the FEATURE!!!!"
我怎么没想到呢?也许是因为,你猜怎么着,Edge 有这个功能,但它的行为不正常。
所以在这里我正在谷歌搜索检测 Chrome 的方法,按名称,出于某种原因。
我是否应该不仅测试该功能是否存在,还应该构建某种实际尝试调用该功能的测试,看看它是否正常工作?我正在测试的东西恰好是 window 打开和关闭行为。我不能弹出垃圾 windows,然后卡住并且不会自行关闭,每次该死的页面加载时,或者每次用户单击需要该功能的该死的按钮时...
如果 !!window.chrome
不再可行,因为 Edge 再次出现,那么我想我又回到了这个彻头彻尾的小丑中:
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
我知道你已经标记了上面的答案,但如果你真的想通过 Google 检测 Google Chrome 浏览器,我建议你使用这样的东西:
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);