【问题标题】:FireFox Addon: How to override native js functionFireFox 插件:如何覆盖原生 js 功能
【发布时间】:2014-07-20 12:57:02
【问题描述】:

我正在尝试使用 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 做了什么来运行命令,这样我就可以在我的插件代码中做同样的事情来实现同样的事情。

【问题讨论】:

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


    【解决方案1】:

    每个Interacting with page scripts 你会

    1. 需要使用 unsafeWindow 以便更改反映在内容脚本中并
    2. 需要从内容脚本中正确导出一个函数,以便可以从页面脚本中调用。

    以下对我有用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 2015-12-27
      • 1970-01-01
      • 2015-01-06
      • 2014-05-09
      • 2016-01-13
      相关资源
      最近更新 更多