Firefox用のWebExtensionを作成しようとしています。基本的に、Firefoxからローカルプログラムを実行する方法の実例が必要です。延長のFirefox WebExtensionのバックグラウンドでのctypesの使用
私の現在の実装では、で構成されています:Webページから
- 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": "[email protected]",
"strict_min_version": "45.0"
}
},
"permissions": []
}
background.js:あなただけのWebExtensionに(MDN上)WebExtension APIを使用することができます
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経由ではありません)を使用してブラウザOS通信を実装しようとすると、そこにctypesを使用できますか? – Denver
はい、XUL(レガシー)とアドオンSDKの拡張機能はどちらもctypeをサポートしています。 – evilpie
ありがとう、@evilpie! – Denver