【问题标题】:Using XPCOM components from Mozilla Add-on SDK使用来自 Mozilla Add-on SDK 的 XPCOM 组件
【发布时间】:2011-10-11 14:08:35
【问题描述】:

我过去曾从事过 Mozilla 附加组件开发(初级)。但是遇到XPCOM,我真的很害怕,把它留在了中间。

最近才接触到 Add-on SDK,发现它真的很酷,看到之前花了几个月的工作使用 SDK 工作不超过 2 天,真是令人着迷。现在我又被 XPCOM 模块卡住了。

现在我真的很想利用 XPCOM 的强大功能,但我至少需要一周时间才能在 SDK 环境中熟悉 XPCOM。我需要什么代码来获得我想要的功能?

  1. 对于每个用户会话,我想记录一些内容。我能够区分会话。我现在想要的是在用户机器中创建文件的代码,从插件中打开它并在上面写一些东西。

  2. 访问书签和下载并阅读它们的代码。

如果我不得不从 SDK 切换回来,那真是令人心碎的时刻。

【问题讨论】:

  • 您是如何设法让 hello world 工作的?您介意与我分享一些参考资料吗?我总是得到Cc['my contract id'] is undefined。如果您回答here,您可能会得到一些代表。

标签: firefox firefox-addon xpcom firefox-addon-sdk


【解决方案1】:

chrome package 为您提供完整的 XPCOM 访问权限。对于文件访问,最好使用FileUtils module

var {Cc, Ci, Cu} = require("chrome");
var {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm");
var file = FileUtils.getFile("ProfD", ["mylogfile.txt"]);
var stream = FileUtils.openFileOutputStream(...);
stream.write(data, data.length);
stream.close();

由于bug 683217,导入模块的语法有些不寻常。请注意,FileUtils.openFileOutputStream() 仅从 Firefox 7 开始可用,如果您想附加到文件,FileUtils.openSafeFileOutputStream() 不可用。

对于书签访问,您使用通常的code snippets,开头为:

var bmsvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"]
              .getService(Ci.nsINavBookmarksService);

【讨论】:

  • 运行您的代码时出现此异常。TypeError: FileUtils.getFile is not a function 是否需要在附加组件的目录结构中包含其他内容?我只是简单地复制粘贴了您的代码,其中 file 变量被传递给 openFileOutputStream 函数。
  • @Shatu:对不起,我的错 - 这么多关于发布代码而不测试它。 Cu.import() 不返回 FileUtils 对象,而是以 FileUtils 作为属性的对象。修复了我在答案中的代码,还有FileUtils.getFile()的参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多