【问题标题】:Calling content_script.js custom event from jQuery?从 jQuery 调用 content_script.js 自定义事件?
【发布时间】:2016-05-06 00:12:44
【问题描述】:

在我正在开发的 chrome 扩展的 content_script.js 中,我有:

document.addEventListener("funcDoRequest", function (params)
{
    alert('From content_script');
});

在我的 index.html 网页中,如何从 jQuery 调用这个 funcDoRequest?有什么例子吗?我也需要将 detail.x 参数传递给它。

我可以在没有 jQuery 的情况下这样做,但我不想要这个:

<script>
    var event = new CustomEvent('funcDoRequest', { 'detail': { something: 'something' } });
    var go = function () { document.dispatchEvent(event); }
</script>
<a href="javascript:go();">Click me</a>

谢谢。

【问题讨论】:

  • “我可以在没有 jQuery 的情况下这样做,但我不想要这个” 是否需要在 Question 中替换 jQuery 版本的 javascript?使用 jQuery 执行您目前不使用 jQuery 即可完成的任务的目的是什么?
  • 我假设 jQuery 会提供一种更优雅的方式来做同样的事情。
  • 是的,可以使用 jQuery。不确定如何确定或什么标准是比另一种方法“更优雅”的方法? jQuery解决方案是否需要问题?
  • 我只想做一些类似 jQuery('body').trigger('funcDoRequest');为什么这不起作用?
  • “我只想做一些类似 jQuery('body').trigger('funcDoRequest'); 的事情吗?” 事件似乎附加到 @987654323 @,不是body js 问题?见帖子

标签: jquery google-chrome chromium


【解决方案1】:

一种可能的 jQuery 等效方法可以将 .click() 事件设置为 &lt;a&gt; 元素,使用 .on()"funcDoRequest" 作为自定义事件;在点击a元素时调用.trigger()"funcDoRequest"作为第一个参数,数据对象{ something: "something" }作为第二个参数;其中传递的数据对象可以在.on("funcDoRequest") 处理程序中作为第二个参数params 访问。还在a 点击处理程序处添加了event.preventDefault()

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<script>
  $(document).ready(function() {
    var doc = $(this); // `document`
    $("a").click(function(e) {
      e.preventDefault();
      doc.trigger("funcDoRequest", {
        "something": "something"
      })
    });
    // at `content_script.js`
    $(document).on("funcDoRequest", function(e, params) {
      console.log(e, params);
      alert(JSON.stringify(params))
    });
  })
</script>
<a href="#">Click me</a>

【讨论】:

  • @KenWilliams 你能描述一下“似乎不起作用”吗? jQuery 是在document 加载的吗? , 在内容脚本?
  • 它什么也不做。甚至没有 javascript 控制台错误。 jQuery 到处都可以正常加载。对我来说,这应该有效吗? // index.html jQuery("#clickme").on("click", function () { jQuery(document).trigger('funcDoRequest'); }); &lt;a href="#" id="clickme"&gt;Click me&lt;/a&gt;// content_script.js document.addEventListener("funcDoRequest", function (intralaunch) { alert('Here in content_script'); });这太蠢了,我连新行都加不了。
  • 如何在document 加载jQuery?并在content_script.js 确定 jQuery 是在两者都定义的吗?
  • 不,.trigger() 不会在document.addEventListener("funcDoRequest", function (intralaunch) { alert('Here in content_script'); }) 调用事件
  • 我没有关注你 js。我在 content_script.js 中测试过 jquery 吗?它工作正常,是的。 jQuery 也被添加到 manifest.json 中。我已经得出结论,它并没有变得比我认为上面的评论更好.. 感谢您的帮助。
猜你喜欢
  • 2019-11-05
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多