【问题标题】:Services.wm is undefined (Firefox SDK Extension)Services.wm 未定义(Firefox SDK 扩展)
【发布时间】:2016-04-12 08:13:25
【问题描述】:

当我使用 Firefox Addon SDK (JPM) 和 index.js 中的以下代码时,我收到错误 TypeError: Services.wm is undefined

var self = require("sdk/self");
const { Cu } = require("chrome");
let Services = Cu.import("resource://gre/modules/Services.jsm");

require("sdk/ui/button/action").ActionButton({
  id: "list-tabs",
  label: "List Tabs",
  icon: "./icon-16.png",
  onClick: myTestFunc
});

function myTestFunc() {
  var windows = Services.wm.getEnumerator("navigator:browser");
  while (windows.hasMoreElements())
    iterateWindows(windows.getNext().QueryInterface(Components.interfaces.nsIDOMWindow));
}

任何建议都会有很大帮助,谢谢。

【问题讨论】:

    标签: javascript firefox firefox-addon mozilla


    【解决方案1】:

    Cu.import 不像你想象的那样工作。它的返回值是导入模块的全局对象。

    通常,如果指定,模块的导出符号将作为第二个对象的属性导入,如果没有指定,则导入当前全局,这将定义 Services,然后您会立即将其替换为返回值。

    只需使用Cu.import("resource://gre/modules/Services.jsm", this);(不带返回值)即可工作并从该模块导入所有导出的符号。

    使用destructuring assignment 的以下形式有效,但不鼓励使用,因为它会进入目标模块的全局并获取常量,而不是仅访问导出的符号:

    const {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
    

    正确执行此操作的 SDK 方式是

    const {Services} = require("resource://gre/modules/Services.jsm");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多