Firefox附加SDK和js-ctypes

时间:2014-03-03 01:22:10

标签: firefox firefox-addon jsctypes

我正在尝试使用带有js-ctypes的Firefox附加组件SDK来访问本地DLL的方法,但它无法正常工作。

main.js代码:

var data = require("sdk/self").data;
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
  include: "mysite.com",
  contentScriptFile: data.url("myjs.js")
});

myjs.js代码只是:

Components.utils.import("resource://gre/modules/ctypes.jsm");
alert("hello world");

在Firefox的控制台上,我收到了这些消息:

The Components object is deprecated. It will soon be removed.
TypeError: Components.utils is undefined

没有发出“hello world”警告。

有什么问题?谢谢!

2 个答案:

答案 0 :(得分:4)

您不能使用内容脚本中的js-ctypes - 内容脚本没有特权。您必须通过chrome authority

在扩展程序中执行此操作
var {Cu} = require("chrome");
var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm", null);
var lib = ctypes.open(...);

答案 1 :(得分:1)

这不是一个ctypes问题。

您无法从该上下文发出警报。 alert是窗口上的一种方法。所以你可以做两件事之一:

  1. 获取最新窗口并在那里运行警报。

    Components.utils.import('resource://gre/modules/Services.jsm');
    Services.wm.getMostRecentWindow(null).alert('hello world');
    
  2. 使用提示服务:example at mdn

    Components.utils.import('resource://gre/modules/Services.jsm');
    Services.prompts.alert(null, 'Hello World TITLE', 'hello world message');
    
  3. 此外,如果您使用的是addon sdk,则无法访问Components,因此您无法执行Components.utils.import,您必须将此const {Cu} = require('chrome');放在main.js的顶部。你可以做Cu.import('blah')