Services.wm 是未定义的(Firefox SDK Extension)
Services.wm is undefined (Firefox SDK Extension)
当我使用Firefox插件SDK(JPM(时,我收到错误TypeError: Services.wm is undefined
,并在index.js
中使用以下代码:
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));
}
任何建议都会有很大帮助,谢谢。
Cu.import 并不像你想象的那样工作。它的返回值是导入模块的全局对象。
通常,模块的导出符号将作为第二个对象的属性(如果指定(导入,如果未指定,则导入到当前全局对象中,这将定义Services
,然后立即将其替换为返回值。
只需使用 Cu.import("resource://gre/modules/Services.jsm", this);
,没有其返回值,即可从该模块导入所有导出的符号。
以下使用解构赋值的形式有效,但不鼓励这样做,因为它会进入目标模块的全局并获取常量,而不是仅访问导出的符号:
const {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
正确执行此操作的 SDK 方法是
const {Services} = require("resource://gre/modules/Services.jsm");
相关文章:
- Firefox-SDK contentScript returns null
- Firefox SDK页面模块不工作
- Services.wm 是未定义的(Firefox SDK Extension)
- 使用JQuery可拖动UI的Firefox SDK
- 如何在firefox-sdk中设置请求超时设置
- 如何使用Firefox SDK(用于插件)检测双击选择的文本
- Firefox SDK:包括jquery.flot在内的问题,错误显示维度高度为空
- FireFox SDK 插件 - 禁用/卸载时的“分离内容脚本”
- 使用 Mozilla Firefox sdk 时,如何在 worker 脚本中访问 request
- Firefox SDK 多次执行请求
- 使用Firefox SDK API获取当前环境的文件路径分隔符
- Firefox SDK页面mod任意停止工作
- 每个选项卡的Firefox SDK不同面板
- 如何防止Firefox SDK内容脚本多次加载
- firefox-sdk:重新定义内容脚本函数
- 使用angularJs路由的firefox sdk插件
- 防止卸载Firefox sdk插件
- 使Firefox SDK面板适合各种外观
- Firefox SDK: ActionButton不工作-表现得像我没有点击它-什么都没有
- 如何解决Firefox SDK的错误,其中卸载从来没有被调用作为一个原因