फ़ायरफ़ॉक्स ब्राउज़र एक्सटेंशन ऐप (वेबएक्सटेंशन)

उन लोगों के लिए जिनके काम में इंटरनेट का उपयोग करना शामिल है, ब्राउज़र एक्सटेंशन बहुत उपयोगी उपकरण हो सकते हैं। उनका उपयोग करके, आप उपयोगकर्ता को समान क्रियाओं को दोहराने से बचा सकते हैं और वर्कफ़्लो को बेहतर तरीके से व्यवस्थित कर सकते हैं। आप मौजूदा एक्सटेंशन से टूलबॉक्स लिख सकते हैं, लेकिन यह पर्याप्त नहीं है।


जो कोई वेब विकास जानता है, उसके लिए एक नया ब्राउज़र एक्सटेंशन बनाना आसान है। अब अधिकांश लोकप्रिय ब्राउज़र मानक विकास प्रणाली का समर्थन करते हैं, जो मुख्य रूप से जावास्क्रिप्ट, एचटीएमएल और सीएसएस, - वेबटेक्स्ट का उपयोग करता है


यह उस व्यक्ति के लिए मुश्किल हो सकता है जिसने कभी भी 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 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