1. 程式人生 > >window.open 不會重複開啟視窗

window.open 不會重複開啟視窗

很多的網站會使用window.open其開啟一個視窗,但是使用者有時候會重複開啟相同的視窗,如果開啟的視窗多了,使用者將不勝其煩。為了解決這個問題,我決定重寫window.open方法。

       window.open 方法是否可以重寫

這個問題很容易驗證,隨便開啟一個瀏覽器的控制檯,然後給window.open賦值一個function,我們將會看到window.open變成了我們賦值的方法。但是這種賦值將不能讓我們使用其之前的方法,那麼我認為可以在匿名函式中將原來的window.open 賦值給一個變數。然後在重寫的方法中做出調整,並呼叫變數也就是呼叫原來的window.open方法去開啟視窗。

      我只是提供了一個解決的思路,具體的程式碼還沒有寫出來,我只是定義了其他的方法類實現這個功能,當然有了上述的思路,重寫window.open還是可以得,但是由於重寫後的window.open將不在是本地方法,需要每個頁面必須引入相關的js。

      那實現的邏輯是什麼呢!

      實現同一個頁面不開啟視窗的方式其實有兩種,1.使用者開啟視窗後,讓使用者不可以再開啟相同的視窗。2讓使用者可以開啟新的視窗,但是需要關閉原來的相同的視窗。權衡之下我決定使用第二種方式來實現這個功能,因為使用者可能存在這樣一種情況,就是使用者不重新整理開啟的視窗,而是想開啟新的視窗來看效果。而這個時候如果是使用第一種情況,使用者看到的結果將只能是舊的資料。

      具體實現:

      首先使用者開啟視窗的時候我做一個hashcode處理,得到url的唯一標識,然後使用隨機數唯一標識這次動作,然後在url的後面拼接兩個引數一個是原來的url的hashcode,另一個是隨機數。通過這兩個引數就可以唯一標識新開啟的視窗。我將這兩個引數分別作為key和value設定到coockie中去。然後在新視窗中每隔200ms去判斷value的值是否與本頁面的隨機數相同。如果不相同,則證明打開了一個新的視窗。那麼本視窗將關閉。