window.open()攔截
背景是遇到需要實現選擇不同的選項後跳轉頁面,有一些是跳的外鏈,所以需要在新的選項卡開啟。
Location可以實現跳轉是沒問題的,但是實現不了新視窗開啟。
原來記得window是可以,但是是被大部分瀏覽器阻止的。查了下看看。
發現瀏覽器阻止window.open是有條件的。
大部分現代的瀏覽器(泛指 Chrome / Firefox / IE 10+ / Safari)都預設開啟了阻止彈出視窗的策略,原因是 window.open 被廣告商濫用,嚴重影響使用者的使用。這個阻止彈出視窗的操作,並不是直接封殺 windw.open(),而是會根據使用者的行為來判斷這次 window.open() 是否屬於流氓操作。
如果是由使用者觸發的動作所引起的 window.open 就不會 被瀏覽器所阻止,比如寫在 onclick 這些事件 handler 裡的,但如果是程式碼自己觸發的就會 被阻止。
但是如果window.open是在ajax請求完成後的方法裡,也會被阻止。也有人試驗了哪怕使用者點選了加上一定的延遲也是會被攔截的。
本人也試驗加了2000ms的延遲的時候確實被攔截了,1000ms的沒有攔截。
所以儘量在新視窗開啟的時候不要再非同步操作裡實現吧
viewProfile() { if (this.personalProfile) { setTimeout(function(){ window.open('https://my.******.com/group/profile', '_blank'); }, 2000) } else { this.router.navigate(['/profile']); } }