ie9浏览器两个ajax请求同步不兼容_浏览器拦截问题
問題描述:
1、在JS中直接使用window.open(url,"_blank")來打開新窗口是會被攔截的。PS:window.open(url,”_self”)改變當前的窗口可以生效。
2、在ajax異步請求完成后使用window.open來打開新窗口也會出現被攔截現象。
原因分析:
瀏覽器為了維護用戶安全和體驗,對于非用戶操作產生的新彈出窗口會對其進行阻止,因為瀏覽器認為這不是一個用戶希望看到的頁面。
各瀏覽器對攔截時機的判斷不一致。
對于放在ajax完成后的代碼,瀏覽器會認為是網站自主彈出的窗口,有“流氓”的嫌疑。各瀏覽器的攔截反應也有所不同。
解決方案:
方案一、
創建一個a標簽,利用a標簽跳轉,能解決大多數瀏覽器兼容問題,但是這種方法寫在ajax異步請求完成后調用無效
function openWin(url) {var a = document.createElement("a"); //創建a標簽a.setAttribute("href", url);a.setAttribute("target", "_blank");document.body.appendChild(a);a.click(); //執行當前對象 } openWin("./page/......");方案二、
模擬form表單提交,能解決大多數瀏覽器兼容問題,但是這種方法寫在ajax異步請求完成后調用無效。
var form = document.createElement('form'); form.action = '"./page/a.html?id=1'; form.target = '_blank'; form.method = 'POST'; document.body.appendChild(form); form.submit();方案三、
在ajax調用之前先打開窗口,然后再設置新窗口的url來達到跳轉的效果,但是該方法如果ajax響應太慢,則會出現一個空白窗口,影響用戶體驗,所以建議給該新窗口增加提示“正在拼命加載中”,但是我覺得這個并不是最好的解決方案。
//先在ajax函數之前打開新窗口,后再加載url $('#btn').click(function () {//打開一個不被攔截的新窗口var win = window.open();win.document.body.innerHTML="正在拼命加載中......";$.ajax({url: 'a.com',success: function (url) {//修改新窗口的urlwin.location.href = url;}}); });方案四、
把ajax異步改成同步,該方法會阻塞瀏覽器運行導致卡頓,經過測試,就算改成同步,chrome還是會阻攔,Firefox不會阻攔
//先在ajax同步函數之后打開新窗口 $('#btn').click(function () {$.ajax({url: 'a.com',async: false, // 同步,意味著執行該ajax完成后,后續代碼才繼續運行success: function (url) {}});//執行完ajax后再打開新窗口window.open("./page/......", "_blank"); });方案五、
把ajax執行完后,彈出一個彈出框提示用戶,由用戶確認點擊打開,這個方法目前感覺是最友好的
$('#btn').click(function () {$.ajax({url: 'a.com',success: function (url) {option.open({//type: 1,icon: 3,title: "支付",btn: ['立即查看', '取消'],content: "文件已經校驗成功,請查看結果",btn1: function (index) {option.closeAll();window.open("./page/......");},btn2: function (index) {option.closeAll();}});}}); });總結
以上是生活随笔為你收集整理的ie9浏览器两个ajax请求同步不兼容_浏览器拦截问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 控制显示隐藏_iOS13隐藏了5个超实用
- 下一篇: rgb颜色分量的旋转_RGB分量之偏色与