Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

呼叫网页';通过加载项脚本调用Javascript函数

呼叫网页';通过加载项脚本调用Javascript函数,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我正在学习使用新的插件SDK开发firefox插件。我正在创建一个简单的实用程序插件,用于自动隐藏问题页面上的注释。 现在,为了隐藏注释部分,问题页面上有一个选项,它调用javascript函数来隐藏注释。目前,我通过模拟点击此选项临时实现了该功能,但它使用了不推荐的unsafewindow 这里是main.js var tabs = require("sdk/tabs"); var data = require("sdk/self").data; var pageMod = require("

我正在学习使用新的插件SDK开发firefox插件。我正在创建一个简单的实用程序插件,用于自动隐藏问题页面上的注释。
现在,为了隐藏注释部分,问题页面上有一个选项,它调用javascript函数来隐藏注释。目前,我通过模拟点击此选项临时实现了该功能,但它使用了不推荐的unsafewindow

这里是main.js

var tabs = require("sdk/tabs");
var data = require("sdk/self").data;
var pageMod = require("sdk/page-mod");

tabs.on('ready', function(tab) {
    var worker = tab.attach({
            contentScriptFile : data.url("autoHide.js")
    });

    worker.port.emit('hideComments', tabs.activeTab.url);
});  
autoHide.js

self.port.on('hideComments', function(url) {
    var elem = document.getElementById('comments_sh');
    //toggleComments();
    elem = elem.parentNode;
    simulateClick(elem);

});

function simulateClick(a) {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, unsafeWindow,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
  a.dispatchEvent(evt);      
}
我要调用的函数是
toggleComments()


所以我的问题是如何通过Addon Script或ContentScript调用网页的javascript函数???

最后是您的一般问题,但我认为在这种情况下有一个更简单的解决方案

如果将
simulateClick
替换为

function simulateClick(a) {
  a.dispatchEvent(new CustomEvent('click'));      
}
?


如果这不起作用,那么您必须编辑页面的js代码,添加一个自定义事件监听器,该监听器将运行与单击时运行的功能相同的功能,然后从加载项的内容脚本中调度该自定义事件,如我链接到的第一个问题的答案中所述。

因为简单的非导航单击将适用于您,应足够:

self.port.on('hideComments', function(url) {
    var elem = document.getElementById('comments_sh');
    elem.parentNode.click();
});

.

您可以在页面中插入一个脚本来添加事件监听器OK,这很有效。然而,我更感兴趣的是知道如何通过插件脚本与页面脚本和元素进行通信。任何参考资料或资源都会很有帮助。添加了一个链接:@willma因为这个问题出现了不止一次,我现在创建了一个wiki答案: