Firefox浏览器扩展程序应用程序(WebExtensions)

对于工作涉及使用Internet的人们,浏览器扩展可能是非常有用的工具。使用它们,您可以避免用户重复相同的操作,从而更好地组织工作流程。您可以从现有扩展中组成工具箱,但这还不够。


对于了解网络开发的人来说,创建新的浏览器扩展程序很容易。现在,大多数最受欢迎的浏览器都支持标准开发系统,该系统主要使用JavaScript,HTML和CSS- WebExtensions


对于从未从未基于WebExtensions创建浏览器加载项的人来说,可能很难立即了解其应包含的基本部分以及其功能。在Internet上,有很多有关此系统的信息,但是要为自己创建一个整体图,您将不得不花费大量时间。本文将帮助您快速了解WebExtensions系统的结构,并展示如何更好地浏览其API的文档。此处描述了Firefox浏览器的扩展,因此本文中使用的几乎所有信息均来自MDN网站。但是对于那些想要为其他支持WebExtensions的浏览器创建扩展的人来说,这篇文章会很有用。,-主要用于Google ChromeChromium


本节介绍创建仅桌面扩展如果您需要为ChromeFirefox 移动浏览器创建扩展程序,这篇文章也可能很有用,但是您必须自己查找和研究大多数信息。



介绍


您需要开始什么


这就是您需要的:


  • Firefox浏览器-最佳版本60或更高版本。在整篇文章中,除非另有说明,否则均假定使用了这种浏览器。但是您可以改用Google ChromeChromium
  • HTMLCSS方面的知识,足以创建至少简单的网页。
  • Javascript知识您不需要精通最新的ECMA标准,但是您需要知道如何使用Promise
  • 足以阅读API文档的英语知识。(在撰写本文时)有关该主题的俄文信息很少(有时是不完整的)。但是,仍然最好尝试在MDN的“英语”页面上切换语言-也许那里已经有俄语翻译了。
  • 有时在创建扩展时,可能会很方便地使用Python语言Node.js平台的知识
  • , , - .


Firefox 60 WebExtensions — . - Firefox 52.


Google Chrome Chromium WebExtensions , . , , . API Firefox , Building a cross-browser extension. , , Firefox, Chrome.


, , API Chrome.


«», Google Chrome. -, Opera, Microsoft Edge. , Chrome. API WebExtensions Chrome, , , , Firefox.


- Opera. , , API , . , - Opera, API Opera.


Edge, API Microsoft.




, . , . , , .


— . — manifest.json. — -, . - , , , , , . — Javascript, HTML, CSS, (, ).


, :


  • . , , . , . .
  • - .
  • , , . , , .
  • , .
  • , .
  • , .
  • , , . . , -.
  • .

, — . . , , -, — .


— , .


«» , API WebExtensions. API, .


:



WebExtensions


, WebExtensions, , MDN. .


API WebExtensions:


, API WebExtensions, . Firefox browser, Google Chromechrome. , — window, — -.


, . — window. — API WebExtensions, — browser. window . , , , — , window, «window.» . API WebExtensions «browser.» . , WebExtensions MDN, , runtime.id . , —


var myAddonId = browser.runtime.id;

browser , . , API WebExtensions , .




. , . . , .


, , -. . , .



DOM . -, HTML-, , HTML-! , , — window browser.


. — -. , -. , , . , . , . , , , ( « ») — .




:


  • API WebExtensions, . MDN .
  • HTML-, CSS JavaScript, JavaScript. HTML- . , , -. : HTML- JavaScript, <script>, — <script src="my_script.js"></script>! , .
  • -, . window HTML-.
  • JavaScript -, . . , HTML, , . — .


( )


- :


  • API WebExtensions, .
  • -. HTML — -. JavaScript CSS.
  • DOM , — , API window. «» -. , , -. , - window, — .

, — -. , , , .



. , : window HTML- browser. , — , — - ( , ) . .



, , .




, : — , («Extension»), — , («Design»), — , («Native»). «Build», -. , , . , , : , «icons», «_locales» ( ). :


My_project
|--Design
|  |--concept.md
|
|--Build
|  |--my_extension-1.0.0.zip
|
|--Native
|  |--native_program.py
|  |--native_program_manifest.json
|  |--run.bat
|  |--install.sh
|  |--install.bat
|
|--Extension
   |--manifest.json
   |--background.js
   |--content.js
   |--browser_popup
   |  |--menu.html
   |  |--menu.css
   |  |--menu.js
   |
   |--icons
      |--my_extension.svg



manifest.json, . , . JSON. JavaScript, .


- . . , , , . theme.



manifest.json MDN.



, — :



short_name. , .


description



. , , :



- developer. , .


,


browser_specific_settings.


- — applications

Firefox — 48 — , 42 applications. browser_specific_settings, applications, applications. , , . , applications MDN.



Firefox, . , , ID . ( ) , ID . ID , . , — .


ID

GUID , e-mail. GUID — . _@.org. , . : , - , . ID , , . e-mail. , — my_extension, — user, , ID :


my_extension@user.habr.com
my_extension@user.github.com
my_extension@user.addons.mozilla.org


-


-, . , : ( -> -> ) , . icons.


MDN , — 48x48 , 32x32. — , Retina display Apple. , , : 32x32, 64x64, 48x48 96x96 .


PNG SVG. SVG , — . , Google Chrome SVG .



manifest.json. , .


{
  //       2
  "manifest_version": 2,

  //  
  "name": "Habr article editor",
  "short_name": "Habr Editor",

  // 
  "version": "1.0.0",

  //   
  "description": "Enhances editor of articles on habr.com site to support Markdown Extra",

  //   —   
  "author": "Aleksandr Solovyov",

  //    ,  —  
  //    GitHub
  "homepage_url": "https://github.com/alexandersolovyov/habr_editor",


  //       Firefox
  "browser_specific_settings": {
    "gecko": {
      "id": "habr_editor@alexandersolovyov.github.com",
      "strict_min_version": "52.0"
    }
  },

  // -
  "icons": {
    "32": "icons/habr_editor.svg",
    "64": "icons/habr_editor.svg",
    "48": "icons/habr_editor.svg",
    "96": "icons/habr_editor.svg"
  },

  ...
}

, , , , - . .



API


, API WebExtensions. , «» API, - .


permissions . , , , , , . , , « », .


, . , , . , , . optional_permissions. , , , permissions. API.


permissions, optional_permissions. API . API, . , , permissions, optional_permissions. : — , ! API, , API WebExtensions. API , — , API, , .


-


- . , (host permissions) (activeTab). , .


activeTab . , -. , , URL, . , <all_urls> tabs, , .


host permissions . URL -, URL . , AJAX — , , HTTP- cookie. <all_urls> host permissions. , .



(options page)


, — . , -> ( ), . , ( , ) , . , , , . — - .


, -: HTML, CSS JavaScript.


HTML- options_ui. , . , , "open_in_tab": true options_ui.


, , , . — .


Options page.


storage API.


«»

, . Firefox ( 68) , , . . - - . Firefox.





. , — , .


JavaScript, HTML- ( CSS!). background . , , DOM . HTML .


HTML-

HTML , . HTML- — , .


API WebExtensions — browser.runtime.getBackgroundPage(). , DOM JavaScript. , -, : , - , . -, — , HTML-.


WebExtensions HTML- . , HTML , DOM ( StackOverflow). HTML- , , , HTML.


, user_scripts , Firefox 68. JavaScript .



: , . WebExtensions . — , . persistent backgroundtrue. , , JavaScript .




:


浏览器窗口,带有指向控件的指针
  1. Firefox, , ( ) , , , . . browser_action. , - — HTML, CSS JavaScript. , . — .addListener() - browser.browserAction.onClicked. — Toolbar Buttton MDN
  2. URL . — page_action. . , browser.pageAction.onClicked. — Address bar button.
  3. Firefox , -> . , sidebar_action. — , . , — . ( — ), . , -. Sidebars

Popups MDN


, , . — «», .



-


, -, , JavaScript CSS. , - , — , . .


- :



-, ,

HTML-, — browser.windows.create(). , (permissions) — , .



, . , , : , HTML- , . API: content_scripts , run_at, JavaScript, , — runAt .


, , , «» ( , ).


CSS , - <link>. JavaScript :


