{"id":8369,"date":"2018-01-26T09:32:03","date_gmt":"2018-01-26T17:32:03","guid":{"rendered":"http:\/\/blog.mozilla.org\/addons\/?p=8369"},"modified":"2019-11-18T05:47:34","modified_gmt":"2019-11-18T13:47:34","slug":"extensions-firefox-59","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/","title":{"rendered":"Extensions in Firefox 59"},"content":{"rendered":"<p><a href=\"https:\/\/www.mozilla.org\/firefox\/new\/\">Firefox Quantum<\/a> continues to make <a href=\"https:\/\/arstechnica.com\/gadgets\/2018\/01\/firefoxs-continued-quantum-transformation-more-multithreading-tracking-protection\/\">news<\/a> as Mozilla incorporates even more <a href=\"https:\/\/hacks.mozilla.org\/2018\/01\/making-webassembly-even-faster-firefoxs-new-streaming-and-tiering-compiler\/\">innovative technology<\/a> into the platform. The development team behind the WebExtensions architecture is no exception, landing a slew of new API and improvements that can now be found in Firefox 59 (just released to <a href=\"https:\/\/www.mozilla.org\/firefox\/channel\/desktop\/\">the Beta channel<\/a>).<\/p>\n<p>As always, documentation for the API discussed here can be found on <a href=\"https:\/\/developer.mozilla.org\/en-US\/Add-ons\/WebExtensions\">MDN Web Docs<\/a> (some of the features below are just hitting the main branch as of this post, so if you don\u2019t find the documentation on MDN, check back in a few days).<\/p>\n<h2><a id=\"experimental-tab-hiding\"><\/a>Experimental Tab Hiding<\/h2>\n<p>Tab hiding is back! Since the deprecation of the legacy extension architecture, one of the most requested features has been the ability to hide tabs with the WebExtensions API. It was a key element of some very popular legacy add-ons that provided the ability to manage tab groups. Firefox 59 brings this capability back in an initial, experimental form.<\/p>\n<p>The API is very straightforward:<\/p>\n<ul>\n<li>Include the \u201ctabHide\u201d permission in your manifest file.<\/li>\n<li>Use tabs.hide() with the tab ID (or list of tab IDs) to hide tabs.<\/li>\n<li>Use tabs.show() with the tab ID (or list of tab IDs) to show hidden tabs.<\/li>\n<li>Examine the tabs.Tab.hidden field to determine if a tab is currently hidden.<\/li>\n<\/ul>\n<p>Note that the visible state of a tab is completely independent from its discarded state. While it may make sense to keep certain tabs active and loaded in memory while hidden, we encourage you to use tabs.discard() in combination with tabs.hide() to help manage memory and resource usage.<\/p>\n<p>There are certain restrictions when hiding tabs:<\/p>\n<ul>\n<li>Tabs that are pinned cannot be hidden<\/li>\n<li>Tabs that are sharing their screen, microphone or camera cannot be hidden<\/li>\n<li>The current active tab cannot be hidden<\/li>\n<li>Tabs that are in the process of being closed cannot be hidden<\/li>\n<\/ul>\n<p>The reintroduction of hidden tabs to Firefox does not come without some concern. A primary motivation for moving to the WebExtensions framework is to offer users a safer extension ecosystem that can be trusted to protect their security and privacy. Obviously, tab hiding opens the door for malicious extensions to hide tabs, doing things in the background without a user\u2019s knowledge.<\/p>\n<p>To make sure we get things right, tab hiding is disabled by default. To enable the API, you must manually go to the about:config page and set extensions.webextensions.tabhide.enabled to true. This restriction will remain in place until:<\/p>\n<ul>\n<li>Additional user interface features are added to Firefox that allow users to see all of their hidden tabs and\/or show those tabs independent of any extension. This user interface work is currently active and on-going.<\/li>\n<li>Developers (internal and external) have had some time to try the API and understand its strengths and weaknesses. In particular, we want some time to gather input on the potential for abuse.<\/li>\n<\/ul>\n<p>To be clear, this API is currently <b>experimental<\/b>. It could change, or even go away entirely if we can\u2019t provide it in a secure manner. \u00a0Nevertheless, Firefox has a long, proud history of customization and the team is committed to upholding that tradition with tab hiding. So please give the API a try and see what you think. With your help, we will work to make tab hiding as fully functional as possible while still maintaining the security of the WebExtensions architecture.<\/p>\n<p>Want to jump right in a see what it\u2019s like? Give the <a href=\"https:\/\/addons.mozilla.org\/en-US\/firefox\/addon\/tab-hider\/\">Tab Hider<\/a> extension a try.<\/p>\n<h2>Additional Tab Features<\/h2>\n<p>While tab hiding is the big feature to land in Firefox 59, it isn\u2019t the only thing related to tabs.<\/p>\n<ul>\n<li>The new browserSettings.openBookmarksInNewTabs() API was added for controlling the options to <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1420974\">open bookmarks in new tabs<\/a>.<\/li>\n<li>The new browserSettings.openSearchResultsInNewTabs() API was added so extensions can <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1420969\">open search results in new tabs<\/a>.<\/li>\n<li>Added <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1427463\">tabs.captureTab()<\/a>. This is very similar to <a href=\"https:\/\/developer.mozilla.org\/en-US\/Add-ons\/WebExtensions\/API\/tabs\/captureVisibleTab\">tabs.captureVisibleTab()<\/a>, but allows you to capture any tab (specified by ID) instead of just the active tab.<\/li>\n<li>Calling <a href=\"https:\/\/developer.mozilla.org\/en-US\/Add-ons\/WebExtensions\/API\/tabs\/create\">tabs.create()<\/a> without a windowId will now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1415913\">target only non-popup windows<\/a>.<\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/Add-ons\/WebExtensions\/API\/tabs\/query\">Tabs.query()<\/a> now does <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1334782\">pattern matching on the title<\/a>.<\/li>\n<\/ul>\n<h2>Even More Theme API<\/h2>\n<p>Continuing the \u201ctheme\u201d of previous releases, Firefox 59 includes a number of additions to the Theme API that allow you to customize even more of the browser\u2019s appearance, including:<\/p>\n<ul>\n<li>Set the <a href=\"https:\/\/developer.mozilla.org\/en-US\/Add-ons\/WebExtensions\/manifest.json\/theme#colors\">border color of the URL bar and search bar<\/a> via the \u201ctoolbar_field_border\u201d property.<\/li>\n<li>A slight change in \u201c<a href=\"https:\/\/developer.mozilla.org\/en-US\/Add-ons\/WebExtensions\/manifest.json\/theme#colors\">tab_text\u201d and the addition of \u201cbackground_tab_text<\/a>\u201d to better control tab colors.<\/li>\n<li>Specify the color for a theme property as either a <a href=\"https:\/\/developer.mozilla.org\/Add-ons\/WebExtensions\/manifest.json\/theme#colors\">Chrome color array or in standard CSS format<\/a>.<\/li>\n<\/ul>\n<h2>Improvements to the webRequest API<\/h2>\n<p>The webRequest API now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1377689\">merges multiple headers with the same name<\/a> rather than using only the last one. In addition, <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1149250\">a couple<\/a> <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1418275\">of mechanisms<\/a> were added to the webRequest API to allow for requests to be upgraded from HTTP to HTTPS.<\/p>\n<p>Finally, to make debugging a lot easier, exceptions raised from a webRequest blocking listener now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1428094\">report the original error message and filename<\/a>. Below is an example:<\/p>\n<div id=\"attachment_8371\" style=\"width: 821px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-8371\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-8371\" src=\"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-BEFORE.png\" alt=\"Before Firefox 59\" width=\"811\" height=\"67\" srcset=\"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-BEFORE.png 811w, https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-BEFORE-252x21.png 252w, https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-BEFORE-768x63.png 768w, https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-BEFORE-600x50.png 600w\" sizes=\"(max-width: 811px) 100vw, 811px\" \/><p id=\"caption-attachment-8371\" class=\"wp-caption-text\">Before Firefox 59<\/p><\/div>\n<div id=\"attachment_8372\" style=\"width: 827px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-8372\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-8372\" src=\"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-AFTER.png\" alt=\"Starting With Firefox 59\" width=\"817\" height=\"62\" srcset=\"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-AFTER.png 817w, https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-AFTER-252x19.png 252w, https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-AFTER-768x58.png 768w, https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-AFTER-600x46.png 600w\" sizes=\"(max-width: 817px) 100vw, 817px\" \/><p id=\"caption-attachment-8372\" class=\"wp-caption-text\">Starting With Firefox 59<\/p><\/div>\n<h2>Register Content Scripts at Runtime<\/h2>\n<p>Another big feature landing with Firefox 59 is the ability to <a href=\"https:\/\/developer.mozilla.org\/Add-ons\/WebExtensions\/API\/contentScripts\">register content scripts<\/a> at runtime. This is an important feature for extensions that want to support user scripting.<\/p>\n<p>Using the contentScripts.register() API, extensions can dynamically associate content scripts with different URLs, lifting the previous limitation that all content scripts had to be listed statically in the manifest file.<\/p>\n<h2>Support for Decentralization Protocols<\/h2>\n<p>Mozilla has always been a <a href=\"https:\/\/www.mozilla.org\/en-US\/internet-health\/decentralization\/\">proponent of decentralization<\/a>, recognizing that it is a key ingredient of a healthy Internet. Starting with Firefox 59, several protocols that support decentralized architectures are approved for use by extensions. \u00a0The newly approved protocols are:<\/p>\n<ul>\n<li><a href=\"https:\/\/datproject.org\/\">Dat Project<\/a> (dat:\/\/)<\/li>\n<li><a href=\"https:\/\/ipfs.io\/\">IPFS<\/a> (dweb:\/\/ \u00a0ipfs:\/\/ \u00a0ipns:\/\/)<\/li>\n<li><a href=\"https:\/\/www.scuttlebutt.nz\/\">Secure Scuttlebutt<\/a> (ssb:\/\/)<\/li>\n<\/ul>\n<p>Firefox itself does not implement these protocols, but having them on the approved list means the browser recognizes them as valid protocols and extensions are free to provide implementations.<\/p>\n<h2>browserAction and pageAction Improvements<\/h2>\n<p>Browser Actions and Page Actions are two of the most popular types of extensions that we see submitted to the Firefox <a href=\"https:\/\/addons.mozilla.org\/\">Add-Ons website<\/a>. \u00a0Accordingly, the team behind WebExtensions continues to expand and improve the API for those types of extensions.<\/p>\n<ul>\n<li>pageActions can now be <a href=\"https:\/\/developer.mozilla.org\/Add-ons\/WebExtensions\/manifest.json\/page_action\">shown and\/or hidden automatically<\/a> for specific pages via pattern matching using the \u201chide_matches\u201d and \u201cshow_matches\u201d manifest properties. This is a nice performance win for users.<\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/Add-ons\/WebExtensions\/API\/browserAction#Functions\">browserAction set* methods can now accept a null value<\/a> which removes the property from the browserAction.<\/li>\n<li>Invalid badge background colors are <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1427107\">now rejected<\/a> (provides more Chrome compatibility).<\/li>\n<li>An extension can now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1427431\">determine <\/a>if its browserAction is enabled or disabled (browserAction.isEnabled), a pageAction is currently shown for a tab ( pageActions.isShown), and if its sidebarAction is currently open (sidebarAction.isOpen).<\/li>\n<\/ul>\n<h2>Enhancement to Cookies<\/h2>\n<p>The ability for extensions to control cookies in the browser expanded in Firefox 59, including:<\/p>\n<ul>\n<li>The cookies API now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1381197\">supports first party isolate (FPI) mode and FPI cookies<\/a>.<\/li>\n<li>Extensions can now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1363860\">control cookie behaviour<\/a> by using a new setting in the privacy API, browser.privacy.websites.cookieConfig, which can control which types of cookies are accepted as well as the expiration date of cookies.<\/li>\n<\/ul>\n<h2>Proxy Settings<\/h2>\n<p>Extensions can now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1425535\">override the proxy settings<\/a> in the browser which has been another highly requested feature. \u00a0Using the browserSettings.proxyConfig.set() API, the following proxy settings can be controlled:<\/p>\n<ul>\n<li>proxyType: The type of proxy to use.<\/li>\n<li>http: The address of the http proxy, can include a port.<\/li>\n<li>httpProxyAll: Use the http proxy server for all protocols.<\/li>\n<li>ftp: The address of the ftp proxy, can include a port.<\/li>\n<li>ssl: The address of the ssl proxy, can include a port.<\/li>\n<li>socks: The address of the socks proxy, can include a port.<\/li>\n<li>socksVersion: The version of the socks proxy.<\/li>\n<li>passthrough: A list of hosts which should not be proxied.<\/li>\n<li>autoConfigUrl: A URL to use to configure the proxy.<\/li>\n<li>autoLogin: Do not prompt for authentication if password is saved.<\/li>\n<li>proxyDNS: Proxy DNS when using SOCKS v5.<\/li>\n<\/ul>\n<h2>User Notification of Extensions Overrides<\/h2>\n<p>As with previous releases, when functionality is provided via WebExtensions that allows extensions to control some aspect of the browser, Firefox will inform the user which extension controls that aspect and provide a way for them to regain control.<\/p>\n<p>The ability for an extension to control the browser\u2019s tracking protection setting was added back in Firefox 57 via the websites.trackingProtectionMode API. Firefox 59 now shows when an extension controls tracking protection.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-8373\" src=\"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/tracking-protection.gif\" alt=\"Tracking Protection Notification\" width=\"1261\" height=\"926\" \/><\/p>\n<p>In the above image, notice that a <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1403751\">message is now displayed<\/a> after a user disables an extension reminding them how to re-enable it, also a new feature of Firefox 59.<\/p>\n<p>One of the most popular browser defaults to override is the new tab page. Firefox already shows the user when an extension has overridden that page, but starting with Firefox 59 it also informs the user of the override on the first appearance of the new tab page itself. Plus, it is smart enough to <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1414018\">revert back to the previous new tab<\/a> if the new override is declined.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-8374\" src=\"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/restore-settings-multiple.mov.gif\" alt=\"Restore New Tab\" width=\"600\" height=\"402\" \/><\/p>\n<h2>Additional Browser Controls<\/h2>\n<p>To better support mouse gestures, browserSettings.contextMenuShowEvent() has been added in this version. <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1419426\">This new API<\/a> can be set to \u201cmouseup\u201d or \u201cmousedown\u201d by extensions to determine when context menus should be shown. Note that this is not supported on Android, and also calling it with a value of &#8220;mousedown&#8221; on Windows is a no-op.<\/p>\n<p>Also in Firefox 59, read-only browserSettings now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1408472\">return false when calling set or clear<\/a> and also report an accurate levelofControl.<\/p>\n<h2>Context Menus for Bookmarks<\/h2>\n<p>Speaking of context menus, you can now set <a href=\"https:\/\/developer.mozilla.org\/en-US\/Add-ons\/WebExtensions\/API\/menus\/ContextType#Type\">custom context menus for bookmarks<\/a>. \u00a0This will work on the bookmarks toolbar, the library menu, the bookmarks subview, and the bookmarks menu.<\/p>\n<h2>Development and Debugging<\/h2>\n<p>One of the best ways to suggest a new WebExtension API is to prototype it via an official experiment. Two major changes landed for WebExtension experiments that makes this significantly easier:<\/p>\n<ul>\n<li>Experiments can now be <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1364976\">bundled with an extension<\/a>.<\/li>\n<li>Experiments can now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1323845\">include content-side APIs<\/a>.<\/li>\n<\/ul>\n<p>Also in Firefox 59, <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1429567\">more detail has been added to sandbox names<\/a> to aid in debugging.<\/p>\n<h2>Miscellaneous Changes and Fixes<\/h2>\n<p>A number of smaller items were also landed in the new Firefox 59 Beta, including:<\/p>\n<ul>\n<li><a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1387340\">Monitors with different DPI resolutions<\/a> now work correctly.<\/li>\n<li>The use of<a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1406675\"> indexDB is no longer impacted<\/a> by the cookies setting.<\/li>\n<li>A homepage or search engine override <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1404584\">can now be undone<\/a>.<\/li>\n<li>The <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1370228\">use of ellipses<\/a> in context menus was fixed.<\/li>\n<li>Extensions no longer hang when <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1420419\">downloading blob URLs<\/a>.<\/li>\n<li>Fixed a regression with <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1416872\">browser.identity.launchWebAuthFlow<\/a>.<\/li>\n<li>Installing a theme with an <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1423626\">RGBA accent color no longer locks up<\/a> the browser.<\/li>\n<\/ul>\n<h2>More to Come<\/h2>\n<p>Firefox 59 landed a total of <a href=\"https:\/\/mzl.la\/2CJN9gE\">69 items<\/a> for WebExtensions, the most important of which are discussed above. Thank you to everyone who had a part in getting it to Beta, especially volunteer contributors <a href=\"https:\/\/mozillians.org\/u\/andregarzia\/\">Andre Garzia<\/a>, <a href=\"https:\/\/mozillians.org\/u\/ntim\/\">Tim Nguyen<\/a>, <a href=\"https:\/\/mozillians.org\/u\/Oriol\/\">Oriol Brufau<\/a>, Javier Serrano Polo, Kevin Jones, <a href=\"https:\/\/mozillians.org\/u\/tushararora\/\">Tushar Arora<\/a>, <a href=\"https:\/\/mozillians.org\/u\/freaktechnik\/\">Martin Giger<\/a>, Peter Snyder, Lukas Jung. Additional changes and improvements to the WebExtensions API are already in progress for Firefox 60, so please continue to send us your feedback. And as always, thank you for using Firefox and helping ensure that individuals have the ability to shape the Internet and their own experiences on it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Firefox Quantum continues to make news as Mozilla incorporates even more innovative technology into the platform. The development team behind the WebExtensions architecture is no exception, landing a slew of &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/\">Read more<\/a><\/p>\n","protected":false},"author":1526,"featured_media":8388,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[44,227,278886],"tags":[278873,72,304449,278875,278871],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Extensions in Firefox 59 - Mozilla Add-ons Community Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mike Conca\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/\",\"url\":\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/\",\"name\":\"Extensions in Firefox 59 - Mozilla Add-ons Community Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/puzzle-1746563_640.png\",\"datePublished\":\"2018-01-26T17:32:03+00:00\",\"dateModified\":\"2019-11-18T13:47:34+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/e06b9ebc82832ecd9f04e7dd59c65325\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#primaryimage\",\"url\":\"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/puzzle-1746563_640.png\",\"contentUrl\":\"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/puzzle-1746563_640.png\",\"width\":640,\"height\":640,\"caption\":\"Firefox Extensions\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/addons\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extensions in Firefox 59\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#website\",\"url\":\"https:\/\/blog.mozilla.org\/addons\/\",\"name\":\"Mozilla Add-ons Community Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.mozilla.org\/addons\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/e06b9ebc82832ecd9f04e7dd59c65325\",\"name\":\"Mike Conca\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/04780e375a532aeb20ec1365ce163109?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/04780e375a532aeb20ec1365ce163109?s=96&d=mm&r=g\",\"caption\":\"Mike Conca\"},\"description\":\"Mike Conca is the Group Product Manager for the Firefox Web Platform, leading the product team responsible for the core web technologies in Firefox including JavaScript, DOM Web API, WebAssembly, storage, layout, media, and graphics.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/mconca\/\",\"https:\/\/x.com\/MikeConca\"],\"url\":\"https:\/\/blog.mozilla.org\/addons\/author\/mconcamozilla-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extensions in Firefox 59 - Mozilla Add-ons Community Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/","twitter_misc":{"Written by":"Mike Conca","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/","url":"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/","name":"Extensions in Firefox 59 - Mozilla Add-ons Community Blog","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/addons\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#primaryimage"},"image":{"@id":"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/puzzle-1746563_640.png","datePublished":"2018-01-26T17:32:03+00:00","dateModified":"2019-11-18T13:47:34+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/e06b9ebc82832ecd9f04e7dd59c65325"},"breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#primaryimage","url":"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/puzzle-1746563_640.png","contentUrl":"https:\/\/blog.mozilla.org\/addons\/files\/2018\/01\/puzzle-1746563_640.png","width":640,"height":640,"caption":"Firefox Extensions"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/addons\/2018\/01\/26\/extensions-firefox-59\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/addons\/"},{"@type":"ListItem","position":2,"name":"Extensions in Firefox 59"}]},{"@type":"WebSite","@id":"https:\/\/blog.mozilla.org\/addons\/#website","url":"https:\/\/blog.mozilla.org\/addons\/","name":"Mozilla Add-ons Community Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.mozilla.org\/addons\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/e06b9ebc82832ecd9f04e7dd59c65325","name":"Mike Conca","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/04780e375a532aeb20ec1365ce163109?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/04780e375a532aeb20ec1365ce163109?s=96&d=mm&r=g","caption":"Mike Conca"},"description":"Mike Conca is the Group Product Manager for the Firefox Web Platform, leading the product team responsible for the core web technologies in Firefox including JavaScript, DOM Web API, WebAssembly, storage, layout, media, and graphics.","sameAs":["https:\/\/www.linkedin.com\/in\/mconca\/","https:\/\/x.com\/MikeConca"],"url":"https:\/\/blog.mozilla.org\/addons\/author\/mconcamozilla-com\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/posts\/8369"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/users\/1526"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/comments?post=8369"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/posts\/8369\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/media\/8388"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/media?parent=8369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/categories?post=8369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/tags?post=8369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}