1. 程式人生 > >window.open開啟一個視窗,關閉後再開啟此視窗失效

window.open開啟一個視窗,關閉後再開啟此視窗失效

一個表格上有許多列,雙擊每一列,開啟一個視窗顯示明細。但是關閉這個視窗之後,再想開啟這個視窗,怎麼點都沒有反應。在程式碼裡面加alert,發現第二次開啟時,執行到open時,直接就跳過去了。然後在網上一查,才知道window.open()不能重複開啟同一個名字的視窗。比如window.open(url1,"aaa"),開啟一個視窗,關閉後再開啟,是失效的。

就是因為每一次名字都是aaa。但是這麼多列怎麼才能保證window,open每一次開啟都是不同的名字呢?這就需要在第二個引數後面加一個隨機數。這樣每一次開啟,第二個引數就不一樣了。

我在網上看到了一個隨機數的例子

function s4() {


    return Math.floor((1 + Math.random()) * 0x10000)
               .toString(16)
               .substring(1);
};
function JsGuid() {
    return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
           s4() + '-' + s4() + s4() + s4();
}

開啟視窗時:window.open("url", "aaa" + JsGuid());即可

同時貼上window.open的用法(來自API)

定義和用法

open() 方法用於開啟一個新的瀏覽器視窗或查詢一個已命名的視窗。

語法

window.open(URL,name,features,replace)
參                                       數 描述
URL 一個可選的字串,聲明瞭要在新視窗中顯示的文件的 URL。如果省略了這個引數,或者它的值是空字串,那麼新視窗就不會顯示任何文件。
name 一個可選的字串,該字串是一個由逗號分隔的特徵列表,其中包括數字、字母和下劃線,該字元聲明瞭新視窗的名稱。這個名稱可以用作標記 <a> 和 <form> 的屬性 target 的值。如果該引數指定了一個已經存在的視窗,那麼 open() 方法就不再建立一個新視窗,而只是返回對指定視窗的引用。在這種情況下,features 將被忽略。
features 一個可選的字串,聲明瞭新視窗要顯示的標準瀏覽器的特徵。如果省略該引數,新視窗將具有所有標準特徵。在視窗特徵這個表格中,我們對該字串的格式進行了詳細的說明。
replace

一個可選的布林值。規定了裝載到視窗的 URL 是在視窗的瀏覽歷史中建立一個新條目,還是替換瀏覽歷史中的當前條目。支援下面的值:

  • true - URL 替換瀏覽歷史中的當前條目。
  • false - URL 在瀏覽歷史中建立新的條目。

提示和註釋

重要事項:請不要混淆方法 Window.open() 與方法 Document.open(),這兩者的功能完全不同。為了使您的程式碼清楚明白,請使用 Window.open(),而不要使用 open()。

視窗特徵(Window Features)

channelmode=yes|no|1|0 是否使用劇院模式顯示視窗。預設為 no。
directories=yes|no|1|0 是否新增目錄按鈕。預設為 yes。
fullscreen=yes|no|1|0 是否使用全屏模式顯示瀏覽器。預設是 no。處於全屏模式的視窗必須同時處於劇院模式。
height=pixels 視窗文件顯示區的高度。以畫素計。
left=pixels 視窗的 x 座標。以畫素計。
location=yes|no|1|0 是否顯示地址欄位。預設是 yes。
menubar=yes|no|1|0 是否顯示選單欄。預設是 yes。
resizable=yes|no|1|0 視窗是否可調節尺寸。預設是 yes。
scrollbars=yes|no|1|0 是否顯示滾動條。預設是 yes。
status=yes|no|1|0 是否新增狀態列。預設是 yes。
titlebar=yes|no|1|0 是否顯示標題欄。預設是 yes。
toolbar=yes|no|1|0 是否顯示瀏覽器的工具欄。預設是 yes。
top=pixels 視窗的 y 座標。
width=pixels 視窗的文件顯示區的寬度。以畫素計。