通过扩展将事件添加到原始页面中具有事件处理程序功能的元素

时间:2018-10-24 13:37:46

标签: javascript google-chrome-extension firefox-addon

在我的内容脚本中,我有一个元素(更具体地说,是element.addEventListener("mouseover", pageFunction("foo", "bar")); 标记),我需要向其中添加一个事件。但是,事件处理程序是在页面JS中定义的,我不知道如何将其附加到扩展中我元素的事件中。我想要实现的是:

location.href="javascript:pageFunction(); void 0";

我还阅读了其他问题,例如this one,它建议注入代码或使用selection.cells ,但我不知道如何在我的情况下应用它们。

1 个答案:

答案 0 :(得分:0)

根据MDN参考there is a way for page and content scripts to communicate with each other

  

在Firefox *中,内容脚本中的DOM对象获得一个额外的属性wrappedJSObject。这是对象的“未包装”版本,其中包括任何页面脚本对该对象所做的任何更改。

现在,在您的代码中,您将立即调用该函数,而不是将侦听器传递给引用。为了解决这个问题,您应该将函数调用包装在箭头函数中,以防止出现这种情况:

element.addEventListener("mouseover", () => window.wrappedJSObject.pageFunction("foo", "bar"), false);

∗我找不到有关是否也应将此方法用于Chrome的信息。