2012-03-10 130 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

相关问题