測試同學那邊提交了一個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,終于找到方法啦。
新聞熱點
疑難解答