A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 31KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang=fr>
  4. <!-- Has to be within the first 1024 bytes, hence before the <title>
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset=utf-8>
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name=viewport content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>Extensions in Firefox 59 (archive) — David Larlet</title>
  13. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  14. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons/apple-touch-icon.png">
  15. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons/favicon-32x32.png">
  16. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons/favicon-16x16.png">
  17. <link rel="manifest" href="/manifest.json">
  18. <link rel="mask-icon" href="/static/david/icons/safari-pinned-tab.svg" color="#5bbad5">
  19. <link rel="shortcut icon" href="/static/david/icons/favicon.ico">
  20. <meta name="apple-mobile-web-app-title" content="David Larlet">
  21. <meta name="application-name" content="David Larlet">
  22. <meta name="msapplication-TileColor" content="#da532c">
  23. <meta name="msapplication-config" content="/static/david/icons/browserconfig.xml">
  24. <meta name="theme-color" content="#f0f0ea">
  25. <!-- That good ol' feed, subscribe :p. -->
  26. <link rel=alternate type="application/atom+xml" title=Feed href="/david/log/">
  27. <meta name="robots" content="noindex, nofollow">
  28. <meta content="origin-when-cross-origin" name="referrer">
  29. <!-- Canonical URL for SEO purposes -->
  30. <link rel="canonical" href="https://blog.mozilla.org/addons/2018/01/26/extensions-firefox-59/">
  31. <style>
  32. /* http://meyerweb.com/eric/tools/css/reset/ */
  33. html, body, div, span,
  34. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  35. a, abbr, address, big, cite, code,
  36. del, dfn, em, img, ins,
  37. small, strike, strong, tt, var,
  38. dl, dt, dd, ol, ul, li,
  39. fieldset, form, label, legend,
  40. table, caption, tbody, tfoot, thead, tr, th, td,
  41. article, aside, canvas, details, embed,
  42. figure, figcaption, footer, header, hgroup,
  43. menu, nav, output, ruby, section, summary,
  44. time, mark, audio, video {
  45. margin: 0;
  46. padding: 0;
  47. border: 0;
  48. font-size: 100%;
  49. font: inherit;
  50. vertical-align: baseline;
  51. }
  52. /* HTML5 display-role reset for older browsers */
  53. article, aside, details, figcaption, figure,
  54. footer, header, hgroup, menu, nav, section { display: block; }
  55. body { line-height: 1; }
  56. blockquote, q { quotes: none; }
  57. blockquote:before, blockquote:after,
  58. q:before, q:after {
  59. content: '';
  60. content: none;
  61. }
  62. table {
  63. border-collapse: collapse;
  64. border-spacing: 0;
  65. }
  66. /* http://practicaltypography.com/equity.html */
  67. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  68. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  69. @font-face {
  70. font-family: 'EquityTextB';
  71. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  72. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  73. font-weight: 300;
  74. font-style: normal;
  75. font-display: swap;
  76. }
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: italic;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  89. font-weight: 700;
  90. font-style: normal;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'ConcourseT3';
  95. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  96. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  97. font-weight: 300;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  102. body {
  103. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  104. font-family: "EquityTextB", Palatino, serif;
  105. background-color: #f0f0ea;
  106. color: #07486c;
  107. font-kerning: normal;
  108. -moz-osx-font-smoothing: grayscale;
  109. -webkit-font-smoothing: subpixel-antialiased;
  110. text-rendering: optimizeLegibility;
  111. font-variant-ligatures: common-ligatures contextual;
  112. font-feature-settings: "kern", "liga", "clig", "calt";
  113. }
  114. pre, code, kbd, samp, var, tt {
  115. font-family: 'TriplicateT4c', monospace;
  116. }
  117. em {
  118. font-style: italic;
  119. color: #323a45;
  120. }
  121. strong {
  122. font-weight: bold;
  123. color: black;
  124. }
  125. nav {
  126. background-color: #323a45;
  127. color: #f0f0ea;
  128. display: flex;
  129. justify-content: space-around;
  130. padding: 1rem .5rem;
  131. }
  132. nav:last-child {
  133. border-bottom: 1vh solid #2d7474;
  134. }
  135. nav a {
  136. color: #f0f0ea;
  137. }
  138. nav abbr {
  139. border-bottom: 1px dotted white;
  140. }
  141. h1 {
  142. border-top: 1vh solid #2d7474;
  143. border-bottom: .2vh dotted #2d7474;
  144. background-color: #e3e1e1;
  145. color: #323a45;
  146. text-align: center;
  147. padding: 5rem 0 4rem 0;
  148. width: 100%;
  149. font-family: 'ConcourseT3';
  150. display: flex;
  151. flex-direction: column;
  152. }
  153. h1.single {
  154. padding-bottom: 10rem;
  155. }
  156. h1 span {
  157. position: absolute;
  158. top: 1vh;
  159. left: 20%;
  160. line-height: 0;
  161. }
  162. h1 span a {
  163. line-height: 1.7;
  164. padding: 1rem 1.2rem .6rem 1.2rem;
  165. border-radius: 0 0 6% 6%;
  166. background: #2d7474;
  167. font-size: 1.3rem;
  168. color: white;
  169. text-decoration: none;
  170. }
  171. h2 {
  172. margin: 4rem 0 1rem;
  173. border-top: .2vh solid #2d7474;
  174. padding-top: 1vh;
  175. }
  176. h3 {
  177. text-align: center;
  178. margin: 3rem 0 .75em;
  179. }
  180. hr {
  181. height: .4rem;
  182. width: .4rem;
  183. border-radius: .4rem;
  184. background: #07486c;
  185. margin: 2.5rem auto;
  186. }
  187. time {
  188. display: bloc;
  189. margin-left: 0 !important;
  190. }
  191. ul, ol {
  192. margin: 2rem;
  193. }
  194. ul {
  195. list-style-type: square;
  196. }
  197. a {
  198. text-decoration-skip-ink: auto;
  199. text-decoration-thickness: 0.05em;
  200. text-underline-offset: 0.09em;
  201. }
  202. article {
  203. max-width: 50rem;
  204. display: flex;
  205. flex-direction: column;
  206. margin: 2rem auto;
  207. }
  208. article.single {
  209. border-top: .2vh dotted #2d7474;
  210. margin: -6rem auto 1rem auto;
  211. background: #f0f0ea;
  212. padding: 2rem;
  213. }
  214. article p:last-child {
  215. margin-bottom: 1rem;
  216. }
  217. p {
  218. padding: 0 .5rem;
  219. margin-left: 3rem;
  220. }
  221. p + p,
  222. figure + p {
  223. margin-top: 2rem;
  224. }
  225. blockquote {
  226. background-color: #e3e1e1;
  227. border-left: .5vw solid #2d7474;
  228. display: flex;
  229. flex-direction: column;
  230. align-items: center;
  231. padding: 1rem;
  232. margin: 1.5rem;
  233. }
  234. blockquote cite {
  235. font-style: italic;
  236. }
  237. blockquote p {
  238. margin-left: 0;
  239. }
  240. figure {
  241. border-top: .2vh solid #2d7474;
  242. background-color: #e3e1e1;
  243. text-align: center;
  244. padding: 1.5rem 0;
  245. margin: 1rem 0 0;
  246. font-size: 1.5rem;
  247. width: 100%;
  248. }
  249. figure img {
  250. max-width: 250px;
  251. max-height: 250px;
  252. border: .5vw solid #323a45;
  253. padding: 1px;
  254. }
  255. figcaption {
  256. padding: 1rem;
  257. line-height: 1.4;
  258. }
  259. aside {
  260. display: flex;
  261. flex-direction: column;
  262. background-color: #e3e1e1;
  263. padding: 1rem 0;
  264. border-bottom: .2vh solid #07486c;
  265. }
  266. aside p {
  267. max-width: 50rem;
  268. margin: 0 auto;
  269. }
  270. /* https://fvsch.com/code/css-locks/ */
  271. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  272. font-size: 1rem;
  273. line-height: calc( 1.5em + 0.2 * 1rem );
  274. }
  275. h1 {
  276. font-size: 1.9rem;
  277. line-height: calc( 1.2em + 0.2 * 1rem );
  278. }
  279. h2 {
  280. font-size: 1.6rem;
  281. line-height: calc( 1.3em + 0.2 * 1rem );
  282. }
  283. h3 {
  284. font-size: 1.35rem;
  285. line-height: calc( 1.4em + 0.2 * 1rem );
  286. }
  287. @media (min-width: 20em) {
  288. /* The (100vw - 20rem) / (50 - 20) part
  289. resolves to 0-1rem, depending on the
  290. viewport width (between 20em and 50em). */
  291. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  292. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  293. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  294. margin-left: 0;
  295. }
  296. h1 {
  297. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  298. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  299. }
  300. h2 {
  301. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  302. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  303. }
  304. h3 {
  305. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  306. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  307. }
  308. }
  309. @media (min-width: 50em) {
  310. /* The right part of the addition *must* be a
  311. rem value. In this example we *could* change
  312. the whole declaration to font-size:2.5rem,
  313. but if our baseline value was not expressed
  314. in rem we would have to use calc. */
  315. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  316. font-size: calc( 1rem + .6 * 1rem );
  317. line-height: 1.5em;
  318. }
  319. p, li, pre, details {
  320. margin-left: 3rem;
  321. }
  322. h1 {
  323. font-size: calc( 1.9rem + 1.5 * 1rem );
  324. line-height: 1.2em;
  325. }
  326. h2 {
  327. font-size: calc( 1.5rem + 1.5 * 1rem );
  328. line-height: 1.3em;
  329. }
  330. h3 {
  331. font-size: calc( 1.35rem + 1.5 * 1rem );
  332. line-height: 1.4em;
  333. }
  334. figure img {
  335. max-width: 500px;
  336. max-height: 500px;
  337. }
  338. }
  339. figure.unsquared {
  340. margin-bottom: 1.5rem;
  341. }
  342. figure.unsquared img {
  343. height: inherit;
  344. }
  345. @media print {
  346. body { font-size: 100%; }
  347. a:after { content: " (" attr(href) ")"; }
  348. a, a:link, a:visited, a:after {
  349. text-decoration: underline;
  350. text-shadow: none !important;
  351. background-image: none !important;
  352. background: white;
  353. color: black;
  354. }
  355. abbr[title] { border-bottom: 0; }
  356. abbr[title]:after { content: " (" attr(title) ")"; }
  357. img { page-break-inside: avoid; }
  358. @page { margin: 2cm .5cm; }
  359. h1, h2, h3 { page-break-after: avoid; }
  360. p3 { orphans: 3; widows: 3; }
  361. img {
  362. max-width: 250px !important;
  363. max-height: 250px !important;
  364. }
  365. nav, aside { display: none; }
  366. }
  367. ul.with_columns {
  368. column-count: 1;
  369. }
  370. @media (min-width: 20em) {
  371. ul.with_columns {
  372. column-count: 2;
  373. }
  374. }
  375. @media (min-width: 50em) {
  376. ul.with_columns {
  377. column-count: 3;
  378. }
  379. }
  380. ul.with_two_columns {
  381. column-count: 1;
  382. }
  383. @media (min-width: 20em) {
  384. ul.with_two_columns {
  385. column-count: 1;
  386. }
  387. }
  388. @media (min-width: 50em) {
  389. ul.with_two_columns {
  390. column-count: 2;
  391. }
  392. }
  393. .gallery {
  394. display: flex;
  395. flex-wrap: wrap;
  396. justify-content: space-around;
  397. }
  398. .gallery figure img {
  399. margin-left: 1rem;
  400. margin-right: 1rem;
  401. }
  402. .gallery figure figcaption {
  403. font-family: 'ConcourseT3'
  404. }
  405. footer {
  406. font-family: 'ConcourseT3';
  407. display: flex;
  408. flex-direction: column;
  409. border-top: 3px solid white;
  410. padding: 4rem 0;
  411. background-color: #07486c;
  412. color: white;
  413. }
  414. footer > * {
  415. max-width: 50rem;
  416. margin: 0 auto;
  417. }
  418. footer a {
  419. color: #f1c40f;
  420. }
  421. footer .avatar {
  422. width: 200px;
  423. height: 200px;
  424. border-radius: 50%;
  425. float: left;
  426. -webkit-shape-outside: circle();
  427. shape-outside: circle();
  428. margin-right: 2rem;
  429. padding: 2px 5px 5px 2px;
  430. background: white;
  431. border-left: 1px solid #f1c40f;
  432. border-top: 1px solid #f1c40f;
  433. border-right: 5px solid #f1c40f;
  434. border-bottom: 5px solid #f1c40f;
  435. }
  436. </style>
  437. <h1>
  438. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  439. Extensions in Firefox 59 (archive)
  440. <time>Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.</time>
  441. </h1>
  442. <section>
  443. <article>
  444. <h3><a href="https://blog.mozilla.org/addons/2018/01/26/extensions-firefox-59/">Source originale du contenu</a></h3>
  445. <p><img src="https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/addons/files/2018/01/puzzle-1746563_640-160x160.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" title="" srcset="https://blog.mozilla.org/addons/files/2018/01/puzzle-1746563_640-160x160.png 160w, https://blog.mozilla.org/addons/files/2018/01/puzzle-1746563_640-252x252.png 252w, https://blog.mozilla.org/addons/files/2018/01/puzzle-1746563_640-600x600.png 600w, https://blog.mozilla.org/addons/files/2018/01/puzzle-1746563_640.png 640w" sizes="(max-width: 160px) 100vw, 160px"/> <p><a href="https://www.mozilla.org/firefox/">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></p>
  446. <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’t find the documentation on MDN, check back in a few days).</p>
  447. <h2><a id="experimental-tab-hiding"/>Experimental Tab Hiding</h2>
  448. <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>
  449. <p>The API is very straightforward:</p>
  450. <ul>
  451. <li>Include the “tabHide” permission in your manifest file.</li>
  452. <li>Use tabs.hide() with the tab ID (or list of tab IDs) to hide tabs.</li>
  453. <li>Use tabs.show() with the tab ID (or list of tab IDs) to show hidden tabs.</li>
  454. <li>Examine the tabs.Tab.hidden field to determine if a tab is currently hidden.</li>
  455. </ul>
  456. <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>
  457. <p>There are certain restrictions when hiding tabs:</p>
  458. <ul>
  459. <li>Tabs that are pinned cannot be hidden</li>
  460. <li>Tabs that are sharing their screen, microphone or camera cannot be hidden</li>
  461. <li>The current active tab cannot be hidden</li>
  462. <li>Tabs that are in the process of being closed cannot be hidden</li>
  463. </ul>
  464. <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’s knowledge.</p>
  465. <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>
  466. <ul>
  467. <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>
  468. <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>
  469. </ul>
  470. <p>To be clear, this API is currently <b>experimental</b>. It could change, or even go away entirely if we can’t provide it in a secure manner.  Nevertheless, 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>
  471. <p>Want to jump right in a see what it’s like? Give the <a href="https://addons.mozilla.org/en-US/firefox/addon/tab-hider/">Tab Hider</a> extension a try.</p>
  472. <h2>Additional Tab Features</h2>
  473. <p>While tab hiding is the big feature to land in Firefox 59, it isn’t the only thing related to tabs.</p>
  474. <h2>Even More Theme API</h2>
  475. <p>Continuing the “theme” of previous releases, Firefox 59 includes a number of additions to the Theme API that allow you to customize even more of the browser’s appearance, including:</p>
  476. <h2>Improvements to the webRequest API</h2>
  477. <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>
  478. <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>
  479. <div id="attachment_8371" class="wp-caption aligncenter"><img class="size-full wp-image-8371" src="https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/addons/files/2018/01/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-BEFORE.png" alt="Before Firefox 59" 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 class="wp-caption-text">Before Firefox 59</p></div>
  480. <div id="attachment_8372" class="wp-caption aligncenter"><img class="size-full wp-image-8372" src="https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/addons/files/2018/01/Screenshot-2018-1-24-1428094-Exception-raised-from-a-webRequest-blocking-listener-AFTER.png" alt="Starting With Firefox 59" 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 class="wp-caption-text">Starting With Firefox 59</p></div>
  481. <h2>Register Content Scripts at Runtime</h2>
  482. <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>
  483. <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>
  484. <h2>Support for Decentralization Protocols</h2>
  485. <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.  The newly approved protocols are:</p>
  486. <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>
  487. <h2>browserAction and pageAction Improvements</h2>
  488. <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>.  Accordingly, the team behind WebExtensions continues to expand and improve the API for those types of extensions.</p>
  489. <ul>
  490. <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 “hide_matches” and “show_matches” manifest properties. This is a nice performance win for users.</li>
  491. <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>
  492. <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>
  493. <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>
  494. </ul>
  495. <h2>Enhancement to Cookies</h2>
  496. <p>The ability for extensions to control cookies in the browser expanded in Firefox 59, including:</p>
  497. <h2>Proxy Settings</h2>
  498. <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.  Using the browserSettings.proxyConfig.set() API, the following proxy settings can be controlled:</p>
  499. <ul>
  500. <li>proxyType: The type of proxy to use.</li>
  501. <li>http: The address of the http proxy, can include a port.</li>
  502. <li>httpProxyAll: Use the http proxy server for all protocols.</li>
  503. <li>ftp: The address of the ftp proxy, can include a port.</li>
  504. <li>ssl: The address of the ssl proxy, can include a port.</li>
  505. <li>socks: The address of the socks proxy, can include a port.</li>
  506. <li>socksVersion: The version of the socks proxy.</li>
  507. <li>passthrough: A list of hosts which should not be proxied.</li>
  508. <li>autoConfigUrl: A URL to use to configure the proxy.</li>
  509. <li>autoLogin: Do not prompt for authentication if password is saved.</li>
  510. <li>proxyDNS: Proxy DNS when using SOCKS v5.</li>
  511. </ul>
  512. <h2>User Notification of Extensions Overrides</h2>
  513. <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>
  514. <p>The ability for an extension to control the browser’s 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>
  515. <p><img class="aligncenter size-full wp-image-8373" src="https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/addons/files/2018/01/tracking-protection.gif" alt="Tracking Protection Notification"/></p>
  516. <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>
  517. <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>
  518. <p><img class="aligncenter size-full wp-image-8374" src="https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/addons/files/2018/01/restore-settings-multiple.mov.gif" alt="Restore New Tab"/></p>
  519. <h2>Additional Browser Controls</h2>
  520. <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 “mouseup” or “mousedown” 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 “mousedown” on Windows is a no-op.</p>
  521. <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>
  522. <h2>Context Menus for Bookmarks</h2>
  523. <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>.  This will work on the bookmarks toolbar, the library menu, the bookmarks subview, and the bookmarks menu.</p>
  524. <h2>Development and Debugging</h2>
  525. <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>
  526. <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>
  527. <h2>Miscellaneous Changes and Fixes</h2>
  528. <p>A number of smaller items were also landed in the new Firefox 59 Beta, including:</p>
  529. <h2>More to Come</h2>
  530. <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>
  531. </article>
  532. </section>
  533. <nav id="jumpto">
  534. <p>
  535. <a href="/david/blog/">Accueil du blog</a> |
  536. <a href="https://blog.mozilla.org/addons/2018/01/26/extensions-firefox-59/">Source originale</a> |
  537. <a href="/david/stream/2019/">Accueil du flux</a>
  538. </p>
  539. </nav>
  540. <footer>
  541. <div>
  542. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  543. <p>
  544. Bonjour/Hi!
  545. Je suis <a href="/david/" title="Profil public">David&nbsp;Larlet</a>, je vis actuellement à Montréal et j’alimente cet espace depuis 15 ans. <br>
  546. Si tu as apprécié cette lecture, n’hésite pas à poursuivre ton exploration. Par exemple via les <a href="/david/blog/" title="Expériences bienveillantes">réflexions bimestrielles</a>, la <a href="/david/stream/2019/" title="Pensées (dés)articulées">veille hebdomadaire</a> ou en t’abonnant au <a href="/david/log/" title="S’abonner aux publications via RSS">flux RSS</a> (<a href="/david/blog/2019/flux-rss/" title="Tiens c’est quoi un flux RSS ?">so 2005</a>).
  547. </p>
  548. <p>
  549. Je m’intéresse à la place que je peux avoir dans ce monde. En tant qu’humain, en tant que membre d’une famille et en tant qu’associé d’une coopérative. De temps en temps, je fais aussi des <a href="https://github.com/davidbgk" title="Principalement sur Github mais aussi ailleurs">trucs techniques</a>. Et encore plus rarement, <a href="/david/talks/" title="En ce moment je laisse plutôt la place aux autres">j’en parle</a>.
  550. </p>
  551. <p>
  552. Voici quelques articles choisis :
  553. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  554. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  555. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  556. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  557. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  558. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  559. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  560. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  561. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  562. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  563. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  564. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  565. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  566. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  567. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  568. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  569. </p>
  570. <p>
  571. On peut <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">échanger par courriel</a>. Si éventuellement tu souhaites que l’on travaille ensemble, tu devrais commencer par consulter le <a href="http://larlet.com">profil dédié à mon activité professionnelle</a> et/ou contacter directement <a href="http://scopyleft.fr/">scopyleft</a>, la <abbr title="Société coopérative et participative">SCOP</abbr> dont je fais partie depuis six ans. Je recommande au préalable de lire <a href="/david/blog/2018/cout-site/" title="Attention ce qui va suivre peut vous choquer">combien coûte un site</a> et pourquoi je suis plutôt favorable à une <a href="/david/pro/devis/" title="Discutons-en !">non-demande de devis</a>.
  572. </p>
  573. <p>
  574. Je ne traque pas ta navigation mais mon
  575. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  576. conserve des logs d’accès.
  577. </p>
  578. </div>
  579. </footer>
  580. <script type="text/javascript">
  581. ;(_ => {
  582. const jumper = document.getElementById('jumper')
  583. jumper.addEventListener('click', e => {
  584. e.preventDefault()
  585. const anchor = e.target.getAttribute('href')
  586. const targetEl = document.getElementById(anchor.substring(1))
  587. targetEl.scrollIntoView({behavior: 'smooth'})
  588. })
  589. })()
  590. </script>