FireFox Addon:如何覆盖原生js函数

时间:2014-07-20 12:57:02

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

我正在尝试使用pageMod在页面加载上运行脚本: 但我看不出它的影响

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

pageMod.PageMod({
  include: "*",
   contentScriptWhen: "start",
  allow:true,
   attachTo: ["existing", "top"],
  contentScriptFile: [data.url("jquery-2.1.1.min.js"),
                     data.url("somejs.js")],


})

在我的somejs.js文件中,我有覆盖表单提交功能:

document.forms['frmMain'].submit=function submit(){alert("Submitting")... 
...do some stuff  

};

在我的网页上有一个提交表单的按钮:

    frmMain.method="post"
    frmMain.action = "someurl";
    frmMain.submit();   

但是当我点击按钮时,它不会调用我在上面定义的覆盖方法。 当我使用firebug控制台覆盖该功能时它的工作原理! 那么firebug做什么来运行命令,以便我可以在我的插件代码中做同样的事情。

1 个答案:

答案 0 :(得分:3)

Interacting with page scripts

  1. 需要使用unsafeWindow,以便更改反映在内容脚本和
  2. 需要从内容脚本中正确导出一个函数,以便从页面脚本中调用。
  3. 以下适用于我:

    function submit() {
      console.log("Submitting");
      alert("Submitting");
    };
    unsafeWindow.document.forms['frmMain'].submit =
      exportFunction(submit, unsafeWindow);
    
相关问题