我正在制作一个与网页互动的脚本。所以,我需要生成点击事件。 (我正在使用GreaseMonkey)
好吧,我的问题是:
为什么这不起作用于用户脚本:
$(document).ready(function(){
$("a:contains('example')").click();
});
href="JavaScript:void(0)"
这可能是问题吗?答案 0 :(得分:3)
.click()
,就像jQuery .trigger()
一样,只能与jQuery处理的事件一起可靠地工作。在用户脚本和Greasemonkey脚本的情况下,触发click的jQuery实例必须与设置事件处理程序的jQuery(通常)相同。
此外,userscript jQuery interferes with the target page unless you explicitly take countermeasures。
在这种情况下有两种基本方法。 (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);
}
}
请注意,除非设置了$(document).ready()
,否则Greasemonkey脚本中不需要@run-at document-start
。
答案 1 :(得分:1)
由于javascript:void(0)
,您的脚本无效。触发了click
事件,但之后没有任何操作。
如果您将其更改为
<body>
<a href="style.css">example</a>
<script>
$("a:contains('example')").click();
</script>
</body>
例如,您将获得文件style.css
打开。