加入收藏 | 网站地图 | | RSS | WAP
你好,游客 登录 注册 搜索

360浏览器下加入收藏夹功能失效的问题

[日期:2010-11-24] 作者: 来源: [字体: ]

测试同学那边提交了一个bug,是360浏览器下无法使用加入收藏夹功能。我简单的看了下,在ie浏览器下,加入收藏夹的功能是正常的,而360显然用的是ie内核,理论上没理由不行的。

不过还是下载了360自己试了一下,没想到真的不行。。

于是开始了这次的调式: 

首先上测试代码

 1 <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下没有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,终于找到方法啦。

代码
<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的朋友,得到的回复是,为了安全所以禁用了加入收藏夹功能,在主程序里面写死了一个白名单。

老实说,我很好奇这个白名单中有哪些站点。。。

关键词:360  收藏夹  失效 

收藏 推荐 打印 | 录入:blue1000 | 阅读:
本文评论   查看全部评论 (2)
表情: 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事/刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 2 楼
* 匿名 发表于 2016/12/24 22:39:41
http://www.blue1000.com/bkhtml/c185/2010-01/66881p16.htm 医务科办主任个人简历范文 http://www.135995.com/show/3277.html 产品经理个人简历范文 http://www.135995.com/show/3276.html
第 1 楼
* 匿名 发表于 2013/4/22 15:33:16
这个方法已经不适用了,需要判断通过typeof window.external.AddFavorite为"undefined"还是unknow进行处理