2011-07-10 94 views
0

這是我的功能;Javascript錯誤:win1未定義

function ButtonClickAction3 (zEvent) { 

    var var4 = prompt ("text"); 
    var var1 = prompt ("text") 
    var var2 = prompt ("text"); 
    var var3 = prompt ("text"); 

    win1 = window.open("MYURL1,"", "win1", "width=100,height=100,resizable"); 
    setTimeout("win1.close()",500); 
    win2 = window.open("MYURL2,"", "win2", "width=100,height=100,resizable"); 
    setTimeout("win2.close()",500); 
    win3 = window.open("MYURL3,"", "win3", "width=100,height=100,resizable"); 
    setTimeout("win3.close()",500); 

} 

當我用這個代碼與greasemonkey;

win1 = window.open("MYURL,"", "win1", "width=100,height=100,resizable");

窗口1打開後 「win1.close()」 命令沒有爲它工作。 İt說「win1沒有定義」。

但是,當我從控制檯打開一個窗口與此代碼;

win1 = window.open("MYURL1,"", "win1", "width=100,height=100,resizable"); 

WIN1成爲定義,我可以win1.close()

關閉它如何使用與Greasemonkey的?

回答

3

首先,您需要爲win1變量作用域使用var關鍵字。其次,它是一個很好的做法在你的職能作用,而不是字符串傳遞是eval()倒是

試試這個:

var var4 = prompt ("text"); 
var var1 = prompt ("text"); 
var var2 = prompt ("text"); 
var var3 = prompt ("text"); 

var win1 = window.open("MYURL1", "win1", "width=100,height=100,resizable"); 
setTimeout(function(){win1.close();},500); 

var win2 = window.open("MYURL2", "win2", "width=100,height=100,resizable"); 
setTimeout(function(){win2.close();},500); 

var win3 = window.open("MYURL3", "win3", "width=100,height=100,resizable"); 
setTimeout(function(){win3.close();},500); 
+0

''這是一個很好的做法,將函數作爲函數傳遞,而不是字符串「 - 實際上,這是對Greasemonkey腳本的要求,這是由於沙箱的安全性。 –

0

我只想用這種語法去是安全的道路上始終:

window["win1"] = window.open(...); 

然後將其關閉:

if (window["win1"]) 
    window["win1"].close(); 

通過分配變量到window你強制它具有全局範圍。