Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不能直接从用户脚本生成“单击”事件?_Javascript_Jquery_Greasemonkey - Fatal编程技术网

Javascript 为什么不能直接从用户脚本生成“单击”事件?

Javascript 为什么不能直接从用户脚本生成“单击”事件?,javascript,jquery,greasemonkey,Javascript,Jquery,Greasemonkey,我正在制作一个与网页交互的脚本。所以,我需要生成点击事件。 我用的是GreaseMonkey 我的问题是: 为什么在用户脚本中不起作用: $(document).ready(function(){ $("a:contains('example')").click(); }); 检查并测试jQuery。工作很好。 它从控制台工作!但不是从剧本中 其他的一切都是有效的。。。 目标有a href=JavaScript:void0这可能是问题所在吗? 由于javascript:void0,您的

我正在制作一个与网页交互的脚本。所以,我需要生成点击事件。 我用的是GreaseMonkey

我的问题是:

为什么在用户脚本中不起作用:

$(document).ready(function(){
    $("a:contains('example')").click();
});
检查并测试jQuery。工作很好。 它从控制台工作!但不是从剧本中 其他的一切都是有效的。。。 目标有a href=JavaScript:void0这可能是问题所在吗?
由于javascript:void0,您的脚本不会执行任何操作。单击事件被触发,但之后没有任何操作

如果你把它改成

<body>
  <a href="style.css">example</a>

  <script>
  $("a:contains('example')").click();
  </script>
</body>

例如,您将打开文件style.css。

由于javascript:void0,您的脚本不会执行任何操作。单击事件被触发,但之后没有任何操作

如果你把它改成

<body>
  <a href="style.css">example</a>

  <script>
  $("a:contains('example')").click();
  </script>
</body>
例如,您将打开文件style.css。

jQuery.click与jQuery.trigger一样,只能可靠地处理jQuery处理的事件。对于userscripts和Greasemonkey脚本,触发click的jQuery实例必须与通常设置事件处理程序的jQuery实例相同

另外

在这种情况下,有两种基本方法。1使用@grant none模式,2正确沙盒脚本并生成一个真正的点击事件

1快速脏@grant none方法:

警告:使用此方法,您不能使用内置的GM_uu函数。而且,页面必须运行jQuery才能使用jQuery函数

2推荐的点击事件方法:

请注意,Greasemonkey脚本中不需要$document.ready,除非设置了@run at document start。

jQuery.click与jQuery.trigger一样,只在jQuery处理的事件中可靠地工作。对于userscripts和Greasemonkey脚本,触发click的jQuery实例必须与通常设置事件处理程序的jQuery实例相同

另外

在这种情况下,有两种基本方法。1使用@grant none模式,2正确沙盒脚本并生成一个真正的点击事件

1快速脏@grant none方法:

警告:使用此方法,您不能使用内置的GM_uu函数。而且,页面必须运行jQuery才能使用jQuery函数

2推荐的点击事件方法:



请注意,Greasemonkey脚本中不需要$document.ready,除非设置了@run at document start。

它确实有效:下次当您遇到jquery问题时,在它上复制它确实有效。。。从控制台,是的。。。但不是从我的剧本。。。就像我上面说的!如何从GreaseMonkey中的用户脚本使其工作?目标有a href=JavaScript:void0,不是……你确定这是代码中不起作用的部分吗?我已经删除了所有其他内容!脚本是100%有什么!!!控制台上有一个go。。。脚本上没有!!这是一个安全问题:可能尝试unsafeWindow.setTimeout而不是$.ready…它确实有效:下次当您遇到jquery问题时-在它上复制它确实有效。。。从控制台,是的。。。但不是从我的剧本。。。就像我上面说的!如何从GreaseMonkey中的用户脚本使其工作?目标有a href=JavaScript:void0,不是……你确定这是代码中不起作用的部分吗?我已经删除了所有其他内容!脚本是100%有什么!!!控制台上有一个go。。。脚本上没有!!这是一个安全问题:可能尝试unsafeWindow.setTimeout而不是$。ready…好的,问题的第一部分已经回答了。。。第二部分:页面不是我的,所以我不能更改任何内容。。。我只是在和它互动。。。单击并分析结果。。。我怎样才能在不改变属性的情况下有效地点击它呢?好的,问题的第一部分已经回答了。。。第二部分:页面不是我的,所以我不能更改任何内容。。。我只是在和它互动。。。单击并分析结果。。。我怎样才能在不改变属性的情况下有效地点击它呢?谢谢,我明天才能测试它,但听起来不错,因为我在第一次运行脚本之前刚刚更改了@grant。。。我一定会试试的;我试过第一种方法。。。页面加载不正确!一切都已就绪,但仍保留“加载…”消息,不会从那里移动!第二种方法不会发生任何事情。。。我还尝试从setTimeout调用clickNode函数,只是为了确保它在加载页面后运行,但什么也没有发生!。。。你建议我用Scriptish而不是GreaseMonkey有一个明确的方法来解决这个问题吗?不。如果这在GM中不起作用,它在Scriptish中也不会起作用。你没有告诉我们的是问题所在。记住:contains区分大小写。链接到目标页面。你是对的。。。在Scriptish上,它只在我从编辑器运行脚本时起作用。。。当我从页面上运行脚本时,它不会…谢谢,我明天只能测试它,但它听起来很奇怪
是的,因为我在第一次运行脚本之前更改了@grant。。。我一定会试试的;我试过第一种方法。。。页面加载不正确!一切都已就绪,但仍保留“加载…”消息,不会从那里移动!第二种方法不会发生任何事情。。。我还尝试从setTimeout调用clickNode函数,只是为了确保它在加载页面后运行,但什么也没有发生!。。。你建议我用Scriptish而不是GreaseMonkey有一个明确的方法来解决这个问题吗?不。如果这在GM中不起作用,它在Scriptish中也不会起作用。你没有告诉我们的是问题所在。记住:contains区分大小写。链接到目标页面。你是对的。。。在Scriptish上,它只在我从编辑器运行脚本时起作用。。。当我从页面运行脚本时,它不会。。。
// ==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);
    }
}