Я пытаюсь написать WebExtension для Firefox. Басически, мне нужен рабочий пример, как запускать локальные программы из Firefox.Использование ctypes в фоновом режиме в Firefox WebExtension
Моя текущая реализация расширения состоят из:
- background.js
- контент-scripts.js
- manifest.json
с веб-страницы Я посылаю сообщение, которое обрабатывается по контенту-scripts.js, который перенаправляет его на background.js. Но в функции msgbox в background.js я не могу вызвать 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": "[email protected]",
"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();
}
Если я попытаюсь реализовать связь между браузером через «старые» дополнения для Firefox (а не через WebExtension), можно ли использовать там ctypes? – Denver
Да, оба XUL (устаревшие) и расширения SDK расширения дополняют ctypes. – evilpie
Спасибо, @evilpie! – Denver