, «» DOM , window, :


  • JavaScript, «» -.
  • , , «» .
  • , «» -, , DOM. , , -, «» , .

MDN.


, - CSS JavaScript. , , - HTML. , — , StackOverflow.




, - . commands -.


. — , . — , . . — browser.commands.onCommand.addListener().




- , . context_menus. , — .


Firefox API browser.menus. - — browser.contextMenus. Firefox, , . .


, browser.menus.create(). ( ). , , , — , — .


, . , browser.menus.onClicked. , , , : , HTML-, .


DOM -, , JavaScript — browser.tabs.executeScript(). : , HTML-, . browser.menus.getTargetElement().




API


API WebExtensions. browser.runtime . API . — browser.tabs. . API .


API WebExtensions , :


  • API browser.runtime.
  • API browser.tabs.
  • , - ( ), .


JavaScript, , , JSON . . JSON. , , , undefined, Symbol . , DOM . , , JSON JSON.stringify() , .


.



, , , . , . - , . :


  1. , , sendMessage(). , browser.runtime.sendMessage(), — browser.tabs.sendMessage(). -, , , — , , .
  2. onMessage, — browser.runtime.onMessage. . - — browser.runtime.onMessage.addListener(). - -, .
  3. - , Promise. Promise . , , Promise resolve() reject(). , -, JSON. Error: !
  4. , , sendMessage() Promise, — .then() .catch(). - - — .

, , — . , ( ), , «» Promise «».



, « ». API , — , . . :


  1. connect(). , , browser.runtime.connect(), browser.tabs.connect(). , . , .
  2. connect() browser.runtime.Port, API «» . , - port1.
  3. , , browser.runtime.onConnect — , , . - — browser.runtime.onConnect.addListener(). , - browser.runtime.Port — , , , . , port2. , -.
  4. , . postMessage() ( port1.postMessage()) -.
  5. onMessage ( — port2.onMessage). , port2.onMessage.addListener(). - . , port2.postMessage().
  6. , «-». , , -, , : , «status» «error» «ok».
  7. « » .disconnect() -. , , . window.onclose() port1.disconnect(). .
  8. , - . port2.onDisconnect.addListener(). - - . - .disconnect() , .error window.Error. , . error Firefox, , browser.runtime.lastError.




, API WebExtensions , , ( «» «native»), , . .


, API . — , (, Python, Node.js Java), . — . , . .


Python Node.js, . , , . . , -, , .


Native messaging. , — .



, , , . , , , - , - ( ). , «», . , -. , , Native Manifests.



API WebExtensions . , . .



.



, , JavaScript, JSON. UTF-8. (), 4 . — . ( stdin). (stdout) JSON , . JavaScript, .



, , . , , , JSON — , . , , , .



:


  1. browser.runtime.sendNativeMessage(). ( name ) -, .
  2. stdin , , .
  3. .
  4. stdout.
  5. ! .
  6. , (browser.runtime.sendNativeMessage()), Promise. : .then() .catch(). :
    • , . , .then(), - .
    • , , , , , (null undefined).
    • , , .catch(). Error .


, , — . , , , , , .



. :


  1. browser.runtime.connectNative() — ( ).
  2. . . , !
  3. browser.runtime.connectNative(), , browser.runtime.Port — , , . port.
  4. port.postMessage() .
  5. (stdin) .
  6. , — stdout.
  7. , . - port.onMessage.addListener(). - .
  8. :
    • , . , .
    • - , .
    • port.disconnect(), .

  9. port.onDisconnect. -. , .error, . , Chromium, - — Firefox. browser.runtime.lastError.

, , .




API WebExtensions . :




web-ext


WebExtensions MDN web-ext. , Node.js, , , , Mozilla. , , , , «» . «» Firefox , , , .


web-ext Extension Workshop. , , «».



, , , :


  • about:debugging Enter . Firefox.
  • .
  • - , .

. about:debugging . «» .



, :


  • about:debugging , .
  • , , .
  • , .
  • , , F12.

. , — , . , . , -. , , -, .



Firefox web-ext, , , , , ZIP. , : , GIT, NPM , , , Managed Storage PKCS#11.


Firefox . Extension Workshop.



, , , . , API WebExtensions. — , .



«» , :



:






All Articles