從後端傳一個url, 前端收到後打開新視窗跳到這個連結.使用 window.open(url, '_blank'); 被瀏覽器攔截.
window.open(url, '_blank');
請問有什麼辦法實現嗎 ? 試了下模擬a標籤點擊照樣攔截, 彈出p加載iframe不行, 必須要打開窗口.
問題已解決, 見採納答案.
学习是最好的投资!
這個問題首先要了解為啥會攔截,瀏覽器會對"非人為"的調用window.open的弹窗进行拦截,什么叫做"非人为"的,就是浏览器判断在用户操作和window.open之间不是连续的,浏览器会认为可能是流氓程序弹出的广告窗口从而进行拦截从楼主的描述可以看出,楼主应该是进行某个操作之后,通过ajax去获取一个url,然后通过window.open打开页面,我们都知道ajax是异步的,浏览器就认为不是连续的,所以就拦截了解决方法可以先在操作(比如点击)的时候,直接window.open,然後再去ajax獲取數據,再給打開的window賦值url,大概的偽代碼如下:
window.open
el.addEventListener('click',function(){ var winHandler = window.open("","_blank"); ajax(function(url){ winHandler.location.href = url; }); })
<a href="http://www.baidu.com" target="_blank" id="xx">hahah</a> <button type="button" id='btn'>clickme</button> <script> document.getElementById('btn').onclick = function() { document.getElementById('xx').click(); } </script>
沒毛病啊。
為什麼要加_blank?
window.open('www.baidu.com')
url要是帶http或https頭的
把觸發方法的事件寫成一個a標籤,取得url的邏輯寫在這個a標籤指向的Controller裡,然後就可以回傳一個新頁面,總之繞過window.open方法
瀏覽器為了安全問題,會自動攔截彈窗
只有使用者點擊之後一小段時間內的一個開啟新視窗的指令,例如,window.open 才不會被攔截,這是瀏覽器的安全限制。
試試給ajax請求參數再加一條:async: false
async: false
這個問題首先要了解為啥會攔截,瀏覽器會對"非人為"的調用
window.open
的弹窗进行拦截,什么叫做"非人为"的,就是浏览器判断在用户操作和window.open
之间不是连续的,浏览器会认为可能是流氓程序弹出的广告窗口从而进行拦截从楼主的描述可以看出,楼主应该是进行某个操作之后,通过ajax去获取一个url,然后通过
window.open
打开页面,我们都知道ajax是异步的,浏览器就认为不是连续的,所以就拦截了解决方法可以先在操作(比如点击)的时候,直接
window.open
,然後再去ajax獲取數據,再給打開的window賦值url,大概的偽代碼如下:沒毛病啊。
為什麼要加_blank?
url要是帶http或https頭的
把觸發方法的事件寫成一個a標籤,取得url的邏輯寫在這個a標籤指向的Controller裡,然後就可以回傳一個新頁面,總之繞過window.open方法
瀏覽器為了安全問題,會自動攔截彈窗
只有使用者點擊之後一小段時間內的一個開啟新視窗的指令,例如,
window.open
才不會被攔截,這是瀏覽器的安全限制。試試給ajax請求參數再加一條:
async: false