2012-03-10 145 views
-3

我想在GreaseMonkey中創建某種工作流。 我開始的GreaseMonkey定義如果尚未定義的jQuery:如何點擊打開的窗口中的按鈕

/*! jQuery v1.7.1 jquery.com | jquery.org/license */ 
if (typeof jQuery == 'undefined') 
(function(a,b).......function(){return f})})(window); // packed version 
jQuery.noConflict(); 
/*! end of jQuery */ 

然後,定期檢查網頁(jQuery.ajax /類型=得到/ URL:window.location.href)。 當某些條件得到滿足,則使用

var url = <some page on the same domain> 
var opened = window.open(url, "XYZ"); 

的問題是如何讓打開的窗口上的按鈕,單擊創建的窗口。比方說,在頁面上有一個按鈕

<input type="button" id="clickme" 

我已經試過了如此明顯的

opened.document.getElementById('clickme').click() 
jQuery(opened.document).find('#clickme').click() 

但無論工作。這可能是一個GreaseMonkey問題,所以想看看是否有人有類似的工作。我目前的解決方法是針對打開的URL設置另一個GreaseMonkey腳本,如果window.name ='XYZ',單擊該按鈕。

+0

@Richardakacyberkiwi無論如何,這並沒有改變這個事實,這是一個模糊的問題 – ajax333221 2012-03-10 03:58:50

+0

它是模糊的,因爲(1)幾個不同的東西ca n被認爲是「窗戶」,並且**你如何開放它很重要。 (2)同樣,有幾件事情可以被視爲「按鈕」,不同的類型需要不同的技術。 (3)同域是否有巨大差異,但沒有說明。 (4)Greasemonkey問題幾乎總是非常特定於頁面。細節(未給出)很重要。 – 2012-03-10 04:01:34

回答

1

這個問題很模糊;我假設你使用window.open或類似的東西創建了一個窗口,並且想要與DOM進行交互。

您應該能夠使用參照新打開的窗口中你可以使用window變量在常規的JavaScript:

window.document.getElementById(...).doStuff(...) 

成爲

var thatWindowReference = window.open(...); 
... 
thatWindowReference.document.getElementById(...).doStuff(...) 

如果你有jQuery的加載的窗口內,那麼你可以做

thatWindowReference.$('selector').doStuff(...) 

至於豪w至模擬點擊一個按鈕,窗口內:

thatWindowReference.document.getElementById('thatButton').click(); 

或使用jQuery:

thatWindowReference.$('#thatButton').click(); 

編輯:不使用jQuery在新窗口(test it out on jsFiddle)內:

var w = window.open('about:blank'); 
w.document.write('<button id="test" onclick="alert(\'I was clicked\');">Hello</button>'); 
$(w.document.body).find('#test').click(); 
+0

但我可以在該頁面上使用jQuery(加載在此頁面上)善良嗎? – RichardTheKiwi 2012-03-10 03:47:12

+0

不幸的是,該域名不使用jQuery。在GreaseMonkey中,我甚至不得不加載jQuery,所以它肯定不會在新窗口中加載。爲什麼jQuery(other.document).find(...)不工作? – RichardTheKiwi 2012-03-10 03:55:15

+0

試試'jQuery(otherWindow.document.body).find('selector')' – 2012-03-10 03:58:33

相關問題