javascript – MS Edge有一个window.chrome对象??打破浏览器检测
作者:互联网
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对象具有所有功能,但制作一个残缺的似乎它会比帮助任何东西造成更多的伤害.
谁遇到过这个?我环顾四周,无法找到任何东西.谢谢!
解决方法:
“你应该检查功能而不是浏览器”
像是从未遇到过多个浏览器中存在的功能但在其出现的所有浏览器中无法运行或功能相同的人.
我自己最近的案例,我有一个小功能,在所有浏览器中工作至少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;
标签:javascript,google-chrome,microsoft-edge 来源: https://codeday.me/bug/20190611/1220015.html