window.open()我想應該很多人都不陌生吧,它可以實現除用a標簽以外來實現打開新窗口!
最近開發項目用到時,卻遇到了麻煩,本來好好的彈出窗口,結果被瀏覽器無情的給攔截了!
代碼如下:

$.getJSON(URL,data,function(data,state){ if(state=='success'){ window.open('http://www.cnblogs.com/garfieldzhong/'); }else{ alert('請求失敗!'); } })
這要手動允許彈出窗口,開發的東西可是給要給用戶玩的,這樣的攔截顯然是玩不轉的!
這讓我百思不得其解,於是乎,只有到百度里谷歌之,發現,原來,這居然是瀏覽器出於對安全的考慮,把這種非用戶操作的行為給攔截了!這如果不解決掉顯然是有損助用戶體驗的!
方法倒也挺多的,不過,有些方法試了貌似是行不通的!比如創建一個a標簽,getJson完了去觸發a的點擊,事實證明這方法對此無效;還有加定時器的,這貌似也不行,而且,加定時器這事個人覺得也挺不靠譜的,畢竟,你無法預知網友的網速等等,不確定性太在!
這里介紹下個人親自試過,而且有效的方法!
方法一:

$("#btn").on("click",function(){ var goto = window.open(); $.getJSON(URL,data,function(data,state){ if(state=='success'){ goto.location.href = 'http://www.cnblogs.com/garfieldzhong/' }else{ alert('請求失敗!'); } }) });
此方法,可以實現新窗口打開新頁面,不過,它有個問題,那就是當異步請求失敗了,也依然會有一個新窗口打開,因為它的原理很明顯,是一開始打開一個空的新窗口,然后改變新窗口的url,以此來實現跳轉。這似乎與我們的要求不太符合。所以找來了第二種方法!
方法二:

$("#btn").on("click",function(){ $.ajaxSettings.async = false; //請求前設置為同步請求 $.getJSON(URL,data,function(data,state){ $.ajaxSettings.async = true;//切記,請求完成之后要設置回異步 if(state=='success'){ goto.location.href = 'http://www.cnblogs.com/garfieldzhong/' }else{ alert('請求失敗!'); } }) });
關鍵詞就是$.ajaxSettings.async,設置了ajax請求的方法,請求前為同步請求,這樣就能避免被瀏覽器攔截,但是,不推薦使用同步方法,所以,當此次ajax/getjson完了之后要把值改回 true。
目前,因為本人水平不限,只能用這樣的方法來實現,不知道哪位大神有沒有更好的方法,希望能給予指導啊!