1. 程式人生 > >jquery 觸發a標籤點選事件,彈出頁面;不被瀏覽器遮蔽攔截的開啟視窗的方法

jquery 觸發a標籤點選事件,彈出頁面;不被瀏覽器遮蔽攔截的開啟視窗的方法

<a id="alink" href="abc.aspx" style="visibility: hidden;">下一步</a>
$("#alink").click(); // 觸發了a標籤的點選事件,但是沒有觸發頁面跳轉
document.getElementById("alink").click(); //既觸發了a標籤的點選事件,又觸發了頁面跳轉

把 “下一步” 改為 “<span id="spanId">下一步</span>” 即給A標籤中的文字新增一個能被jQuery捕獲的元素,然後$("#spanId").click();,才可以觸發頁面跳轉。

之所以會想要寫這篇文章,是因為我在最近的專案中使用Js開啟新的窗體時被攔截了,因此,讓我產生了對瀏覽器攔截圖蔽新窗體的興趣,想了解一下為什麼會被攔截。

 說到在新的視窗開啟新的網頁,通常是使用超連結標籤的target ,_blank實現。當點選了超連結時可以自動的開啟新的視窗,但是實際上,需要在執行了某些操作之後通過JS的方式開啟。    而通過JS的方式開啟方式比較常用的就是通過window.open 開啟新的視窗。這裡說明一下,在通常情況下,使用window.open的方法,是不會被瀏覽器的遮蔽攔截,只有在惡意彈窗的時候,才會被遮蔽。當用戶進行點選觸發開啟的視窗,是能被瀏覽器接受的。網路上有很多文章說什麼“強制彈窗”,“不會被攔截”,我看了一下,覺得該遮蔽的還是會遮蔽,我想定個時間,讓它自動彈窗,還是不行。我分析一下他們的原理,一種是通過超連結,在js中click()觸發,另一種是使用js通過form的submit()觸發,但是這不能繞開瀏覽器的遮蔽。因為他們的原理是一樣的,不是使用者即時觸發的。瀏覽器很容易就能發現和阻止。
   人們常說的會被瀏覽器攔截主要是因為不是由使用者發生的操作開啟的視窗,包括定時器,ajax非同步執行之後等發生的開啟視窗的操作。但是比不是所有的瀏覽器會攔截。經過本人對各大瀏覽器的測試,非使用者觸發操作彈窗, 遨遊通過,ie通過 ,獵豹不通過 ,chrome不通過,360瀏覽器不通過,火狐不通過。一般正常的操作是不會被遮蔽的,但是惡意彈窗很容易被瀏覽器識別,如果想不經過使用者觸發,直接彈窗,只能期待使用者是使用IE和遨遊瀏覽器的。 現在總結一下,常見正常彈出視窗失效的原因: 1.使用window.open,但是定義視窗名,也就是在開啟視窗傳入name引數,因為window.open只能開啟唯一的窗體名為name的窗體。所以有些人會以為被瀏覽器攔截圖蔽了。
2.使用非同步的ajax,通過ajax向伺服器請求,在請求完成後再開啟視窗的操作,如果是使用非同步的方式,將出現延時,這是瀏覽器就會以為不是使用者觸發的操作,這時只要設定同步的方式即可。筆者就是因為這個原因。 可能存在替代方案: 既然想到彈窗,固然是因為有這方面的需求,目前‘瀏覽器無法攔截的彈出視窗’是不可能的,能不能找到替代方案。這裡提供兩個方案: 1.如果是彈窗廣告,一般的做法是在頁面document繫結click事件或者的srcoll事件,因為一般開啟網頁都會點一下或者是滾一下滑鼠。所以就很容易的彈窗了(這裡以技術出發,筆者代表絕大部分使用者不接受這種廣告方式)。 2.如果是彈出通知資訊,就更容易,不用這麼鬼鬼祟祟了,直接彈出div的“視窗就行”。 如果有這方面的需求的,看到這篇文章應該會或多或少的有所收穫,如果找不到解決方案,請給我留言,希望能夠共同探討。