测试同学那边提交了一个bug,是360浏览器下无法使用加入收藏夹功能。我简单的看了下,在ie浏览器下,加入收藏夹的功能是正常的,而360显然用的是ie内核,理论上没理由不行的。
不过还是下载了360自己试了一下,没想到真的不行。。
于是开始了这次的调式:
首先上测试代码
事实证明,360使用的ie的内核,但是也确实没有得到预想的效果。
由于在360下,即时有错也看不到错误提示,所以简单的判断就是,window.external.AddFavorite这里是不是有问题呢。
alert(window.external) //360 undefined & ie [object]
好吧,360下没有AddFavorite方法了。。
原生的被改了,只好放弃对360的支持了。
那么判断一下,window.external是否存在,如果不存在,就给予提示。
但是脚本并没有进入对应的分支,如下:
if(!window.external) {
alert('360?'); // unexec
}
alert(!!window.external) //ie&360 true
呃。。。再来几个判断看看:
alert(window.external == window.undefined) //ie&360 false
alert(typeof window.external == "undefined") //ie&360 false
alert(typeof window.external == "object") //ie&360 true
我应该怎么判断才好。。。
KISSY框架倒是有判断外壳的方法,但是360提供了可以伪装ie的user-agent的选项(3q大战增加的?)
如果依赖这种方法来判断的话,依然有可能会有用户狠狠的点击着收藏链接然后大骂。。。
于是想要用捕捉错误的方式来处理,
try {
window.external.AddFavorite(href, title);
}catch(e) {
alert('360?');
}
然后发现,居然没有捕捉到错误!!
我好奇了,window.external到底是什么。。
alert(window.external.toString);// ie & 360 undefined
好吧,没有toString方法。。
执行window.external.toString();的时候,在ie下当然就报错了,但是360下没有报错。。
ok,终于找到方法啦。