通过插件脚本调用网页的Javascript函数

时间:2014-06-23 18:32:17

标签: javascript firefox-addon firefox-addon-sdk

我正在使用新的AddOn SDK学习firefox插件开发。我正在创建一个简单的实用程序插件,用于自动隐藏SPOJ问题页面上的评论 现在,为了隐藏评论部分,问题页面上有一个选项,它调用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调用WebPage的javascript函数?

2 个答案:

答案 0 :(得分:1)

您最后的通用问题has been asked several times,但我认为在这种情况下,这是一个更简单的解决方案。

如果用{/ p>替换simulateClick会怎样?

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

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

答案 1 :(得分:1)

由于简单的非导航点击对您有用,HTMLElement.click()就足够了:

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

General reference about interacting with page scripts