为什么可以't我生成一个'单击'事件
Why can't I generate a 'click' event directly from my user script?
我正在制作一个与网页交互的脚本。因此,我需要生成点击事件。(我用的是GreaseMonkey)
我的问题是:
为什么这不能从用户脚本中工作:
$(document).ready(function(){
$("a:contains('example')").click();
});
- jQuery进行了检查和测试。工作良好
- 它在控制台上工作!但不是来自剧本
- 其他一切都有效
- 目标有
href="JavaScript:void(0)"
。这可能是问题所在吗
jQuery .click()
与jQuery .trigger()
一样,只能可靠地处理jQuery处理的事件。在用户脚本和Greasemonkey脚本的情况下,触发点击的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);
}
}
请注意,Greasemonkey脚本中不需要$(document).ready()
,除非设置了@run-at document-start
。
由于javascript:void(0)
,您的脚本什么都不做。click
事件被触发,但之后没有任何操作。
如果您将其更改为
<body>
<a href="style.css">example</a>
<script>
$("a:contains('example')").click();
</script>
</body>
例如,您将打开文件style.css
。
相关文章:
- React应用程序:道具在下一个事件后更新
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 全局屏幕span onclick触发一个事件javascript
- 在一个“事件”之后触发一个事件;喜欢“;
- 在离子2中,有任何方法可以将涡旋动量作为一个事件来检测
- 完整日历在多个资源上添加一个事件
- TinyMCE 将另一个事件添加到粗体和斜体按钮
- jQuery触发另一个事件中的事件
- 试图使一个事件依赖于另一个事件,并使用jquery自定义事件传递数据
- 存储一个事件处理程序中的变量以供另一个事件处理器使用
- 当表单验证失败时,我将如何最好地处理下一个事件
- 正在创建一个事件以更改鼠标悬停时的图片
- 当一个单元格被编辑时,是否有一个事件触发,但值没有'不要改变
- JavaScript一次性在多个元素上注册一个事件类型
- 如何在点击时发生另一个事件后使用localscroll
- Vanilla Js:在一个事件中开始一段时间的循环,然后用第二个事件打破它?('mouseover'启
- 取消除最后一个事件之外的所有事件,
- 鼠标滚轮按压-描述了一个事件的名称,以及如何使用jQuery侦听它
- Javascript开始处理下一个事件,然后第一次完成
- 在Jquery中将标志从一个事件传递到另一个事件