在新視窗中開啟連線的兩種方法:乙個叫opener的全域性物件:如果父頁面和新開視窗中的頁面是不同網域名稱的,瀏覽器會禁止新視窗訪問opener中的內容。但是有乙個操作除外:可以通過window.opener.location = newurl來重寫父頁面的url,即使與父視窗的頁面不同域。
利用這個方式,將父視窗的鏈結悄悄地替換成了釣魚頁面的位址。剛好父視窗的原始頁面沒有做防止被iframe嵌入,可以簡單地通過iframe做乙個極真實的釣魚頁面。如果不看url根本區分不出來是釣魚頁面(父視窗剛開啟的時候好好的,誰會關注到這個url居然悄悄地變了呢?)
chrome有不同的標籤頁面使用不同程序和執行緒,但是有個例外,通過a標籤的target=」_blank」屬性,或者window.open(url)在新視窗中開啟頁面, 會與父視窗共用程序和執行緒。因為opener裡有dom資訊。兩個程序中同時hold住了dom資訊,在多程序下很難道控制,所以乾脆就放在乙個程序裡了。這個算是chrome的乙個小缺陷(firefox也有,ie沒有),不過chrome目前正在跟進和優化這裡。
若新頁面中有乙個定時器,每隔一段時間就有乙個持續的迴圈,這個迴圈在阻塞新頁面本身的js執行緒的同時,也會阻塞opener(也就是開啟新頁面的父視窗)裡的js執行緒。如果再搞得狠一些,父視窗中的頁面互動可以寸步難行。
使用noopener屬性
通過在a標籤上新增這個noopener屬性(rel=」noopener noreferrer」
),可以將新開啟視窗的opner置為空。特點:
可解決除ie外的安全問題,和所有現代瀏覽器的效能問題
window.open並設定opner為空
可解決所有除safari外,所有瀏覽器的安全問題,無法解決效能問題
新建iframe中開啟新視窗,然後關掉iframe
可解決safari下的安全問題,無法解決效能問題
推薦方案
如果是a標籤要在新視窗中開啟,新增noopener屬性
如果是js中開啟新視窗,手動將新視窗的opener置為null
寫了乙個開啟最大新視窗的JS
在ie裡面如果使用a標籤的target black 開啟的新視窗,那麼視窗的大小是由最後一次關閉視窗時視窗大小決定的,如果我們希望a標籤開啟的新視窗都是最大的視窗,那麼我們需要使用window.open來實現。另外在ie7裡面還有另外乙個問題就是如果我們是用a標籤開啟的新視窗,那麼在window.c...
寫了乙個開啟最大新視窗的JS
在ie裡面如果使用a標籤的target black 開啟的新視窗,那麼視窗的大小是由最後一次關閉視窗時視窗大小決定的,如果我們希望a標籤開啟的新視窗都是最大的視窗,那麼我們需要使用window.open來實現。另外在ie7裡面還有另外乙個問題就是如果我們是用a標籤開啟的新視窗,那麼在window.c...
寫了乙個開啟最大新視窗的JS
在ie裡面如果使用a標籤的target black 開啟的新視窗,那麼視窗的大小是由最後一次關閉視窗時視窗大小決定的,如果我們希望a標籤開啟的新視窗都是最大的視窗,那麼我們需要使用window.open來實現。另外在ie7裡面還有另外乙個問題就是如果我們是用a標籤開啟的新視窗,那麼在window.c...