![](/img/trans.png)
[英]Why is my model value null if I don’t wrap the script code in a click event?
[英]Why can't I generate a 'click' event directly from my user script?
我正在创建一个与网页交互的脚本。 所以,我需要生成点击事件。 (我正在使用GreaseMonkey)
好吧,我的问题是:
为什么这不适用于用户脚本:
$(document).ready(function(){
$("a:contains('example')").click();
});
href="JavaScript:void(0)"
这可能是问题吗? jQuery的.click()
如jQuery .trigger()
只能用jQuery的事件处理工作可靠。 对于userscripts和Greasemonkey脚本,触发click的jQuery实例必须与设置事件处理程序的jQuery(通常)相同。
此外, 除非您明确采取对策,否则userscript jQuery会干扰目标页面 。
在这种情况下有两种基本方法。 (1)使用@grant none
模式,(2)正确沙箱脚本并生成真正的点击事件。
(1)快速而脏的@grant none
方法:
// ==UserScript==
// @name _YOUR_SCRIPT_NAME
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant none
// ==/UserScript==
var $ = window.jQuery;
$("a:contains('example')").click();
警告:使用此方法,您无法使用内置GM_
功能。 并且,页面必须运行jQuery才能使用jQuery函数。
(2)推荐的点击事件方法:
// ==UserScript==
// @name _YOUR_SCRIPT_NAME
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
var targLink = $("a:contains('example')");
clickNode (targLink);
function clickNode (jNode) {
if (jNode && jNode.length) {
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
jNode[0].dispatchEvent (clickEvent);
}
}
请注意,除非设置了@run-at document-start
否则Greasemonkey脚本中不需要$(document).ready()
。
由于javascript:void(0)
你的脚本什么都不做。 触发了click
事件,但之后没有任何操作。
如果你改成它
<body>
<a href="style.css">example</a>
<script>
$("a:contains('example')").click();
</script>
</body>
例如,你将得到文件style.css
open。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.