ajax和window.open()在部分瀏覽器中的衝突解決

1,ajax的默認異步方式是true的,即ajax和下面的代碼同時異步執行,即使在ajax的回調方法中使用window.open(),也是無法下載的,這時可以採用設置ajax的async: false,完成整個ajax之後再執行下載是可行的,缺點是:如果後臺響應時間過長,JS爲單線程的,前臺會卡頓,並容易失去響應。

2,這種方式是在運行ajax之前先w=window.open("",""),預先打開一個空的或者設定好網頁(顯示需要等待好一點),在完成ajax並獲得地址之後將w.location=address;重新給w地址賦值,同樣可以完成下載,親自測試通過,缺點:用戶體驗略差。

3,採用settimeout()輪詢的方式,定時檢查ajax過程是否完成,在ajax中設定標識變量,完成後在window.open(address);測試過,部分移動瀏覽器無效(UC,apad版),大部分瀏覽器可以通過。

4,在頁面中加入一個<iframe name="fakeframe" style="display:none;" ></iframe>並在ajax執行之前執行w = window.open("page.html","fakeframe");ajax後回調方法中執行變更w.location地址,原理同2,只不過這個iframe是在當前頁,並且隱藏,不用彈窗,效果略好,但同樣部分移動版瀏覽器無法使用(UC,apad版),大部分瀏覽器可以通過。
發佈了11 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章