在 Firefox WebExtension 后台使用 ctypes

Using ctypes in background in Firefox WebExtension

我正在尝试为 Firefox 编写 WebExtension。基本上,我需要一个工作示例如何从 Firefox 运行 本地程序。

我当前的扩展实现包括:

我正在从网页发送一条由 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