उन लोगों के लिए जिनके काम में इंटरनेट का उपयोग करना शामिल है, ब्राउज़र एक्सटेंशन बहुत उपयोगी उपकरण हो सकते हैं। उनका उपयोग करके, आप उपयोगकर्ता को समान क्रियाओं को दोहराने से बचा सकते हैं और वर्कफ़्लो को बेहतर तरीके से व्यवस्थित कर सकते हैं। आप मौजूदा एक्सटेंशन से टूलबॉक्स लिख सकते हैं, लेकिन यह पर्याप्त नहीं है।
जो कोई वेब विकास जानता है, उसके लिए एक नया ब्राउज़र एक्सटेंशन बनाना आसान है। अब अधिकांश लोकप्रिय ब्राउज़र मानक विकास प्रणाली का समर्थन करते हैं, जो मुख्य रूप से जावास्क्रिप्ट, एचटीएमएल और सीएसएस, - वेबटेक्स्ट का उपयोग करता है ।
यह उस व्यक्ति के लिए मुश्किल हो सकता है जिसने कभी भी WebExtensions के आधार पर एक ब्राउज़र ऐड-ऑन नहीं बनाया है, इससे पहले यह समझने के लिए कि इसमें कौन से बुनियादी हिस्से होने चाहिए और यह क्या कर सकते हैं। इंटरनेट पर इस प्रणाली के बारे में बहुत सारी जानकारी है, लेकिन अपने लिए एक समग्र चित्र बनाने के लिए, आपको बहुत समय बिताना होगा। यह आलेख आपको WebExtensions system की संरचना को जल्दी समझने और यह दिखाने में मदद करेगा कि इसके API के लिए प्रलेखन को बेहतर तरीके से कैसे नेविगेट किया जाए । फ़ायरफ़ॉक्स ब्राउज़र के लिए विस्तार यहां वर्णित है , इसलिए लेख में उपयोग की जाने वाली लगभग सभी जानकारी एमडीएन वेबसाइट से ली गई है । लेकिन यह लेख उन लोगों के लिए उपयोगी होगा जो वेबएक्स्टेंशन का समर्थन करने वाले अन्य ब्राउज़रों के लिए एक एक्सटेंशन बनाना चाहते हैं, - मुख्य रूप से Google क्रोम और क्रोमियम के लिए ।
इस अनुभाग में डेस्कटॉप बनाने के केवल विस्तार शामिल हैं । यदि आपको क्रोम या फ़ायरफ़ॉक्स मोबाइल ब्राउज़र के लिए एक एक्सटेंशन बनाने की आवश्यकता है , तो यह लेख भी कुछ उपयोगी हो सकता है, लेकिन आपको अधिकांश जानकारी स्वयं ढूंढनी होगी और उनका अध्ययन करना होगा।
परिचय
आरंभ करने के लिए आपको क्या चाहिए
और यहाँ आपको क्या चाहिए:
- फ़ायरफ़ॉक्स ब्राउज़र - सर्वश्रेष्ठ संस्करण 60 या उच्चतर। पूरे लेख में, यह माना जाता है कि इस तरह के एक ब्राउज़र का उपयोग किया जाता है, जब तक कि अन्यथा नहीं कहा जाता है। लेकिन आप इसके बजाय Google क्रोम या क्रोमियम का उपयोग कर सकते हैं ।
- HTML CSS, -.
- 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 Chrome — chrome
. , — 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, .
manifest.json MDN.
, — :
— short_name. , .
— description
. , , :
- developer. , .
,
browser_specific_settings.
- — applicationsFirefox — 48 — , 42 applications
. browser_specific_settings
, applications
, applications
. , , . , applications
MDN.
Firefox, . , , ID . ( ) , ID . ID , . , — .
IDGUID , 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
. , .
{
"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",
"homepage_url": "https://github.com/alexandersolovyov/habr_editor",
"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
background
— true
. , , JavaScript .
:

- Firefox, , ( ) , , , . . browser_action. , - — HTML, CSS JavaScript. , . —
.addListener()
- browser.browserAction.onClicked. — Toolbar Buttton MDN
- URL . — page_action. . , browser.pageAction.onClicked. — Address bar button.
- Firefox , -> . , sidebar_action. — , . , — . ( — ), . , -. Sidebars
Popups MDN
, , . — «», .
-
, -, , JavaScript CSS. , - , — , . .
- :
- content_scripts. JavaScript, CSS. , URL- . - , URL- . ( ) , , . (
permissions
).
- . : URL . , . . JavaScript, CSS, , . API browser.contentScripts. browser.contentScripts.register() URL . Promise. «» (
.then()
) browser.contentScripts.RegisteredContentScript, « ». .unregister()
. , -, . permissions - (host permissions), -, .
- . JavaScript — , . browser.tabs.executeScript(). , , (ID).
Promise
. , URL , browser.tabs.query(). Promise
, - . ID browser.tabs.executeScript()
. , , , permissions
activeTab
, , URL- (host 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() , .
.
, , , . , . - , . :
- , ,
sendMessage()
. , browser.runtime.sendMessage(), — browser.tabs.sendMessage(). -, , , — , , .
onMessage
, — browser.runtime.onMessage. . - — browser.runtime.onMessage.addListener()
. - -, .
- - ,
Promise
. Promise . , , Promise
resolve()
reject()
. , -, JSON. Error
: !
- , ,
sendMessage()
Promise
, — .then()
.catch()
. - - — .
, , — . , ( ), , «» Promise
«».
, « ». API , — , . . :
connect()
. , , browser.runtime.connect(), — browser.tabs.connect(). , . , .
connect()
browser.runtime.Port, API «» . , - port1
.
- , , browser.runtime.onConnect — , , . - —
browser.runtime.onConnect.addListener()
. , - browser.runtime.Port
— , , , . , port2
. , -.
- , .
postMessage()
( port1.postMessage()
) -.
onMessage
( — port2.onMessage
). , port2.onMessage.addListener()
. - . , port2.postMessage()
.
- , «-». , , -, , : , «status» «error» «ok».
- « »
.disconnect()
-. , , . window.onclose()
port1.disconnect()
. .
- , - .
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 — , . , , , .
:
- browser.runtime.sendNativeMessage(). (
name
) -, .
- stdin , , .
- .
- stdout.
- ! .
- , (
browser.runtime.sendNativeMessage()
), Promise
. : .then()
.catch()
. :
- , . ,
.then()
, - .
- , , , , , (
null
undefined
).
- , ,
.catch()
. Error
.
, , — . , , , , , .
. :
- browser.runtime.connectNative() — ( ).
- . . , !
browser.runtime.connectNative()
, , browser.runtime.Port — , , . port
.
port.postMessage()
.
- (stdin) .
- , — stdout.
- , . -
port.onMessage.addListener()
. - .
- :
- , . , .
- - , .
port.disconnect()
, .
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. — , .
«» , :
: