最近做項目,需要用到彈窗,一開始直接使用的window.open()打開新窗口,毫無疑問,新窗口直接被瀏覽器攔截了。
於是稍微研究了一下瀏覽器的彈窗攔截策略,發現如果是用戶即時點擊而導致的彈窗,瀏覽器不會進行攔截,就像是a標簽的行為那樣,瀏覽器會認為這是用戶主動打開的窗口,因此不會將這個彈窗視為惡意彈窗進行攔截。
那么問題就簡單了,直接使用jQuery模擬超鏈接(<a>)被點擊,當按下一個按鈕時,想打開一個新的標簽頁,可以模擬鏈接被按下,然后打開鏈接。
但是在jQuery中,使用a.click(), a.trigger('click')等都不會引起鏈接默認事件被執行,這個和a標簽的點擊事件有關。我們每次點擊a標簽的鏈接,觸發的是a標簽包含的文字的原始點擊事件而進行的跳轉。
示例代碼如下所示:
$('#alert-success').append('<a href="http://www.baidu.com" target="_blank"><span id="test">test</span></a>');
$('#alert-success a #test').click();//這里點擊的是a標簽包含的文字
$('#alert-success a').remove();//刪去a標簽
