2016-04-22 2 views
1

Я пытаюсь написать 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(); 
    } 

ответ

2

Вы можете использовать только WebExtension API-интерфейсы (на MDN) в вашем WebExtension. Cu.import и особенно ctypes не являются частью API WebExtension и поэтому не могут использоваться. Вам, вероятно, придется ждать chrome.runtime.connectNative, если вы хотите взаимодействовать с функциями уровня ОС.

+1

Если я попытаюсь реализовать связь между браузером через «старые» дополнения для Firefox (а не через WebExtension), можно ли использовать там ctypes? – Denver

+0

Да, оба XUL (устаревшие) и расширения SDK расширения дополняют ctypes. – evilpie

+2

Спасибо, @evilpie! – Denver

Смежные вопросы