2010-12-15 77 views
1

我一直在爲Facebook使用Chrome編寫一個Greasemonkey腳本(拖放作爲擴展)。我知道Greasemonkey是沙盒,至少就Firefox而言,除非在瀏覽器中更改設置,否則無法關閉含腳本的窗口。但是,我知道大多數瀏覽器都允許父窗口關閉子窗口,而不需要用戶的確認。無論如何,我試圖讓我的腳本打開一個窗口,從HTML對象中獲取文本片段,然後在頁面上按下按鈕關閉窗口。用Greasemonkey關閉窗口

我打開窗口代碼如下所示:

function birthday(linkAddress) { 
var winNew=window.open(linkAddress, "_blank", "height=100", "width=100"); 
/*code to be run on page*/ 
    winNew.close() 
} 

的窗口打開罰款,但我得到了Chrome瀏覽器中的JavaScript錯誤說「不能調用方法‘關閉’的未定義」。我認爲我的對象與Greasemonkey沙盒相關有些問題,但我無法確定是什麼。是否可以在Chrome中使用Greasemonkey腳本關閉窗口?我需要啓用一些設置嗎?或者我的代碼錯了?請記住,這段代碼是通過我設置的主窗口頁面中的一個函數運行的,它使用我寫入頁面的按鈕的onClick事件在腳本中設置爲一個函數。還有任何提示訪問子頁面上的DOM元素將不勝感激。

感謝您的幫助!

(對不起,我很新,以及不與編程實踐中,這是第一次我寫了一個腳本Greasemonkey的)

回答

0

的代碼發佈的片段不足和不匹配規定「按下頁面上的按鈕關閉窗口」的操作。

所以最好的猜測是關閉功能在birthday()之外(其中winNew已定義)或者未顯示的代碼中的某些內容導致了問題。

另一個需要注意的是Greasemonkey腳本也可能觸發子窗口 - 取決於打開子窗口時是否指定了哪個URL。

下面是按下按鈕打開和關閉子窗口的示例代碼:
See it in action at jsfiddle

<html> 
<head> 
<script type="text/javascript"> 
    var chldWnd; 

    function OpenChldWin() 
    { 
     //chldWnd = window.open ("http://www.google.com"); 
     chldWnd = window.open ('','','height=200, width=200'); 
     chldWnd.document.write ('<p>My New Window</p>'); //-- Don't do if opening a URL in new window. 
     chldWnd.focus(); 
    } 

    function CloseChldWin() 
    { 
     if (chldWnd.closed) 
      alert ('Child window was already closed.'); 
     else 
     { 
      chldWnd.close(); 
      alert ('Child window is NOW closed.'); 
     } 
    } 
</script> 
</head> 
<body> 
<input type="button" value="Open Child Window"  onclick="OpenChldWin()"> 
<input type="button" value="Close the Child Window" onclick="CloseChldWin()"> 
</body> 
</html> 
+0

我想我的問題的一部分也是,我認爲我是從頁面運行的代碼,但實際上我並不是。感謝您的幫助澄清。我將再次嘗試,並在必要時添加位置黑客。 – Matt 2010-12-16 19:57:08