查看文章 |
测试同学那边提交了一个bug,是360浏览器下无法使用加入收藏夹功能。 我简单的看了下,在ie浏览器下,加入收藏夹的功能是正常的,而360显然用的是ie内核,理论上没理由不行的。 不过还是下载了360自己试了一下,没想到真的不行。。 于是开始了这次的调式:
首先上测试代码 1 <a id="fav" href="#">addfav</a>
2 <script type="text/javascript"> 3 var favLink = document.getElementById('fav'), 4 title = document.title, 5 href = location.href; 6 favLink.onclick = function(e) { 7 if (window.sidebar) { 8 window.sidebar.addPanel(title, href, ""); 9 } else if (document.all) { 10 window.external.AddFavorite(href, title); 11 } else { 12 alert("您的浏览器不支持。"); 13 return false; 14 } 15 return false; 16 } 17 </script> 事实证明,360使用的ie的内核,但是也确实没有得到预想的效果。 由于在360下,即时有错也看不到错误提示,所以简单的判断就是,window.external.AddFavorite这里是不是有问题呢。 alert(window.external) //360 undefined & ie [object] 原生的被改了,只好放弃对360的支持了。 那么判断一下,window.external是否存在,如果不存在,就给予提示。 但是脚本并没有进入对应的分支,如下: if(!window.external) { alert(window.external == window.undefined) //ie&360 false KISSY框架倒是有判断外壳的方法,但是360提供了可以伪装ie的user-agent的选项(3q大战增加的?) 如果依赖这种方法来判断的话,依然有可能会有用户狠狠的点击着收藏链接然后大骂。。。
于是想要用捕捉错误的方式来处理, try { 然后发现,居然没有捕捉到错误!! 我好奇了,window.external到底是什么。。 alert(window.external.toString);// ie & 360 undefined 好吧,没有toString方法。。 执行window.external.toString();的时候,在ie下当然就报错了,但是360下没有报错。。 ok,终于找到方法啦。 代码
<a id="fav" href="#">addfav</a>
<script type="text/javascript"> var favLink = document.getElementById('fav'), title = document.title, href = location.href, msg = "浏览器不支持"; favLink.onclick = function(e) { if (window.sidebar) { window.sidebar.addPanel(title, href, ""); } else if (document.all) { try { window.external.toString(); //360下不会报错。 alert(msg); }catch(e) { window.external.AddFavorite(href, title); } } else { alert(msg); return false; } return false; } </script> 我估摸着是360在推他自己的网络收藏夹功能,在修改中使得这个原生方法失效了。
ps:有测试同事去询问在360的朋友,得到的回复是,为了安全所以禁用了加入收藏夹功能,在主程序里面写死了一个白名单。 老实说,我很好奇这个白名单中有哪些站点。。。 |



