在 Firefox WebExtension 后台使用 ctypes
Using ctypes in background in Firefox WebExtension
我正在尝试为 Firefox 编写 WebExtension。基本上,我需要一个工作示例如何从 Firefox 运行 本地程序。
我当前的扩展实现包括:
- background.js
- 内容-scripts.js
- manifest.json
我正在从网页发送一条由 content-scripts.js 处理并转发给 background.js 的消息。但是在 background.js 的 msgbox 函数中我无法调用 ctypes。它给我错误:
ctypes 未定义
我尝试以不同的方式加载 ctypes 但它不起作用:
Components.utils.import("resource://gre/modules/ctypes.jsm")
要么
var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm"
我做错了什么?
这是我的扩展程序的源代码。
manifest.josn:
{
"description": "Test web-extension.",
"manifest_version": 2,
"name": "Example",
"version": "1.0",
"homepage_url": "http://example.org",
"icons": {
"48": "icons/example-48.png"
},
"content_scripts": [
{
"matches": ["*://web.localhost.com/*"],
"js": ["content-scripts.js"]
}
],
"background": {
"scripts": ["background.js"]
},
"applications": {
"gecko": {
"id": "example@mozilla.org",
"strict_min_version": "45.0"
}
},
"permissions": []
}
background.js:
chrome.runtime.onMessage.addListener(msgbox());
function msgbox() {
var lib = ctypes.open("C:\WINDOWS\system32\user32.dll");
/* Declare the signature of the function we are going to call */
var msgBox = lib.declare("MessageBoxW",
ctypes.winapi_abi,
ctypes.int32_t,
ctypes.int32_t,
ctypes.jschar.ptr,
ctypes.jschar.ptr,
ctypes.int32_t);
var MB_OK = 0;
var ret = msgBox(0, "Hello world", "title", MB_OK);
lib.close();
}
您只能在 WebExtension 中使用 WebExtension APIs(在 MDN 上)。 Cu.import
尤其是 ctypes 不是 WebExtension API 的一部分,因此不能使用。如果您想与 OS 级功能进行交互,您可能需要等待 chrome.runtime.connectNative
。
我正在尝试为 Firefox 编写 WebExtension。基本上,我需要一个工作示例如何从 Firefox 运行 本地程序。
我当前的扩展实现包括:
- background.js
- 内容-scripts.js
- manifest.json
我正在从网页发送一条由 content-scripts.js 处理并转发给 background.js 的消息。但是在 background.js 的 msgbox 函数中我无法调用 ctypes。它给我错误:
ctypes 未定义
我尝试以不同的方式加载 ctypes 但它不起作用:
Components.utils.import("resource://gre/modules/ctypes.jsm")
要么
var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm"
我做错了什么?
这是我的扩展程序的源代码。
manifest.josn:
{
"description": "Test web-extension.",
"manifest_version": 2,
"name": "Example",
"version": "1.0",
"homepage_url": "http://example.org",
"icons": {
"48": "icons/example-48.png"
},
"content_scripts": [
{
"matches": ["*://web.localhost.com/*"],
"js": ["content-scripts.js"]
}
],
"background": {
"scripts": ["background.js"]
},
"applications": {
"gecko": {
"id": "example@mozilla.org",
"strict_min_version": "45.0"
}
},
"permissions": []
}
background.js:
chrome.runtime.onMessage.addListener(msgbox());
function msgbox() {
var lib = ctypes.open("C:\WINDOWS\system32\user32.dll");
/* Declare the signature of the function we are going to call */
var msgBox = lib.declare("MessageBoxW",
ctypes.winapi_abi,
ctypes.int32_t,
ctypes.int32_t,
ctypes.jschar.ptr,
ctypes.jschar.ptr,
ctypes.int32_t);
var MB_OK = 0;
var ret = msgBox(0, "Hello world", "title", MB_OK);
lib.close();
}
您只能在 WebExtension 中使用 WebExtension APIs(在 MDN 上)。 Cu.import
尤其是 ctypes 不是 WebExtension API 的一部分,因此不能使用。如果您想与 OS 级功能进行交互,您可能需要等待 chrome.runtime.connectNative
。