From a065e04d529da1d847b5062a12c46d916408bf32 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 21:46:22 -0500 Subject: update based on https://github.com/mdn/yari/issues/2028 --- .../about_omni.ja_(formerly_omni.jar)/index.html | 61 - .../fr/mozilla/add-ons/add-on_debugger/index.html | 94 -- .../add-ons/amo/r\303\250gles/featured/index.html" | 85 -- .../mozilla/add-ons/amo/r\303\250gles/index.html" | 21 - .../add-ons/amo/r\303\250gles/reviews/index.html" | 157 --- .../add-ons/bootstrapped_extensions/index.html | 348 ----- .../index.html | 213 --- .../retrait_de_votre_extension/index.html | 68 - .../mozilla/add-ons/install_manifests/index.html | 566 -------- files/fr/mozilla/add-ons/nous_contacter/index.html | 45 - .../index.html | 103 -- files/fr/mozilla/add-ons/plugins/index.html | 110 -- .../add-ons/sdk/high-level_apis/base64/index.html | 111 -- .../sdk/high-level_apis/context-menu/index.html | 833 ----------- .../mozilla/add-ons/sdk/high-level_apis/index.html | 13 - .../sdk/high-level_apis/indexed-db/index.html | 166 --- .../sdk/high-level_apis/simple-storage/index.html | 170 --- .../add-ons/sdk/high-level_apis/tabs/index.html | 669 --------- files/fr/mozilla/add-ons/sdk/index.html | 337 ----- .../mozilla/add-ons/sdk/low-level_apis/index.html | 24 - .../sdk/low-level_apis/io_byte-streams/index.html | 109 -- .../add-ons/sdk/low-level_apis/io_file/index.html | 196 --- .../low-level_apis/system_child_process/index.html | 50 - .../sdk/low-level_apis/ui_button_action/index.html | 659 --------- .../add-ons/sdk/tools/cfx_to_jpm/index.html | 192 --- files/fr/mozilla/add-ons/sdk/tools/index.html | 13 - files/fr/mozilla/add-ons/sdk/tools/jpm/index.html | 600 -------- .../tutorials/add_a_context_menu_item/index.html | 115 -- .../sdk/tutorials/getting_started_(jpm)/index.html | 165 --- files/fr/mozilla/add-ons/sdk/tutorials/index.html | 143 -- .../mozilla/add-ons/sdk/tutorials/l10n/index.html | 383 ------ files/fr/mozilla/add-ons/thunderbird/index.html | 135 -- .../mozilla/add-ons/th\303\250mes/fond/index.html" | 79 -- .../fr/mozilla/add-ons/th\303\250mes/index.html" | 45 - .../th\303\250mes/theme_concepts/index.html" | 231 ---- .../embedded_webextensions/index.html | 219 --- files/fr/mozilla/bugzilla/index.html | 59 - files/fr/mozilla/command_line_options/index.html | 472 ------- files/fr/mozilla/css/index.html | 10 - .../index.html | 103 -- files/fr/mozilla/enregistrement_chrome/index.html | 168 --- .../firefox/compiler_firefox_avec_rust/index.html | 38 - .../firefox/deploiement_entreprise/index.html | 145 -- .../mozilla/firefox/developer_edition/index.html | 57 - .../firefox/developer_edition/reverting/index.html | 23 - files/fr/mozilla/firefox/firefox_esr/index.html | 15 - files/fr/mozilla/firefox/headless_mode/index.html | 124 -- .../mozilla/firefox/le_protocole_about/index.html | 174 --- .../firefox/multiprocessus_firefox/index.html | 77 -- .../multiprocessus_firefox/motivation/index.html | 44 - .../technical_overview/index.html | 164 --- files/fr/mozilla/firefox/privacy/index.html | 15 - .../protection_contre_le_pistage/index.html | 79 -- .../protection_du_pistage_par_rebond/index.html | 101 -- files/fr/mozilla/firefox/versions/14/index.html | 90 -- files/fr/mozilla/firefox_pour_android/index.html | 65 - .../test_compatibilite/index.html | 105 -- .../chrome/css/-moz-window-dragging/index.html | 107 -- .../index.html | 19 - .../_doublecolon_-moz-tree-cell-text/index.html | 32 - .../css/_doublecolon_-moz-tree-cell/index.html | 40 - .../css/_doublecolon_-moz-tree-column/index.html | 31 - .../index.html | 30 - .../css/_doublecolon_-moz-tree-image/index.html | 36 - .../_doublecolon_-moz-tree-indentation/index.html | 29 - .../css/_doublecolon_-moz-tree-line/index.html | 30 - .../index.html | 30 - .../_doublecolon_-moz-tree-row(hover)/index.html | 19 - .../css/_doublecolon_-moz-tree-row/index.html | 55 - .../_doublecolon_-moz-tree-separator/index.html | 31 - .../css/_doublecolon_-moz-tree-twisty/index.html | 35 - files/fr/mozilla/gecko/chrome/css/index.html | 25 - files/fr/mozilla/gecko/chrome/index.html | 15 - files/fr/mozilla/gecko/faq/index.html | 201 --- .../gecko/gecko_embedding_basics/index.html | 403 ------ files/fr/mozilla/gecko/index.html | 118 -- .../api_overview/index.html" | 422 ------ .../embarquer_gecko/index.html" | 133 -- .../index.html" | 53 - .../gecko/mozilla_embarqu\303\251/index.html" | 59 - .../int\303\251gration_\303\251diteur/index.html" | 133 -- files/fr/mozilla/gecko/sdk_gecko/index.html | 61 - .../index.html | 76 - files/fr/mozilla/instantbird/index.html | 58 - .../fr/mozilla/internal_css_attributes/index.html | 20 - files/fr/mozilla/javascript_astuces/index.html | 115 -- .../fr/mozilla/javascript_code_modules/index.html | 93 -- .../javascript_code_modules/osfile.jsm/index.html | 70 - .../os.file_for_the_main_thread/index.html | 1159 ---------------- .../services.jsm/index.html | 283 ---- .../javascript_code_modules/sqlite.jsm/index.html | 360 ----- files/fr/mozilla/localization/index.html | 25 - files/fr/mozilla/localization/index/index.html | 8 - .../localization/l10n_style_guide/index.html | 357 ----- .../localization/localiser_avec_pontoon/index.html | 135 -- .../localization/localization_notes/index.html | 25 - .../localizing_with_verbatim/index.html | 169 --- files/fr/mozilla/marketplace/index.html | 127 -- files/fr/mozilla/marketplace/index/index.html | 8 - .../fr/mozilla/marketplace/monetisation/index.html | 73 - .../options/creating_a_store/index.html | 66 - files/fr/mozilla/marketplace/options/index.html | 21 - .../marketplace/options/introduction/index.html | 25 - .../options/open_web_apps_for_android/index.html | 216 --- .../marketplace/options/packaged_apps/index.html | 92 -- .../marketplace/options/self_publishing/index.html | 144 -- .../fr/mozilla/marketplace/publication/index.html | 9 - .../marketplace_critere_revue/index.html | 110 -- .../publication/updating_apps/index.html | 68 - files/fr/mozilla/marketplace/publish/index.html | 25 - .../marketplace/publishing/submit/index.html | 10 - files/fr/mozilla/mathml_project/index.html | 99 -- .../mathml_project/mathml_torture_test/index.html | 1445 -------------------- .../mozilla/mobile/balise_meta_viewport/index.html | 80 -- files/fr/mozilla/mobile/index.html | 22 - .../mode_presque_standard_de_gecko/index.html | 75 - .../participer_au_projet_mozilla/index.html | 9 - files/fr/mozilla/preferences/index.html | 53 - files/fr/mozilla/projects/emscripten/index.html | 37 - files/fr/mozilla/projects/index.html | 15 - .../fr/mozilla/projects/rhino/examples/index.html | 32 - files/fr/mozilla/projects/rhino/index.html | 25 - files/fr/mozilla/projects/talos/index.html | 8 - .../thunderbird_localisation/index.html | 95 -- files/fr/mozilla/rejoindre/index.html | 94 -- files/fr/mozilla/rust/index.html | 47 - files/fr/mozilla/security/index.html | 30 - files/fr/mozilla/tech/index.html | 13 - .../index.html | 37 - .../an_overview_of_xpcom/index.html | 504 ------- .../xpcom/guide/creating_components/index.html | 281 ---- .../guide/creating_components/preface/index.html | 77 -- .../using_xpcom_components/index.html | 303 ---- files/fr/mozilla/tech/xpcom/guide/index.html | 16 - files/fr/mozilla/tech/xpidl/index.html | 22 - .../testing/asan_nightly_project/index.html | 126 -- .../firefox_and_address_sanitizer/index.html | 11 - files/fr/mozilla/testing/index.html | 12 - .../thunderbird/account_examples/index.html | 71 - .../thunderbird/autoconfiguration/index.html | 173 --- files/fr/mozilla/thunderbird/index.html | 72 - files/fr/mozilla/thunderbird/index/index.html | 8 - .../index.html | 97 -- .../working_with_windows_in_chrome_code/index.html | 250 ---- 144 files changed, 19989 deletions(-) delete mode 100644 files/fr/mozilla/about_omni.ja_(formerly_omni.jar)/index.html delete mode 100644 files/fr/mozilla/add-ons/add-on_debugger/index.html delete mode 100644 "files/fr/mozilla/add-ons/amo/r\303\250gles/featured/index.html" delete mode 100644 "files/fr/mozilla/add-ons/amo/r\303\250gles/index.html" delete mode 100644 "files/fr/mozilla/add-ons/amo/r\303\250gles/reviews/index.html" delete mode 100644 files/fr/mozilla/add-ons/bootstrapped_extensions/index.html delete mode 100644 files/fr/mozilla/add-ons/distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur/index.html delete mode 100644 files/fr/mozilla/add-ons/distribution/retrait_de_votre_extension/index.html delete mode 100644 files/fr/mozilla/add-ons/install_manifests/index.html delete mode 100644 files/fr/mozilla/add-ons/nous_contacter/index.html delete mode 100644 files/fr/mozilla/add-ons/performance_best_practices_in_extensions/index.html delete mode 100644 files/fr/mozilla/add-ons/plugins/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/base64/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/indexed-db/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/simple-storage/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/high-level_apis/tabs/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/io_byte-streams/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/io_file/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/system_child_process/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/low-level_apis/ui_button_action/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tools/cfx_to_jpm/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tools/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tools/jpm/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tutorials/add_a_context_menu_item/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tutorials/index.html delete mode 100644 files/fr/mozilla/add-ons/sdk/tutorials/l10n/index.html delete mode 100644 files/fr/mozilla/add-ons/thunderbird/index.html delete mode 100644 "files/fr/mozilla/add-ons/th\303\250mes/fond/index.html" delete mode 100644 "files/fr/mozilla/add-ons/th\303\250mes/index.html" delete mode 100644 "files/fr/mozilla/add-ons/th\303\250mes/theme_concepts/index.html" delete mode 100644 files/fr/mozilla/add-ons/webextensions/embedded_webextensions/index.html delete mode 100644 files/fr/mozilla/bugzilla/index.html delete mode 100644 files/fr/mozilla/command_line_options/index.html delete mode 100644 files/fr/mozilla/css/index.html delete mode 100644 files/fr/mozilla/developer_guide/utilisation_de_la_machine_virtuelle_vm/index.html delete mode 100644 files/fr/mozilla/enregistrement_chrome/index.html delete mode 100644 files/fr/mozilla/firefox/compiler_firefox_avec_rust/index.html delete mode 100644 files/fr/mozilla/firefox/deploiement_entreprise/index.html delete mode 100644 files/fr/mozilla/firefox/developer_edition/index.html delete mode 100644 files/fr/mozilla/firefox/developer_edition/reverting/index.html delete mode 100644 files/fr/mozilla/firefox/firefox_esr/index.html delete mode 100644 files/fr/mozilla/firefox/headless_mode/index.html delete mode 100644 files/fr/mozilla/firefox/le_protocole_about/index.html delete mode 100644 files/fr/mozilla/firefox/multiprocessus_firefox/index.html delete mode 100644 files/fr/mozilla/firefox/multiprocessus_firefox/motivation/index.html delete mode 100644 files/fr/mozilla/firefox/multiprocessus_firefox/technical_overview/index.html delete mode 100644 files/fr/mozilla/firefox/privacy/index.html delete mode 100644 files/fr/mozilla/firefox/privacy/protection_contre_le_pistage/index.html delete mode 100644 files/fr/mozilla/firefox/privacy/protection_du_pistage_par_rebond/index.html delete mode 100644 files/fr/mozilla/firefox/versions/14/index.html delete mode 100644 files/fr/mozilla/firefox_pour_android/index.html delete mode 100644 files/fr/mozilla/firefox_pour_android/test_compatibilite/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/-moz-window-dragging/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text(hover)/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-column/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-drop-feedback/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-image/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-indentation/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-line/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-progressmeter/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row(hover)/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-separator/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-twisty/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/css/index.html delete mode 100644 files/fr/mozilla/gecko/chrome/index.html delete mode 100644 files/fr/mozilla/gecko/faq/index.html delete mode 100644 files/fr/mozilla/gecko/gecko_embedding_basics/index.html delete mode 100644 files/fr/mozilla/gecko/index.html delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/api_overview/index.html" delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/embarquer_gecko/index.html" delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/introduction_\303\240_gecko_et_\303\240_l'embarqu\303\251/index.html" delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/index.html" delete mode 100644 "files/fr/mozilla/gecko/mozilla_embarqu\303\251/int\303\251gration_\303\251diteur/index.html" delete mode 100644 files/fr/mozilla/gecko/sdk_gecko/index.html delete mode 100644 files/fr/mozilla/implementer_pontoon_sur_un_projet_mozilla/index.html delete mode 100644 files/fr/mozilla/instantbird/index.html delete mode 100644 files/fr/mozilla/internal_css_attributes/index.html delete mode 100644 files/fr/mozilla/javascript_astuces/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/osfile.jsm/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/osfile.jsm/os.file_for_the_main_thread/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/services.jsm/index.html delete mode 100644 files/fr/mozilla/javascript_code_modules/sqlite.jsm/index.html delete mode 100644 files/fr/mozilla/localization/index.html delete mode 100644 files/fr/mozilla/localization/index/index.html delete mode 100644 files/fr/mozilla/localization/l10n_style_guide/index.html delete mode 100644 files/fr/mozilla/localization/localiser_avec_pontoon/index.html delete mode 100644 files/fr/mozilla/localization/localization_notes/index.html delete mode 100644 files/fr/mozilla/localization/localizing_with_verbatim/index.html delete mode 100644 files/fr/mozilla/marketplace/index.html delete mode 100644 files/fr/mozilla/marketplace/index/index.html delete mode 100644 files/fr/mozilla/marketplace/monetisation/index.html delete mode 100644 files/fr/mozilla/marketplace/options/creating_a_store/index.html delete mode 100644 files/fr/mozilla/marketplace/options/index.html delete mode 100644 files/fr/mozilla/marketplace/options/introduction/index.html delete mode 100644 files/fr/mozilla/marketplace/options/open_web_apps_for_android/index.html delete mode 100644 files/fr/mozilla/marketplace/options/packaged_apps/index.html delete mode 100644 files/fr/mozilla/marketplace/options/self_publishing/index.html delete mode 100644 files/fr/mozilla/marketplace/publication/index.html delete mode 100644 files/fr/mozilla/marketplace/publication/marketplace_critere_revue/index.html delete mode 100644 files/fr/mozilla/marketplace/publication/updating_apps/index.html delete mode 100644 files/fr/mozilla/marketplace/publish/index.html delete mode 100644 files/fr/mozilla/marketplace/publishing/submit/index.html delete mode 100644 files/fr/mozilla/mathml_project/index.html delete mode 100644 files/fr/mozilla/mathml_project/mathml_torture_test/index.html delete mode 100644 files/fr/mozilla/mobile/balise_meta_viewport/index.html delete mode 100644 files/fr/mozilla/mobile/index.html delete mode 100644 files/fr/mozilla/mode_presque_standard_de_gecko/index.html delete mode 100644 files/fr/mozilla/participer_au_projet_mozilla/index.html delete mode 100644 files/fr/mozilla/preferences/index.html delete mode 100644 files/fr/mozilla/projects/emscripten/index.html delete mode 100644 files/fr/mozilla/projects/index.html delete mode 100644 files/fr/mozilla/projects/rhino/examples/index.html delete mode 100644 files/fr/mozilla/projects/rhino/index.html delete mode 100644 files/fr/mozilla/projects/talos/index.html delete mode 100644 files/fr/mozilla/projects/thunderbird/thunderbird_localisation/index.html delete mode 100644 files/fr/mozilla/rejoindre/index.html delete mode 100644 files/fr/mozilla/rust/index.html delete mode 100644 files/fr/mozilla/security/index.html delete mode 100644 files/fr/mozilla/tech/index.html delete mode 100644 files/fr/mozilla/tech/visualisation_et_recherche_du_code_source_mozilla_en_ligne/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/creating_components/an_overview_of_xpcom/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/creating_components/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/creating_components/preface/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/creating_components/using_xpcom_components/index.html delete mode 100644 files/fr/mozilla/tech/xpcom/guide/index.html delete mode 100644 files/fr/mozilla/tech/xpidl/index.html delete mode 100644 files/fr/mozilla/testing/asan_nightly_project/index.html delete mode 100644 files/fr/mozilla/testing/firefox_and_address_sanitizer/index.html delete mode 100644 files/fr/mozilla/testing/index.html delete mode 100644 files/fr/mozilla/thunderbird/account_examples/index.html delete mode 100644 files/fr/mozilla/thunderbird/autoconfiguration/index.html delete mode 100644 files/fr/mozilla/thunderbird/index.html delete mode 100644 files/fr/mozilla/thunderbird/index/index.html delete mode 100644 files/fr/mozilla/trouver_trace_appels_pour_rapport_bug/index.html delete mode 100644 files/fr/mozilla/working_with_windows_in_chrome_code/index.html (limited to 'files/fr/mozilla') diff --git a/files/fr/mozilla/about_omni.ja_(formerly_omni.jar)/index.html b/files/fr/mozilla/about_omni.ja_(formerly_omni.jar)/index.html deleted file mode 100644 index 9f040164df..0000000000 --- a/files/fr/mozilla/about_omni.ja_(formerly_omni.jar)/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: omni.ja (formerly omni.jar) -slug: Mozilla/About_omni.ja_(formerly_omni.jar) -translation_of: Mozilla/About_omni.ja_(formerly_omni.jar) ---- -

{{ gecko_minversion_header("2.0") }}

- -

Firefox et Thunderbird réalisent des améliorations de performances en déplaçant plusieurs de leurs fichiers autonomes dans un seul fichier JAR appelé omni.ja; ce qui réduit le nombre d'E/S nécessaire pour charger l'application. Cet article couvre le contenu de l'archive et des techniques d'inspection de ces contenus.

- -
-

Remarque: Depuis Firefox 10 et Thunderbird 10, l'extension de fichier .ja est utilisée parce que Windows System Restore ne sauvegarde pas les fichiers .jar.

-
- -

Inspecter omni.ja

- -
Remarque: Lors de l'extraction omni.ja, vous pouvez obtenir de manière incorrecte de faux avertissements de certains logiciels de protection contre les virus.
- -

Plusieurs outils d'archivage et de zip/unzip (y compris toutes les versions de 7-Zip) ne peuvent pas lire omni.ja, en raison de l'optimisation qui est appliquée au fichier. Il est suggéré que les utilisateurs de Windows 7 décompressent le fichier en le renommant omni.zip et en utilisant l'Explorateur Windows pour extraire tous les fichiers. Les utilisateurs de versions plus anciennes de Windows peuvent utiliser l'outil InfoZip pour extraire les fichiers - faire une copie de omni.ja, et glisser-déposer sur unzip.exe. Les utilisateurs de Linux peuvent utiliser simplement unzip pour decompresser les fichiers de omni.ja.

- -

omni.ja est également incompatible avec les fichiers Zip dans l'autre sens; l'édition de fichiers extraits n'affecteront pas Firefox et le zip des fichiers modifiés peuvent empecher Firefox de fonctionner si vous n'utilisez pas les bonnes options. La commande correcte pour zipper omni.ja est:

- -
zip -qr9XD omni.ja *
- -
Remarque: Avant Firefox 10 et Thunderbird 10, omni.ja était appelé omni.jar .
- -

contenu de omni.ja

- -

Le fichier omni.ja contient des ressources d'application variés:

- -
-
chrome.manifest
-
Le fichier chrome manifest.
-
/chrome/
-
fichiers d'interface utilisateur pour l'application
-
/chrome/localized.manifest
-
Manifeste du contenu francisé; référencé par le fichier chrome manifeste principal.
-
/chrome/nonlocalized.manifest
-
Manifest de contenu non-francisé; référencé par le fichier chrome manifeste principal.
-
/components/
-
Composants de l'application reposant sur XPCOM.
-
/defaults/
-
Fichiers de préférences par défaut.
-
/modules
-
modules de code JavaScript.
-
/res/
-
Divers fichiers de ressources.
-
- -

Voir aussi

- - - -
-

{{ languages( { "ja": "ja/About_omni.jar" } ) }}

-
diff --git a/files/fr/mozilla/add-ons/add-on_debugger/index.html b/files/fr/mozilla/add-ons/add-on_debugger/index.html deleted file mode 100644 index 0cb1094c3f..0000000000 --- a/files/fr/mozilla/add-ons/add-on_debugger/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Débogueur de module complémentaire -slug: Mozilla/Add-ons/Add-on_Debugger -tags: - - Développement - - Extensions - - Firefox - - Guide - - JavaScript - - Modules complémentaires - - debogueur -translation_of: 'https://extensionworkshop.com/documentation/develop/debugging/' ---- -
{{AddonSidebar}}
- -

Le débogueur de module complémentaire (Add-on) vous permet d'exécuter un ensemble d'outils de développement de Firefox dans le contexte de votre module :

- - - -

Le débogueur de module complémentaire n'est pas disponible pour les modules de superposition XUL requis pour le redémarrage. Pour déboguer des modules comme ceux-ci, utilisez la boîte à outils du navigateur.

- -

Pour une rapide introduction sur le débogueur, regardez la rapide démonstration ici (en) :

- -

{{EmbedYouTube("KU3Xsck7qy0")}}

- -

Ouverture du débogueur de module complémentaire

- -
-

Ceci décrit comment ouvrir le débogueur à partir de Firefox 45. Pour les versions antérieures de Firefox, vous devez :

- - - - -
- -

Pour connecter le débogueur d'extensions à un module complémentaire, ouvrez la page modules dans Firefox, assurez-vous que la case "Activer le débogage des modules" est cochée et cliquez sur le bouton "Déboguer" à proximité de votre add-on dans la page.

- -

Ensuite, vous verrez une boîte de dialogue vous demandant d'accepter une connexion entrante. Cliquez sur "OK", et le débogueur va commencer dans une fenêtre séparée. Notez que parfois la fenêtre du débogueur est masquée par la fenêtre principale de Firefox.

- -

{{EmbedYouTube("tGGcA3bT3VA")}}

- -

Utilisation du débogueur de module complémentaire

- -

Le débogueur de module complémentaire a une apparence et un comportement proches de ceux de la Boîte à outils du navigateur, à ceci près que, que la portée de la boîte à outils est l'intégralité du navigateur, alors que celle du débogueur de module est sur le seul module pour lequel il a été lancé. À l'instar de la boîte à outils du navigateur, une barre d'outils en haut vous permet de basculer entre plusieurs outils différents. Dans Firefox 31, il n'y a qu'un seul outil, le débogueur JavaScript, mais à partir de Firefox 32, vous obtenez également la console et l'ardoise.

- -

Le débogueur JavaScript

- -

Il se comporte comme le débogueur JavaScript normal, à l'exception de sa portée qui est le module complémentaire et non une page Web. Sur la gauche, il répertorie les sources JavaScript:

- - - -

Scripts de contenu

- -

Les scripts de contenu ne sont listés que s'ils sont chargés. Par conséquent, si votre module complémentaire charge un script de contenu avec contentScriptFile, le fichier n'apparaîtra pas dans les sources du débogueur tant que vous n'allez pas sur une page qui le charge.

- -

Si vous définissez un point d'arrêt dans un script de contenu, il ne sera pas actif pour les instances du script de contenu chargées après la définition du point d'arrêt.

- -

Par exemple, supposons que vous ayez un module complémentaire qui attache un script de contenu à chaque onglet chargé par l'utilisateur. Le script de contenu ajoute un gestionnaire de clics à la page. Dès que vous ouvrez un onglet, ce script de contenu sera répertorié dans le débogueur. Si vous définissez ensuite un point d'arrêt dans le gestionnaire de clics du script de contenu, l'exécution s'arrêtera lorsque vous cliquerez sur la page. Mais si vous ouvrez un nouvel onglet, il y a maintenant deux instances du script de contenu, et le point d'arrêt ne sera pas activé pour la deuxième instance. Vous devez définir un nouveau point d'arrêt si vous voulez qu'il fonctionne pour la seconde.

- -

Nous étudions des améliorations à ce bug 1016046.

- -

La console

- -

La console se comporte comme la console web, mais sa portée est le module complémentaire et non une page web.

- -

Notez toutefois qu'elle s'exécute réellement dans le contexte du bootstrap.js du module complémentaire, ce qui n'est peut-être pas ce à quoi vous vous attendez si votre module utilise le SDK : vous ne verrez aucun objet défini dans le main.jsde votre extension, et vous ne verrez pas require() non plus. Ce problème fait l'objet d'un suivi  bug 1005193.

- -

Vous pouvez exécuter des instructions de la console dans le contexte de main.js tandis que l'exécution est interrompue dans main.js.

- -

L'ardoise JavaScript

- -

L'ardoise se comporte comme l'ardoise JavaScript normale, mais sa portée est l'extension et non la page web.

- -

Comme pour la console, le module complémentaire s'exécute dans le contexte du bootstrap.js du module complémentaire, même s'il utilise le SDK et, comme avec la console, vous pouvez exécuter le code de l'ardoise dans le contexte de main.js pendant que l'exécution est suspendue dans main.js.

- -

Débogage des pages chrome: et about:

- -

À partir de Firefox 37, vous pouvez déboguer les pages chrome: et about: en utilisant le débogueur normal, comme s'il s'agissait de pages de contenu ordinaires.

diff --git "a/files/fr/mozilla/add-ons/amo/r\303\250gles/featured/index.html" "b/files/fr/mozilla/add-ons/amo/r\303\250gles/featured/index.html" deleted file mode 100644 index 6955588244..0000000000 --- "a/files/fr/mozilla/add-ons/amo/r\303\250gles/featured/index.html" +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: AMO Featured Extensions Policies -slug: Mozilla/Add-ons/AMO/Règles/Featured -translation_of: Mozilla/Add-ons/AMO/Policy/Featured ---- -

{{AddonSidebar}}

- -

Featured add-ons are top-quality extensions and themes highlighted on AMO, Firefox's Add-ons Manager, and across other Mozilla websites. These add-ons showcase the power of Firefox customization and are useful to a wide audience.

- -

Featured extensions are chosen by the Featured Extensions Advisory Board, a small group of extension developers and fans from the Mozilla community who have volunteered to review and vote on nominations.

- -

New featured extensions are chosen every month.

- - - -

Before nominating an extension to be featured, please ensure it meets the following criteria:

- -
    -
  1. The extension must have a complete and informative listing on AMO. This means: -
      -
    • a 64-pixel custom icon
    • -
    • a clear and concise name (no lengthy keywords)
    • -
    • a clear and concise summary of the extension's functionality
    • -
    • detailed description and privacy policy, if applicable
    • -
    • updated screenshots of the extension's functionality
    • -
    -
  2. -
  3. The extension must have excellent user reviews and any problems or support requests must be promptly addressed by the developer.
  4. -
  5. The extension must have a minimum of 500 users.
  6. -
  7. The extension must be built with WebExtensions API.
  8. -
  9. The extension must be compatible with the latest release of Firefox.
  10. -
  11. Most importantly, the extension must have wide consumer appeal to Firefox's users and be outstanding in nearly every way: user experience, performance, security, and usefulness or entertainment value.
  12. -
- -

Discovery Pane

- -

The Get Add-ons section (also referred to as the Discovery Pane) in about:addons serves a distinct editorial function: it is a tightly curated list of extensions and themes selected by Mozilla staff to address an array of the most common user needs (e.g. ad blockers, screenshot tools, etc.). The Discovery Pane is primarily intended to introduce extensions to Firefox users who have limited experience with browser customization. As such, we only select extensions that meet the highest standards of functionality, user experience, and Firefox compatibility.

- -

Only content that is part of AMO’s Featured Extensions collection will be considered for the Discovery Pane; please note that featured content must meet certain criteria.

- -

Discovery Pane content is updated monthly, though some highly popular extensions may remain on the page for an indefinite period of time.

- -

If you’d like to nominate a great extensions for consideration in the Discovery Pane, please send us a link to the add-on on AMO to amo-featured@mozilla.org and we’ll add your nomination to the editorial review queue. There’s no need to mention you’re nominating add-ons specifically for the Discovery Pane, but feel free to note that if you like.

- -

Nominating an Add-on

- -

If you wish to nominate an extension to be featured and it meets the criteria above, send an email to amo-featured@mozilla.org with:

- - - -

Extension nominations are reviewed by the Advisory Board once a month. Common reasons for rejection include lacking wide appeal to consumers, a suboptimal user experience, quality or security issues, incompatibility, and similarity to another featured extension. Rejected extension cannot be re-nominated within 3 months.

- - - -

Mozilla and the Featured Extensions Advisory Board regularly evaluate and rotate out featured extensions. Some of the most common reasons for extensions being removed from the featured list are:

- - - - - -

Every six months a new Advisory Board is chosen based on applications from the add-ons community. Members must:

- - - -

Members of the Mozilla Add-ons team may veto any extension's selection because of security, privacy, compatibility, or any other reason, but in general it is up to the Board to select extensions to feature.

- -

This featured policy only applies to the addons.mozilla.org global list of featured extensions. Extensions featured in other locations are often pulled from this list, but Mozilla may feature any extension in other locations without the Board's consent. Additionally, locale-specific features override the global defaults, so if a locale has opted to select its own features, some or all of the global features may not appear in that locale.

- -

Follow the Add-ons Blog or @mozamo on Twitter to learn when the next application period opens.

- -

Last updated: April 12, 2018

- -

How up-and-coming add-ons become featured and what's involved in the process.

diff --git "a/files/fr/mozilla/add-ons/amo/r\303\250gles/index.html" "b/files/fr/mozilla/add-ons/amo/r\303\250gles/index.html" deleted file mode 100644 index c99c0d1094..0000000000 --- "a/files/fr/mozilla/add-ons/amo/r\303\250gles/index.html" +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Règles des modules -slug: Mozilla/Add-ons/AMO/Règles -translation_of: Mozilla/Add-ons/AMO/Policy ---- -

{{AddonSidebar}}

- -

Mozilla s'engage à assurer une excellente expérience pour nos utilisateurs et développeurs d'extensions. Veuillez consulter les règles ci-dessous avant de soumettre votre module.

- -
-
Agrément du développeur
-
Effective January 5, 2016

-
Processus de revue
-
Add-ons extend the core capabilities of Firefox, allowing users to modify and personalize their Web experience. A healthy add-on ecosystem, built on trust, is vital for developers to be successful and users to feel safe making Firefox their own. For these reasons, Mozilla requires all add-ons to comply with the following set of policies on acceptable practices. The below is not intended to serve as legal advice, nor is it intended to serve as a comprehensive list of terms to include in your add-on’s privacy policy.

-
Présentation des extensions
-
How up-and-coming add-ons become featured and what's involved in the process.

- Nous contacter - -

Comment nous contacter à propos de ces règles ou de votre module.

- -
diff --git "a/files/fr/mozilla/add-ons/amo/r\303\250gles/reviews/index.html" "b/files/fr/mozilla/add-ons/amo/r\303\250gles/reviews/index.html" deleted file mode 100644 index fab668a282..0000000000 --- "a/files/fr/mozilla/add-ons/amo/r\303\250gles/reviews/index.html" +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Add-on Policies -slug: Mozilla/Add-ons/AMO/Règles/Reviews -translation_of: Mozilla/Add-ons/AMO/Policy/Reviews ---- -

{{AddonSidebar}}

- -

Add-ons extend the core capabilities of Firefox, allowing users to modify and personalize their Web experience. A healthy add-on ecosystem, built on trust, is vital for developers to be successful and users to feel safe making Firefox their own. For these reasons, Mozilla requires all add-ons to comply with the following set of policies on acceptable practices. The below is not intended to serve as legal advice, nor is it intended to serve as a comprehensive list of terms to include in your add-on’s privacy policy.

- -

All add-ons are subject to these policies, regardless of how they are distributed. Add-ons that do not comply with these policies may be subject to rejection or disabling by Mozilla.

- -

No Surprises

- -

Surprises can be appropriate in many situations, but they are not welcome when user security, privacy and control are at stake. It is extremely important to be as transparent as possible when submitting an add-on. Users should be able to easily discern what the functionality of your add-on is and not be presented with unexpected user experiences after installing it.

- -

Unexpected Features

- -

“Unexpected” features are those that are unrelated to the add-on’s primary function, and are not likely from the add-on name or description to be expected by a user installing that add-on.

- -

Should an add-on include any unexpected feature that falls into one of the following categories:

- - - -

Then the “unexpected” feature(s) must adhere to all of the following requirements:

- - - -

Content

- -

Add-ons that make use of Mozilla trademarks must comply with the Mozilla Trademark Policy. If the add-on uses “Firefox” in its name, the naming standard the add-on is expected to follow is “<Add-on name> for Firefox”.

- -

In addition, add-ons listed on addons.mozilla.org (AMO) must adhere to the following policies:

- - - -

Submission Guidelines

- -

Add-ons must function only as described, and should provide an appealing user experience. Based on the description of the add-on, a user must be able to understand and use the add-on’s features without requiring expert knowledge. Tips on how to create a good user experience for your add-on can be found here.

- -

During review, the add-on undergoes basic testing in addition to code review. To facilitate the functional testing, the add-on author must provide testing information and, if applicable, testing credentials required to use the add-on if an account is needed for any part of the add-on’s functionality.

- -

Issues brought up during review must be addressed using best efforts. If corrections have been requested, the new version should not contain unrelated changes, as this complicates the review process and can lead to further rejections.

- -

Source Code Submission

- -

Add-ons may contain transpiled, obfuscated, minified or otherwise machine-generated code, but Mozilla needs to review a copy of the human-readable source code. The author must provide this information to Mozilla during submission as well as instructions on how to reproduce the build.

- -

The provided source code will be reviewed by an administrator and will not be redistributed in any way. The code will only be used for the purpose of reviewing the add-on. Failure to provide this information will result in rejection.

- -

Please read our Source Code Submission guidelines to avoid unexpected rejections.

- -

Development Practices

- -

In general, developers are free to maintain their add-ons in the manner they choose. However, in order to maintain appropriate data security and effectively review code, we do have certain technical requirements that all add-ons must meet. In particular, potentially dangerous APIs may only be used in ways that are demonstrably safe, and code within add-ons that cannot be verified as behaving safely and correctly may need to be refactored.

- -

While any code, method or practice in a submitted add-on is subject to review and rejection, the following requirements are of particular importance:

- - - -

Data Disclosure, Collection and Management

- -

You must disclose how the add-on collects, uses, stores and shares user data in the privacy policy field on AMO. Mozilla expects that the add-on limits data collection whenever possible, in keeping with Mozilla’s Lean Data Practices and Mozilla’s Data Privacy Principles, and uses the data only for the purpose for which it was originally collected.

- -

User data includes all information the add-on collects, regardless of the manner. It can be personal data actively provided by the user (such as a name or email address), technical data (such as operating system, build ID, version numbers, crash reports, activation, updates), and interaction or activity data (add-on activity data, visited URLs, console logs), including interactions with Firefox.

- -

The add-on’s privacy policy must be the full policy text; it cannot be a link to an externally hosted privacy policy. In addition, the privacy policy must:

- - - -

A summary of this information must be included in the add-on’s listing description. Finally, you and your add-on must also comply with all applicable data privacy laws as well as any other laws that may apply to your specific add-on.

- -

User Interactions & Technical Data

- - - -

Cookies

- - - -

Personal Data

- - - -

Additional Privacy Protocols

- - - -

Security Vulnerabilities

- -

Because add-ons run in an environment with elevated privileges relative to ordinary web pages, they present a very serious set of security considerations. They have the potential to open security holes not only in the add-ons themselves, but also in the browser, in web pages, and, in particularly distressing cases, the entire system the browser is running on.

- -

As a result, we take our security policies very seriously and apply them to all add-ons, whether hosted on AMO or not. We expect all add-ons to be secure and well-maintained in handling both their own data and their user’s data. They must also securely manage all of their interactions with the web, the browser and the operating system.

- -

Monetization

- - - -

Compliance & Blocklisting

- -

For add-ons that don’t meet these policies, Mozilla may reject or blocklist affected versions or entire add-ons, depending on the extent of their non-compliance.

- -

Generally, Mozilla will attempt to contact the add-on’s developer(s) and provide a reasonable time frame for the problems to be corrected before a block is deployed. If an add-on is considered malicious or its developers have proven unreachable or unresponsive, or in case of repeat violations, blocklisting may be immediate.

- -

Mozilla reserves the right to block or delete the developer’s account on addons.mozilla.org, thereby preventing further use of the service.

diff --git a/files/fr/mozilla/add-ons/bootstrapped_extensions/index.html b/files/fr/mozilla/add-ons/bootstrapped_extensions/index.html deleted file mode 100644 index 4cc231fe1d..0000000000 --- a/files/fr/mozilla/add-ons/bootstrapped_extensions/index.html +++ /dev/null @@ -1,348 +0,0 @@ ---- -title: Modules complémentaires bootstrapés -slug: Mozilla/Add-ons/Bootstrapped_extensions -tags: - - Extensions - - Guide - - Modules complémentaires -translation_of: Archive/Add-ons/Bootstrapped_extensions ---- -

{{LegacyAddonsNotice}}{{AddonSidebar}}

- -

{{ gecko_minversion_header("2.0") }}

- -

Les extensions traditionnelles incluent des superpositions, dans lesquelles l'application peut charger XUL depuis le paquet de l'extension et l'appliquer automatiquement sur sa propre interface utilisateur. Bien que la création d'extensions, qui ajoutent à l'interface utilisateur de l'application, soit relativement simple, cela signifie que la mise à jour, l'installation ou la désactivation d'une extension nécessite un redémarrage de l'application.

- -

Gecko 2.0 {{geckoRelease ("2.0")}} introduit des extensions "bootstrapées". Ce sont des extensions spéciales qui, au lieu d'utiliser une superposition pour appliquer leur interface utilisateur à l'application, s'insèrent par programmation dans l'application. Ceci est fait en utilisant un fichier de script spécial inclus dans l'extension qui contient les fonctions que le navigateur appelle pour commander à l'extension d'installer, désinstaller, démarrer et arrêter.

- -

Toute l'application fait appel à ce fichier de script; l'extension est responsable de l'ajout et de la suppression de son interface utilisateur et de la gestion des autres tâches d'installation et d'arrêt nécessaires.

- -

Cet article explique comment fonctionnent les extensions "bootstrap". Consultez ce didacticiel sur la conversion d'une extension superposée en une opération sans redémarrage pour obtenir un guide pratique étape par étape de la migration.

- -

Le processus de démarrage et d'arrêt

- -

Une fonctionnalité clé des extensions "bootstrapées" est qu'elles doivent pouvoir démarrer et arrêter à la demande de l'application. Lorsque la fonction de startup() (démarrage) de l'extension est appelée, elle doit injecter manuellement son interface utilisateur et tout autre comportement dans l'application. De même, lorsque sa fonction shutdown() (arrêt) est appelée, elle doit supprimer tout ce qu'elle a ajouté à l'application, ainsi que toutes les références à l'un de ses objets.

- -

Il existe plusieurs scénarios dans lesquels la fonction startup() peut être appelée, par exemple :

- - - -

Quelques exemples  de situations où la fonction shutdown() peut être appelée :

- - - -

Notes sur la modification de l'interface utilisateur de l'application

- -

chrome.manifest dans les extensions "bootstrapées"

- -

Vous pouvez utiliser un fichier chrome.manifest dans l'extension "bootstrapée" pour :

- - - -

Toutes les instructions chrome.manifest ne sont pas supportées dans les extensions bootstrapées, par exemple, vous ne pouvez toujours pas enregistrer d' Overlays XUL à partir d'une extension "bootstrapée". Voir la documentation Enregistrement chrome pour les détails.

- -

Dans Firefox 10 et versions ultérieures, le fichier chrome.manifest situé dans la racine du XPI du module complémentaire (c'est-à-dire un frère du fichier install.rdf) est chargé automatiquement. Dans Firefox 8 et 9, vous devez charger / décharger manuellement le manifeste en utilisant {{ifmethod ("nsIComponentManager", "addBootstrappedManifestLocation")}} et {{ifmethod ("nsIComponentManager", "removeBootstrappedManifestLocation")}}. Cette fonctionnalité n'était pas disponible dans les versions de Firefox avant 8.

- -

Ajout manuel d'une interface utilisateur

- -

Si vous décidez de développer une extension "bootstrapée", qui modifie l'interface utilisateur de l'application, voici quelques suggestions pour vous aider à démarrer.

- -

Vous devez rechercher les éléments d'interface utilisateur de l'application appropriés par leur ID en appelant {{domxref ("document.getElementById ()")}}, puis les manipuler pour injecter votre interface utilisateur. Par exemple, vous pouvez accéder à la barre de menus de Firefox avec document.getElementById ("main-menubar").

- -

Assurez-vous qu'au moment de l'arrêt, vous supprimez toute interface utilisateur que vous avez ajoutée.

- -

Création d'une extension "bootstrapée"

- -

Pour marquer une extension comme "bootstrappable", vous devez ajouter l'élément suivant à son manifeste d'installation :

- -
<em:bootstrap>true</em:bootstrap>
- -

Alors, vous devez ajouter un fichier bootstrap.js qui contient les fonctions requises ; elles devraient être à côté du fichier install.rdf dans le paquet de l'extension.

- -

Rétrocompatibilité

- -

Parce que les anciennes versions de Firefox ne connaissent pas la propriété bootstrap ou le fichier bootstrap.js, il n'est pas trop difficile de créer un XPI qui fonctionnera à la fois comme une extension "bootstrapable" et comme une extension traditionnelle. Créez votre extension en tant qu'extension "bootstrapable", puis ajoutez les "overlays" (superpositions) traditionnels. Les versions plus récentes de Firefox utiliseront le script bootstrap.js, en ignorant les composants et les superpositions, alors que les versions plus anciennes utiliseront les superpositions.

- -

Points d'entrée Bootstrap

- -

Le script bootstrap.js doit contenir plusieurs fonctions spécifiques, appelées par le navigateur pour gérer l'extension. Le script est exécuté dans un bac à sable privilégié, qui est mis en cache jusqu'à ce que l'extension soit arrêtée.

- -

startup (démarrage)

- -

Appelé lorsque l'extension doit se démarrer elle-même. Il se produit au moment du lancement de l'application, lorsque l'extension est activée après avoir été désactivée ou après son arrêt afin d'installer une mise à jour. Il peut être appelé plusieurs fois pendant la durée de vie de l'application.

- -

C'est à ce moment que votre extension doit injecter son interface utilisateur, démarrer toutes les tâches qu'elle peut avoir besoin d'exécuter et ainsi de suite.

- -
void startup(
-  data,
-  reason
-);
-
- -
Paramètres
- -
-
data (donnée)
-
Une donnée bootstrap.
-
reason (motif)
-
Une des constantes causales, indiquant pourquoi l'extension est en cours de démarrage. Ce peut être l'une d'entre elles : APP_STARTUP, ADDON_ENABLE, ADDON_INSTALL, ADDON_UPGRADE ou ADDON_DOWNGRADE.
-
- -

shutdown (arrêt)

- -

Appelé lorsque l'extension doit se fermer, par exemple lorsque l'application est en cours de fermeture, ou lorsqu'elle est sur le point d'être mise à niveau ou désactivée. Toute interface utilisateur qui a été injectée doit être supprimée, les tâches doivent être arrêtées et les objets éliminés.

- -
void shutdown(
-  data,
-  reason
-);
-
- -
Paramètres
- -
-
data (donnée)
-
Une donnée bootstrap.
-
reason (motif)
-
Une des constantes causales, indiquant pourquoi l'extension est en train de se fermet. Ce peut être l'une d'entre elles : APP_SHUTDOWN, ADDON_DISABLE, ADDON_UNINSTALL, ADDON_UPGRADE ou ADDON_DOWNGRADE.
-
- -

install (installation)

- -

Votre script "bootstrap" doit inclure une fonction install() que l'application appelle avant le premier appel startup() après l'installation, la mise à niveau ou le déclassement de l'extension.

- -
void install(
-  data,
-  reason
-);
-
- -
Paramètres
- -
-
data (donnée)
-
Une donnée bootstrap.
-
reason (motif)
-
Une des constantes causales, indiquant pourquoi l'extension est en train d'être installée. Ce peut être l'une d'entre elles : ADDON_INSTALL, ADDON_UPGRADE, ou ADDON_DOWNGRADE.
-
- -

uninstall (désinstallation)

- -

Cette fonction est appelée après le dernier appel à shutdown()  avant qu'une version particulière de l'extension soit désinstallée. Il n'est pas appelé si install()  n'a jamais été appelé .

- -
Note : Si vous ouvrez le gestionnaire de modules complémentaires, puis cliquez sur «Supprimer» sur un module complémentaire, il n'appellera pas la fonction de désinstallation immédiatement. Il s'agit d'une désinstallation en raison de l'option "Annuler" disponible. Si le gestionnaire de modules complémentaires est fermé ou qu'un autre événement se déroule de telle sorte que l'option "Annuler" devient indisponible, la désinstallation en dur a lieu et la fonction de désinstallation est appelée.
- -
Note : La fonction de désinstallation s'exécute sur déclassement et mise à niveau, ainsi vous devriez vous assurer qu'il s'agit d'une désinstallation en faisant ceci :
-function uninstall(aData, aReason) {
-     if (aReason == ADDON_UNINSTALL) {
-          console.log('really uninstalling');
-     } else {
-          console.log('not a permanent uninstall, likely an upgrade or downgrade');
-     }
-}
- -
void uninstall(
-  data,
-  reason
-);
-
- -
Paramètres
- -
-
data (donnée)
-
Une donnée bootstrap.
-
reason
-
Une des constantes causales, indiquant pourquoi l'extension est en train d'être désinstallée. Ce peut être l'une d'entre elles : ADDON_UNINSTALL, ADDON_UPGRADE ou ADDON_DOWNGRADE.
-
- -

Constantes causales

- -

La fonction bootstrap accepte un paramètre reason (motif), qui explique pourquoi l'extension est appelée. Les constantes causales sont :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ConstanteValeurDescription
APP_STARTUP1L'application est démarrée.
APP_SHUTDOWN2L'application est fermée.
ADDON_ENABLE3Le module complémentaire est activé.
ADDON_DISABLE4Le module complémentaire est désactivé. (également envoyé pendant la désinstallation)
ADDON_INSTALL5Le module complémentaire est installé.
ADDON_UNINSTALL6Le module complémentaire est désinstallé.
ADDON_UPGRADE7Le module complémentaire est mis à jour.
ADDON_DOWNGRADE8Le module complémentaire est déclassé.
- -

Données bootstrap

- -

Chacun des points d'entrée est transmis à une structure de données simple contenant des informations utiles sur le module complémentaire "bootstrapé". Plus d'informations sur l'extension peuvent être obtenues en appelant AddonManager.getAddonByID(). Les données sont un objet JavaScript simple avec les propriétés suivantes :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropriétéTypeDescription
idchaîne de caractèresL'ID du module complémentaire est "bootstrapé".
versionchaîne de caractèresLa version du module complémentaire est "bootstrapée".
installPath (chemin d'installation)nsIFileL'emplacement d'installation du module complémentaire est "bootstrapé". Il peut s'agir d'un répertoire ou d'un fichier XPI selon que le module complémentaire est installé décompressé ou non.
resourceURI (URI ressource)nsIURIL'URI pointe sur la racine des fichiers complémentaires, il peut s'agir d'un URI jar: ou file: , selon que le module complémentaire est installé ou non. {{ gecko_minversion_inline("7.0") }}
oldVersion (ancienne version)chaîne de caractèresLa précédente version installée, si le motif est ADDON_UPGRADE ou ADDON_DOWNGRADE, et si la méthode est install oustartup. {{ gecko_minversion_inline("22.0") }}
newVersion (nouvelle version)chaîne de caractèresLa version à installer, si le motif est ADDON_UPGRADE ou ADDON_DOWNGRADE, et si la méthode est shutdown ou uninstall. {{ gecko_minversion_inline("22.0") }}
- -
-

Note : Un module complémentaire peut être mis à niveau / déclassé au démarrage de l'application, dans ce cas, le motif de la méthode startup est APP_STARTUP et la propriété oldVersion n'est pas définie. Sachez également que, dans certaines circonstances, une mise à niveau ou un déclassement additif peut se produire sans que la méthode de désinstallation soit appelée.

-
- -

Débogueur de module complémentaire

- -

A partir de Firefox 31, vous pouvez utiliser le débogueur de module complémentaire pour déboguer les modules complémentaires "bootstrapés".

- -

Localisation (L10n)

- -

La localisation des modules complémentaires "bootstrapés" est très similaire à celle de Firefox 7, car c'est à ce moment-là que la compatibilité de chrome.manifest a démarré.

- -

Fichiers JS et JSM - Utilisation des fichiers de propriétés

- -

Pour localiser vos fichiers .js et .jsm , vous avez à utiliser les fichiers de propriétés.

- -

Le minimum absolument nécessaire est :

- -
    -
  1. Fichier : install.rdf
  2. -
  3. Fichier : chrome.manifest
  4. -
  5. Fichier : bootstrap.js
  6. -
  7. Dossier : locale (langue) -
      -
    1. Dossier : VALID_LOCALE_HERE (localisation valide ici) -
        -
      1. Fichier : ANYTHING.properties (toutes les propriétés)
      2. -
      -
    2. -
    -
  8. -
- -

Dans le dossier "locale", vous devez disposer de dossiers pour chacune des langues que vous souhaitez fournir; chaque dossier doit être nommé avec un nom "locale" valide (exemple : fr). Dans ce dossier, doit exister un fichier de propriétés. Dans le fichier chrome.manifest, ces paramètres régionaux doivent être définis. Par exemple, si vous disposez d'un sous-dossier fr dans le dossier "locale", votre fichier chrome.manifest devra contenir : locale NAME_OF_YOUR_ADDON fr locale/fr/

- -

Ici un exemple : GitHub :: l10n-properties - au démarrage de ce module, il affichera une invite indiquant USA ou Grande-Bretagne, avec laquelle choisir la langue la plus proche de la vôtre. Vous pouvez tester différents "locale" en allant sur about:config et en changeant les préférences de general.useragent.locale, et en désactivant puis en réactivant le module complémentaire.

- -

Fichiers XUL et HTML - Utilisation d'entités à partir de fichiers DTD

- -

Plusieurs pages HTML sont utilisées, mais elles ne peuvent pas être localisées avec des fichiers DTD. Il y a trois changements que vous devez faire :

- -
    -
  1. Vous devez changer l'extension du fichier HTML en .xhtml
  2. -
  3. Le doctype doit être défini pointant sur un fichier DTD dans votre dossier "locale", ainsi par exemple : <!DOCTYPE html SYSTEM "chrome://l10n/locale/mozilla.dtd">
  4. -
  5. Vous devez ajouter l'attribut xmlns à la balise html, par exemple : <html xmlns="http://www.w3.org/1999/xhtml">
  6. -
  7. Si vous avez plusieurs fichiers DTD lisez ceci : Utilisation de plusieurs DTD
  8. -
- -

Le minimum nécessaire est :

- -
    -
  1. Fichier : install.rdf
  2. -
  3. Fichier : chrome.manifest
  4. -
  5. Fichier : bootstrap.js
  6. -
  7. Dossier : locale -
      -
    1. Dossier : VALID_LOCALE_HERE -
        -
      1. Fichier : ANYTHING.dtd
      2. -
      -
    2. -
    -
  8. -
- -

Le fichier chrome.manifest doit inclure une définition pour le contenu, par exemple: content NAME_OF_YOUR_ADDON ./

- -

Le fichier chrome.manifest doit aussi inclure une ligne pointant sur le dossier "locale", comme dans la section de propriété ci-dessus, si vous avez un dossier nommé en-US dans le dossier "locale", le fichier chrome.manifest doit contenir : locale NAME_OF_YOUR_ADDON en-US locale/en-US/

- -

ici un exemple de module complémentaire qui ouvre une page HTML et une page  XUL sur install : GitHub :: l10n-xhtml-xul. Voici un exemple montrant comment utiliser une page HTML localisée en tant que page d'options : GitHub :: l10n-html-options. Vous pouvez aller sur about:config et changer la valeur de la préférence general.useragent.locale en-US par en-GB et recharger la page ouverte pour voir les changements sur les paramètres régionaux.

- -

Plus de lecture

- - diff --git a/files/fr/mozilla/add-ons/distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur/index.html b/files/fr/mozilla/add-ons/distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur/index.html deleted file mode 100644 index 3a2515f3ce..0000000000 --- a/files/fr/mozilla/add-ons/distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur/index.html +++ /dev/null @@ -1,213 +0,0 @@ ---- -title: Gagner de l'argent avec les extensions de navigateur -slug: >- - Mozilla/Add-ons/Distribution/gagner_de_l_argent_avec_les_extensions_de_navigateur -tags: - - Guide - - Monétisation - - WebExtensions - - distribution -translation_of: Mozilla/Add-ons/Distribution/Make_money_from_browser_extensions ---- -

{{AddonSidebar}}

- -

Alors que les utilisateurs peuvent télécharger des extensions de navigateur pour Firefox gratuitement depuis addons.mozilla.org (AMO), cela ne signifie pas que vous ne pouvez pas faire de l'argent avec des extensions de navigateur, et dans une mesure plus limitée thèmes.

- -

Cet article passe en revue vos options pour générer des revenus à partir des extensions de navigateur en ajoutant des fonctions payantes, en faisant de la publicité ou en demandant des dons. L'article conclut ensuite en suggérant certaines choses que vous pouvez faire pour maximiser la production de revenus. Mais, tout d'abord, l'article se penche sur l'AMO et les limites des mécanismes de revenu dans les extensions de navigateur..

- -

Est-ce que je pourrai un jour vendre par l'entremise d'AMO ?

- -

Mozilla a l'intention de maintenir AMO en tant que source gratuite à télécharger d'extensions de navigateur et de thèmes. Mozilla n'a pas non plus l'intention de fournir des mécanismes pour les achats d'applications dans les extensions.

- -

Qu'est-ce que tu ne peux pas faire ?

- -

Mozilla place peu de restrictions sur la façon dont vous pouvez monétiser votre extension de navigateur. Les restrictions en place visent généralement à assurer un bon comportement lors de l'interaction avec vos utilisateurs tout en générant des revenus. Donc, avant d'envisager de faire de l'argent, sachez que vous devez le faire :

- - - -

Pour plus de détails, consultez les sections contenu et monétisation des politiques complémentaires.

- -

Que pouvez-vous faire ?

- -

Il y a trois approches que vous pouvez adopter pour monétiser l'extension de votre navigateur :

- - - -

Facturation des fonctions

- -

Il existe de nombreuses approches que vous pouvez prendre pour facturer les fonctionnalités de votre extension de navigateur, vous pouvez par exemple :

- - - -

À moins que vous ne fournissiez une fonctionnalité ayant une valeur intrinsèque très élevée, l'approche la plus efficace consistera probablement à fournir aux utilisateurs certaines fonctionnalités gratuites moyennant des frais supplémentaires. Si vous êtes réticent à offrir des fonctionnalités gratuites, considérez que les développeurs qui ont essayé de commercialiser des extensions sans fonctionnalités gratuites rapportent qu'il est difficile d'attirer un public vers un produit entièrement commercial. Un avantage supplémentaire de fournir une partie ou la totalité de vos fonctionnalités sous une forme ou une autre gratuitement est que les utilisateurs peuvent confirmer que votre extension répond à leurs attentes. Si vous demandez aux utilisateurs de payer d'avance, certains demanderont un remboursement parce que l'extension n'avait pas les fonctionnalités qu'ils attendaient.

- -

Choisir un fournisseur de paiement

- -

La clé pour implémenter des fonctions payantes dans votre navigateur est de choisir un fournisseur de traitement des paiements. Il existe de nombreux fournisseurs auxquels vous pouvez faire appel, mais celui qui répond le mieux à vos besoins et celui de vos utilisateurs n'est pas nécessairement le plus connu. Lorsque vous choisissez votre fournisseur de paiement, voici quelques points à prendre en considération :

- - - -

Choix de la fréquence de paiement

- -

De nombreux fournisseurs de paiement vous permettront de proposer des achats ponctuels ou par abonnement. Les achats uniques offrent l'approche la plus simple, car vous n'avez pas à vous soucier de surveiller les paiements d'abonnement et d'annuler la licence si elle expire. D'autre part, avec l'abonnement, vous pouvez offrir des fonctions à un prix de transaction plus bas, réduisant ainsi l'obstacle au paiement. Les abonnements peuvent également créer une source de revenus fiable et récurrente.

- -

Mise en œuvre d'un mécanisme de paiement et d'octroi de licences

- -

Si vous rendez l'extension de votre navigateur disponible sur Chrome, vous pouvez profiter de l'API de paiement Google in-app pour gérer les transactions.

- -

Pour Firefox, et la plupart des autres navigateurs majeurs, vous aurez besoin d'installer un système de paiement. Une approche simple et raisonnablement robuste consiste à faire ce qui suit :

- - - -

En plus d'avoir un moyen pour l'utilisateur d'entrer la clé de licence manuellement, il est important de gérer les interactions avec la page d'achat afin que la licence soit installée automatiquement. Cela permet d'économiser beaucoup de travail d'assistance en expliquant comment installer la licence.

- -

Conseil du développeur : Ne passez pas trop de temps à protéger votre système de licence contre les pirates informatiques, car les utilisateurs qui sont enclins à utiliser une licence piratée sont peu susceptibles d'en payer le prix. Votre temps est mieux employé à développer de nouvelles fonctions d'extension qui attirent plus d'utilisateurs payants.

- -

Conversion de la gratuité en paiement

- -

Si vous avez initialement lancé votre extension de navigateur en tant que produit gratuit, votre meilleure approche pour générer des revenus est d'ajouter de nouvelles fonctionnalités commerciales. La conversion d'un produit gratuit en un produit payant n'est pas susceptible de plaire à vos utilisateurs. Même l'ajout de caractéristiques commerciales doit être fait avec soin. Vous devriez vous préparer à une réaction négative, du genre "il était gratuit", même si vous ne modifiez pas ou ne limitez pas l'accès aux fonctions gratuites.

- -

Affichage d'annonces

- -

Si vous pensez que la base d'utilisateurs de votre navigateur est peu susceptible d'être réceptive aux fonctions payantes, les publicités peuvent être une option viable pour générer des revenus. Cependant, sachez que les publicités ne sont susceptibles de générer des revenus importants que si votre extension dispose d'une large base d'utilisateurs.

- -

Il y a trois façons d'afficher techniquement des publicités, mais toutes ne sont pas acceptables pour les canaux publicitaires et les utilisateurs. Les options sont :

- - - -

Choisir un programme publicitaire

- -

Il existe de nombreux fournisseurs d'ajouts allant des grands fournisseurs mondiaux bien connus, comme Google AdSense, jusqu'aux petits services régionaux. Trouver le bon fournisseur dépendra beaucoup de l'extension de votre navigateur, mais voici quelques points à considérer :

- - - -

Vous pouvez toujours chercher à vendre de l'espace publicitaire vous-même. Toutefois, cela ne sera probablement viable que si vous disposez de ressources importantes que vous pouvez mobiliser pour vendre de l'espace publicitaire et que vous avez le trafic nécessaire pour soutenir cette approche. Cependant, vous pourriez être en mesure d'identifier un fournisseur d'un produit ou d'un service complémentaire qui serait intéressé par votre base d'utilisateurs et être en mesure de faire une vente en gros de votre espace publicitaire.

- -

Meilleures pratiques pour l'affichage des annonces

- -

Les publicités représentent un défi intéressant, la nécessité de trouver un compromis entre elles étant suffisamment visible pour générer des revenus, mais pas assez visible pour décourager les utilisateurs. Il n'y a pas de règles strictes et rapides pour une bonne conception de l'incorporation de publicités, mais ce sont certaines des choses que vous devriez considérer.

- - - -

Demander des dons

- -

Si la mise en place d'un accès payant aux fonctionnalités de l'extension de votre navigateur ou la navigation dans les méandres de la mise en œuvre d'annonces publicitaires semble inappropriée pour votre extension, demander des dons peut être la voie à suivre.

- -

Cependant, sachez que la plupart des développeurs rapportent que les dons ne génèrent des revenus importants que lorsque l'extension du navigateur a une large base d'utilisateurs.

- -

Les dons peuvent également être une bonne option par rapport au passage à un modèle payant où vous pourriez rencontrer des résistances de la part des utilisateurs, où l'extension de votre navigateur est déjà disponible gratuitement et avec toutes ses fonctionnalités.

- -

Il existe un certain nombre de plates-formes que vous pouvez utiliser pour fournir des services de paiement pour les dons, y compris :

- - - -

Lorsque vous choisissez un fournisseur de plateforme de dons, tenez compte de ce qui suit  :

- - - -

Avec les extensions de navigateur pour Firefox, vous avez deux façons de demander des dons : par AMO et par votre extension.

- -

Demande de dons par l'entremise de l'AMO

- -

Vous pouvez ajouter un bouton "contributions" à la page AMO de votre extension qui renvoie à votre page de paiement à partir d'un des fournisseurs supportés. Pour ajouter le bouton :

- - - -

Une section de contribution est alors ajoutée à la page AMO de votre poste.

- -

Example extension page on AMO highlighting the contribution next section

- -

Demander des dons à partir de l'extension de votre navigateur

- -

Pour ce faire, vous ajoutez un bouton de don ou un lien vers un endroit approprié dans votre extension.

- -

Bonnes pratiques

- -

Vous n'obtiendrez pas de don si vous ne le demandez pas, mais les demandes excessives de dons peuvent être déconcertantes pour vos utilisateurs et peuvent les encourager à supprimer votre extension de navigateur.  Cependant, trouver la bonne méthode et la bonne fréquence pour les demandes de dons sera une question d'essais et d'erreurs. Lorsque vous ajoutez des demandes de dons, tenez compte de ce qui suit :

- - - -

N'oubliez pas non plus que si vous demandez des dons réguliers, vous devrez également fournir régulièrement du nouveau contenu ou de nouvelles fonctionnalités.

- -

Offres non sollicitées

- -

Au fur et à mesure que votre extension gagnera en popularité, il est fort probable que vous serez contacté par des agences qui vous proposeront de vous transformer en millionnaire en un rien de temps, sans grand effort de votre part ; quelque chose du genre : "Insérez juste une ligne dans le code de votre add-on et devenez riche en ne faisant rien !"

- -

Traitez ces offres avec la plus grande prudence. Il est probable que le système cherchera à capturer les données privées de vos utilisateurs pour les vendre. Et, si vous obtenez de l'argent, il est probable qu'il soit beaucoup moins élevé que ce qui vous avait été promis à l'origine. Mais pire encore, vous pourriez vous retrouver avec votre extension bloquée et votre réputation ternie.

- -

Comment puis-je maximiser mon revenu ?

- -

La création d'une base d'utilisateurs large et fidèle est essentielle pour maximiser les revenus que vous générez, quel que soit le mécanisme que vous choisissez. Pour construire votre base d'utilisateurs :

- - diff --git a/files/fr/mozilla/add-ons/distribution/retrait_de_votre_extension/index.html b/files/fr/mozilla/add-ons/distribution/retrait_de_votre_extension/index.html deleted file mode 100644 index f2a3c408f0..0000000000 --- a/files/fr/mozilla/add-ons/distribution/retrait_de_votre_extension/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Retrait de votre extension -slug: Mozilla/Add-ons/Distribution/retrait_de_votre_extension -tags: - - Extensions - - WebExtension - - end of life - - publication -translation_of: Mozilla/Add-ons/Distribution/Retiring_your_extension ---- -

{{AddonSidebar}}

- -

Il peut arriver que vous souhaitiez retirer une de vos extensions. Cet article suggère les étapes à suivre, ainsi que des pointeurs vers un calendrier approprié.

- -

Raisons du retrait d'une extension

- -

Il y a deux raisons principales pour lesquelles vous pourriez vouloir mettre fin à votre extension :

- - - -

Étapes à suivre pour retirer une extension

- -

Lorsque vous souhaitez retirer une extension, envisagez de prendre les mesures suivantes :

- -
    -
  1. Concevoir un calendrier pour la fin de vie de votre extension
    - Envisagez d'inclure les étapes suivantes dans un calendrier de retrait de votre extension : -
      -
    1. publier le calendrier de fin de vie de votre poste, y compris une explication des raisons pour lesquelles vous retirez votre poste.
    2. -
    3. publier une mise à jour qui supprime les copies installées de votre extension.
    4. -
    5. rendre l'extension indisponible pour les nouvelles installations, en rendant sa liste AMO invisible.
    6. -
    -
  2. -
  3. Publier des conseils que vous prévoyez de mettre fin à votre extension
    - Considérez les options suivantes pour informer les gens de votre intention de prendre votre extension : -
      -
    1. mettez à jour la page AMO de votre extension avec son calendrier de fin de vie.
    2. -
    3. Si votre extension est remplacée par une autre, fournissez un lien vers la nouvelle extension. Vous pouvez utiliser {{WebExtAPIRef("management.onInstalled")}} pour écouter l'installation de la nouvelle extension afin de déclencher la suppression de l'extension d'origine en utilisant  {{WebExtAPIRef("management.uninstallSelf")}}.
    4. -
    5. communiquez le calendrier par le biais des médias sociaux, des forums ou, si possible, par courrier électronique.
    6. -
    -
  4. -
  5. Publier une version finale, auto-supprimée de votre extension
    - Utilisez {{WebExtAPIRef("management.uninstallSelf")}} pour que votre extension se désinstalle automatiquement. Avant cela, fournissez un avis rappelant à l'utilisateur la suppression de l'extension. Si votre extension est remplacée par une autre, n'oubliez pas de fournir un rappel concernant le lien vers la nouvelle extension. Vous pouvez offrir à l'utilisateur la possibilité de supprimer l'extension maintenant ou dans quelques jours.
  6. -
  7. Rendez votre liste AMO invisible pour éviter de nouvelles installations
    - Pour masquer la liste des AMO de votre extension -
      -
    1. Ouvrez la liste de votre extension dans AMO.
    2. -
    3. Dans le menu de la barre latérale, ouvrez Gérer le statut & les  versions.
    4. -
    5. Dans la section Visibilité de la liste, cliquez sur Invisible.
    6. -
    -
  8. -
- -

Votre extension cachée ne sera pas disponible pour une recherche d'AMO ou pour tenter d'y accéder directement en utilisant l'URL AMO de la page.

- -

Calendrier de départ suggéré

- -

Il n'y a pas de période idéale entre la publication de votre calendrier de fin de vie et la suppression de votre extension des navigateurs des utilisateurs. En établissant le calendrier, vous pourriez envisager :

- - - -

Lorsque vous avez commencé à retirer l'extension, utilisez les statistiques d'utilisateur actives sur AMO pour affiner votre timing. Par exemple, si le nombre d'utilisateurs actifs ne diminue pas de manière significative, vous pouvez retarder le déploiement de la version finale de votre extension et envoyer un rappel concernant vos projets. Pour accéder aux statistiques de l'utilisateur actif, ouvrez votre extension dans AMO Developer Hub et cliquez sur Afficher le tableau de bord des statistiques dans le menu contextuel.

diff --git a/files/fr/mozilla/add-ons/install_manifests/index.html b/files/fr/mozilla/add-ons/install_manifests/index.html deleted file mode 100644 index 841725f370..0000000000 --- a/files/fr/mozilla/add-ons/install_manifests/index.html +++ /dev/null @@ -1,566 +0,0 @@ ---- -title: Install Manifests -slug: Mozilla/Add-ons/Install_Manifests -translation_of: Archive/Add-ons/Install_Manifests ---- -

Présentation

- -

Un manifeste d'installation est un fichier d'application XUL add-on Manager-enabled (par exemple de Firefox ou de Thunderbird) utilisé pour déterminer les informations sur une add-on quant il est en cours d'installation. Il contient des métadonnées identifiant l'add-on, fournit des informations sur son créateur, des informations sur les versions, ses compatibilités, sa mis à jour, etc...

- -

Le format du manifest d'installation est RDF/XML.

- -

Le fichier doit être appelé install.rdf et se trouver au niveau le plus haut du fichier XPI de l'add-on.

- -

Disposition

- -

La disposition de base d'un Manifest d'installation est comme cela:

- -
-
<?xml version="1.0" encoding="UTF-8"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-  <Description about="urn:mozilla:install-manifest">
-    <!-- properties -->
-  </Description>
-</RDF>
-
-
- -

Certaines des propriétés sont essentielles, d'autres sont optionnelles. Certaines ont de simples chaînes comme valeur, d'autres sont de complexes ressources.

- -

Référence de Propriété Requise

- -

Votre Manifest d'installation doit spécifier ces propriétés autrement votre add-on ne s'installera pas.

- -

id

- -

L'ID de l'extension, qui doit être l'une des suivantes:

- - - -

Ce dernier format est considérablement plus facile à générer et à manipuler. Firefox 1.5 vérifie que votre id correspond à un format ou à l'autre et refusera d'installer des addons contenant des id mal formés. Cependant, vous ne devriez pas utiliser une adresse email réelle pour votre id, car cela pourrait attirer des spams.

- -

Exemples

- -
<em:id>extensionname@example.org</em:id>
-
-<em:id>{daf44bf7-a45e-4450-979c-91cf07434c3d}</em:id>
- -

version

- -

A version string identifying the version of the add-on being supplied.

- -

For Firefox/Thunderbird 1.0, the format must conform to the rules specified in Extension Versioning, Update and Compatibility. For Firefox/Thunderbird 1.5, see Toolkit version format.

- -

Examples

- -
<em:version>2.0</em:version>
-
-<em:version>1.0.2</em:version>
-
-<em:version>0.4.1.2005090112</em:version>
- -

Firefox 1.5 / XULRunner 1.8 - add-ons that do not use a valid version format will not be installed. The version format is different from, although backwards-compatible with, 1.0's.

- -

For addons hosted on addons.mozilla.org - Mozilla's update website may repackage your add-on and correct or reject malformed version strings.

- -

type

- -

An integer value representing the type of add-on.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2Extensions
4Themes
8Locale
32Multiple Item Package
64Spell check dictionary
128Telemetry Experiment
- -

Examples

- -
<em:type>2</em:type>
- -

{{ Fx_minversion_inline(1.5) }} This property was added for Firefox 1.5, and is only required for add-on types other than Extensions and Themes.

- -

{{ Fx_minversion_inline(3) }} Firefox 2 and previous supported a value of 16 to represent plug-ins. In Firefox 3 this has been removed.

- -

targetApplication

- -

An object specifying an application targeted by this add-on. This means that the add-on will work with the application identified by the id property (<em:id>) specified (for a comprehensive list of application IDs and valid min/maxVersions for them see Valid application versions for add-on developers), from the minimum version (<em:minVersion>) up to and including the maximum version (<em:maxVersion>). These version strings are formatted in the same fashion as the version property and will be compared to the application version; this allows the extension author to specify which versions of Firefox an extension has been tested with.

- -

id, minVersion, and maxVersion are all required.

- -
Note: Extensions compatible with Firefox 3.5 should specify a maxVersion of 3.5.*, so that they are automatically compatible with security and stability updates. For Firefox 3.0, a maxVersion of 3.0.* should be used. Extensions compatible only with Firefox or Thunderbird 2 should specify a maxVersion of 2.0.0.*.
- -

The Install Manifest must specify at least one of these objects, and may specify more if the add-on targets multiple applications that support the Add-on Manager (e.g. Firefox and Thunderbird).

- -

Examples

- -
<em:targetApplication>
- <Description>
-  <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!--Firefox-->
-  <em:minVersion>1.5</em:minVersion>
-  <em:maxVersion>3.0.*</em:maxVersion>
- </Description>
-</em:targetApplication>
- -

{{ Fx_minversion_inline(3) }} Gecko 1.9 based applications allow you to use the special targetApplication id toolkit@mozilla.org to say that the add-on is compatible with any toolkit app with a toolkit version matching the minVersion and maxVersion.

- -

name

- -

The name of the add-on; intended for display in the UI.

- -

Examples

- -
<em:name>My Extension</em:name>
- -

Optional Property Reference

- -

You may need to supply these properties, depending on the capabilities of your add-on.

- -

bootstrap

- -

{{ Fx_minversion_inline(4) }} A Boolean value that tells the application whether the extension is boot-strappable. At the moment this only works for add-ons with em:type="2". The default value is false. For more information, see Bootstrapped extensions.

- -

unpack

- -

{{ Fx_minversion_inline(4) }} A true or false value that tells the application whether the extension requires its files be unpacked into a directory in order to work or whether the extension can be loaded direct from the XPI. In versions before Gecko 2.0 all extensions were unpacked, in Gecko 2.0 and later the default is to not unpack. If an extension includes the following then it must request unpacking:

- - - -

Examples

- -
<Description about="urn:mozilla:install-manifest">
-   <em:id>extension@mysite.com</em:id>
-   <em:unpack>true</em:unpack>
-   ...
-</Description>
- -

skinnable

- -

{{ Fx_minversion_inline(4) }} A true or false value property fo that tells the application whether the (complete) theme can be skinned by lightweight themes/personas:

- -

Examples

- -
<em:skinnable>true</em:skinnable>
-
- -

localized

- -

{{ Fx_minversion_inline(3) }} Allows you to localize the add-on's name, description, contributors and other metadata. The localized description must specify at least one em:locale which indicates which locales to use this information for.

- -

Examples

- -

This declares a set of add-on metadata to be displayed when the application is running in the de-DE locale.

- -
<em:localized>
-  <Description>
-    <em:locale>de-DE</em:locale>
-    <em:name>Tab Sidebar</em:name>
-    <em:description>Zeigt in einer Sidebar Vorschaubilder der Inhalte aller offenen Tabs an.</em:description>
-  </Description>
-</em:localized>
- -

The following properties which are described elsewhere in this page can be included in the localized property:

- - - -

More documentation can be found at Localizing extension descriptions.

- -

description

- -

A short description of the add-on - intended for display in the user interface. This description should fit on one short line of text.

- -

Examples

- -
<em:description>Advanced foo tools.</em:description>
- -

creator

- -

The name of the creator/principal developer - intended for display in the user interface.

- -

Examples

- -
<em:creator>John Doe</em:creator>
- -

or

- -
<em:creator>CoolExtension Team</em:creator>
- -

developer

- -

{{ Fx_minversion_inline(2) }} The name(s) of co-developers. You may specify more than one of this value to specify multiple developers.

- -

Examples

- -
<em:developer>Jane Doe</em:developer>
-<em:developer>Koos van der Merwe</em:developer>
-
- -

translator

- -

{{ Fx_minversion_inline(2) }} The name(s) of translators. You may specify more than one of this value to specify multiple translators.

- -

Examples

- -
<em:translator>Janez Novak</em:translator>
-<em:translator>Kari Nordmann</em:translator>
-
- -

contributor

- -

The name(s) of additional contributors. You may specify more than one of this value to specify multiple contributors.

- -

Examples

- -
<em:contributor>John Doe</em:contributor>
-
-<em:contributor>John Doe</em:contributor>
-<em:contributor>Jane Doe</em:contributor>
-<em:contributor>Elvis Presley</em:contributor>
-
- -

homepageURL

- -

A link to the add-on's home page - intended for display in the user interface.

- -

Examples

- -
<em:homepageURL>http://www.foo.com/</em:homepageURL>
-
- -

updateURL

- -

A link to a custom Update Manifest file that specifies available updates to the add-on. The format is described below. If enabled, the add-on manager periodically checks with this Manifest file to determine if newer versions are available. When not included, the add-on manager will still check for updates on AMO, using the ID of the extension.

- -
Note: It is strongly recommended that the updateURL be an HTTPS (secure) link. Non-secure update URLs can be hijacked by a malicious update.rdf file, enabling malware to infiltrate the user's computer. Alternatively, you could host your extension on AMO and leave out the updateURL completely. This provides secure updates automatically.
- -

{{ Fx_minversion_inline(3) }} For security reasons, Gecko 1.9 applications require that if you specify an updateURL, it must be an https URL, or you must include an updateKey.

- -

Your server must send this file as text/rdf, text/xml or application/rdf+xml or the update checker may not work.

- -

The addon manager will substitute the following values into this URL in case you wish to generate the response RDF dynamically, such as using PHP or CGI:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%REQ_VERSION%The version of the request. Currently 1
%ITEM_ID%The id of the addon being updated
%ITEM_VERSION%The version of the addon being updated
%ITEM_MAXAPPVERSION%The maxVersion of the targetApplication object corresponding to the current application for the addon being updated.
%ITEM_STATUS%{{ Fx_minversion_inline(2) }} Comma separated list of the add-ons operating status in the application. Contains at the least either userEnabled or userDisabled plus any number of incompatible, blockslisted or needsDependencies.
%APP_ID%The id of the current application
%APP_VERSION%The version of the application to check for updates for
%CURRENT_APP_VERSION%{{ Fx_minversion_inline(3.5) }} The version of the current application
%APP_OS%{{ Fx_minversion_inline(1.5) }} The value of OS_TARGET from the Firefox build system, identifying the operating system being used.
%APP_ABI%{{ Fx_minversion_inline(1.5) }} The value of the TARGET_XPCOM_ABI value from the Firefox build system, identifying the compiler/architecture combination used to compile the current application.
%APP_LOCALE%{{ Fx_minversion_inline(3) }} The current application's locale.
%UPDATE_TYPE%{{ Fx_minversion_inline(4) }} UPDATE_TYPE_COMPATIBILITY(32), UPDATE_TYPE_NEWVERSION(64)
%COMPATIBILITY_MODE%{{ Fx_minversion_inline(10) }} related to default to compatible, values could be normal, ignore or strict.
- -

Examples

- -
<em:updateURL>http://www.foo.com/update.cgi?id=%ITEM_ID%&amp;version=%ITEM_VERSION%</em:updateURL>
-<em:updateURL>http://www.foo.com/extension/windows.rdf</em:updateURL>
-
- -

For add-ons hosted on addons.mozilla.org: You may not specify an updateURL property. By default, Mozilla applications using the Add-on Manager (such as Firefox and Thunderbird) will send update requests to addons.mozilla.org using the default web service. Every time you upload a new version of your add-on or change its compatibility parameters through the author interface, your update manifest will be generated automatically.

- -

Format of the Update Manifest: The Update Manifest is a RDF/XML datasource. For an example of an update manifest, see Extension Versioning, Update and Compatibility.

- -

updateKey

- -
{{ Gecko_minversion_header(1.9) }} {{ Fx_minversion_header(3) }}
- -

To ensure the security of update rdf data that is retrieved over plain http you must use a digital signature to verify the contents of the data. In order to do so you must include the public part of the cryptographic key in an updateKey entry in the install.rdf of the add-on. This can be generated using the McCoy tool. Any line breaks and whitespace as part of this entry are ignored.

- -
<em:updateKey>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj
-              Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD
-              NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf
-              awB/zH4KaPiY3vnrzQIDAQAB</em:updateKey>
-
- -

optionsURL

- -

The chrome:// URL of the extension's options dialog box. This is only useful to extensions. If this property is specified, when the extension is selected in the Extensions list, the Options button is enabled and will show this.

- -
<em:optionsURL>chrome://myext/content/options.xul</em:optionsURL>
- -

{{ gecko_minversion_note("7", "In Firefox 7 you can also simply include your options XUL as a file named options.xul, in the base directory of the add-on.") }}

- -

{{ h3_gecko_minversion("optionsType", 7) }}

- -

The type of user-interface used for displaying the options. Accepted values are:

- - - - - - - - - - - - - - - - -
1Opens optionsURL in a dialog box
2Options are displayed inside the Add-on Manager
3Opens optionsURL in a new tab (if the application supports that), or a dialog box
- -

optionsType defaults to 1 if there is an optionsURL included in install.rdf or 2 if there is no optionsURL and the file options.xul exists in the root of the add-on.

- -
<em:optionsType>2</em:optionsType>
-
- -

Open Options in New Tab {{ Gecko_minversion_header(7) }}

- -

Options can be opened in a new tab since Firefox 7.0a1. To do so, set optionsType to 3 and set optionsURL to a the path of a page to open.

- -
<em:optionsType>3</em:optionsType>
-<em:optionsURL>chrome://myaddon/content/options.html</em:optionsURL>
- -

This section here contains an example of localized HTML page as an option panel in a new tab: Bootstrapped Extensions :: Localization (L10n) (example linked to is: GitHub :: l10n-html-options)

- -

Make Options Button Execute Arbitrary Javascript

- -
-

This method is not recomended by AMO Editors, however it is noted here in case none of the default methods suit the developers needs. For example: Overlay a panel over Add-on Manager on click of options button

-
- -

If the default methods offered by optionsType does not fit your needs (see the table above), there is a last resort option. The method here is to use inline JavaScript and the observer service. The observer service is used to send a notification on click of the options button and then from your add-on, when you receive that notification, you can do whatever you want. For example, in the install.rdf we would have:

- -
<em:optionsType>2</em:optionsType>
-<em:optionsURL>javascript:Components.utils.import('resource://gre/modules/Services.jsm');Services.obs.notifyObservers(window, 'hellothisisyourcaptainspeaking', 'options'); window.close();</em:optionsURL>
- -

This sends a notification hellothisisyourcaptainspeaking and passes window to the listener. Notice the window.close() at the end of this inline script. This is important, because an invisible modal dialog is opened and this script runs in that context. So if you do not close the window, you will be stuck modal mode (clicks and key presses will not take). That's why we have to re-import the Services.jsm. Now in your add-on have a listener that does this:

- -
var observer = {
-  observe: function(aSubject, aTopic, aData) {
-    //do something here, such as insert panel element into addon manager and load your page in an iframe in this panel
-  }
-};
-
-Services.obs.addObserver(observer, "hellothisisyourcaptainspeaking", false);
-// Don't forget to remove your observer when your add-on is shut down.
- -

aboutURL

- -

The chrome:// URL of the extension's about dialog box. This is only useful to extensions. If this property is specified,  in the about:addons extensions list, the About... link in the extension's context menu will show this dialog, rather than the default.

- -
-

Note: As of {{Gecko("2.0")}}, the dialog receives the Addon object representing your add-on as a parameter.

-
- -

Examples

- -
<em:aboutURL>chrome://myext/content/about.xul</em:aboutURL>
-
- -

iconURL

- -

A chrome:// URL to an icon to display in the add-ons list. The icon will be displayed at 32x32 in Firefox 3.6 and lower. In Firefox 4.0 and later the icon can be up to 48x48 pixels in size. If this property is not specified, a default icon is used.

- -
<em:iconURL>chrome://myext/skin/icon.png</em:iconURL>
-
- -
Note: For the above example to work you will also have to add a skin package line to your chrome.manifest file. See Chrome Registration#skin. Alternatively you can place your icon in the directory specified in your content package line.
- -

{{ gecko_minversion_note("1.9.2", "Starting in Gecko 1.9.2 (Firefox 3.6), you can also simply include your icon, named icon.png, in the base directory of the add-on. This allows your add-on's icon to be displayed even when the add-on is disabled, or if the manifest is missing an iconURL entry.") }}

- -

{{ h3_gecko_minversion("icon64URL", "2.0") }}

- -

A chrome:// URL to a 64x64 pixel icon to display in the add-on's details view . If this property is not specified, the smaller icon above will be used.

- -
<em:icon64URL>chrome://myext/skin/icon64.png</em:icon64URL>
-
- -
Note: For the above example to work you will also have to add a skin package line to your chrome.manifest file. See Chrome Registration#skin. Alternatively you can place your icon in the directory specified in your content package line.
- -

{{ gecko_minversion_note("2.0", "Starting in Gecko 2.0 (Firefox 4.0), you can also simply include your icon, named icon64.png, in the base directory of the add-on. This allows your add-on's icon to be displayed even when the add-on is disabled, or if the manifest is missing an icon64URL entry.") }}

- -

{{ h3_gecko_minversion("targetPlatform", "1.8") }}

- -

A string specifying a platform that the add-on supports. It contains either the value of OS_TARGET alone or combined with TARGET_XPCOM_ABI, separated by an underscore (_).

- -

You can specify multiple targetPlatform properties per manifest. If any value matches the application's build parameters, it will be installed; if not, the user will get an appropriate error message.

- -

Examples

- -
<em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
-
-<em:targetPlatform>Linux</em:targetPlatform>
-
-<em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
-
-<em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
- -

Usually, you would use only the OS part for themes or for extensions that are not fully cross-platform. For extensions including binary (compiled) components, you should never use the OS alone, but include the ABI (s) that you compiled the components with. If you want to include multiple versions of the components, you should also use Platform-specific Subdirectories.

- -

Notes

- - - -

This property was added for Firefox/Thunderbird 1.5. Previous versions of these applications will ignore the restrictions and install the add-on regardless of the platform.

- -

{{ h3_gecko_minversion("strictCompatibility", "10.0") }}

- -

A Boolean value indicating if the add-on should be enabled when the version of the application is greater than its max version. By default, the value of this property is false meaning that the compatibility checking will not be performed against the max version.

- -
<em:strictCompatibility>true</em:strictCompatibility>
- -

Usually, there is no need to restrict the compatibility: not all new releases will break your extension and, if it is hosted on AMO, you'll get notice several weeks in advance if a potential risk has been detected. Moreover, an extension being disabled, even for a short period, leads to a bad experience for the user. About the only time you should need to set this if your add-on does things that are likely to be broken by Firefox updates. You do not need to set this flag if your add-on has a binary component, since add-ons with binary components are always subject to strict compatibility checking (because binary components need to be rebuilt for every major application release anyway).

- -
Note: If you want to restore the old behavior of strict compatibility checking of all add-ons, regardless of the value of this setting in their manifests, you can set the extensions.strictCompatibility preference to true.
- -
-

Note: Starting in {{Gecko("11.0")}}, applications such as Firefox will assume add-ons that have not been updated in a very long time are no longer compatible by default.

-
- -

{{ h3_gecko_minversion("multiprocessCompatible", "33.0") }}

- -

A Boolean value declaring whether this add-on is, or is not, compatible with multiprocess Firefox. If present and set to true, this flag instructs Firefox not to load various compatibility shims that enable many add-ons to work even when the add-on is not compatible with multiprocess Firefox:

- -
<em:multiprocessCompatible>true</em:multiprocessCompatible>
- -

The setting defaults to false, meaning that if you omit the property, the shims are loaded for your add-on.

- -

You can set this property to test whether your add-on is multiprocess compatible, or after you have ensured that it is multiprocess compatible. In some future release we will change the default to true,  and after that point incompatible add-ons will have to explicitly declare that they are not compatible.

- -

Obsolete Property Reference

- -

These properties were required in older versions of the Add-on Manager, but have been replaced with newer and better mechanisms.

- -

file

- -

Firefox 1.0 This property pointed to a chrome .jar file that contains chrome packages that require registration with the Chrome Registry.

- -

The <em:file> property has a complex object value. The uri of the value is urn:mozilla:extension:file:jarFile.jar where jarFile.jar is the name of the jar file that contains the chrome package's files. This could also be the name of a directory that contains the chrome package's files, un-jarred (e.g. urn:mozilla:extension:file:directory). In either case, the referenced chrome package file(s) must be placed in the chrome subdirectory of the XPI's top level.

- -

This object has a package property (with a path within the jar file or directory that leads to the location where the contents.rdf file responsible for registering that package is located), a locale property (ditto, but to register the locale) and a skin property (ditto, but to register the theme material).

- -

In extensions for Firefox 1.5, this property is no longer necessary: the chrome.manifest at the top level of the XPI is used to locate chrome to register. If there is no chrome.manifest, this property is still read by the Add-on Manager and a chrome.manifest is generated from old-style contents.rdf.

- -

Examples

- -
<em:file>
- <Description about="urn:mozilla:extension:file:myext.jar">
-  <em:package>content/myext/</em:package>
-  <em:locale>locale/en-US/myext/</em:locale>
-  <em:skin>skin/classic/myext/<em:skin>
- </Description>
-</em:file>
-
- -

An Install Manifest may specify multiple file properties, one for each jar file or subdirectory that contains chrome to register.

- -

hidden

- -

Firefox 1.0 - 3.5 A boolean value that when true makes the add-on not show up in the add-ons list, provided the add-on is installed in a {{ Anch("restricted access area") }} (so it does not work for add-ons installed in the profile). This is for bundling integration hooks to larger applications where having an entry in the Extensions list does not make sense.

- -
Note: This property is no longer supported under Gecko 1.9.2 (Firefox 3.6) or later, to prevent extensions from being installed in such a way that the user might not be able to tell they're installed.
- -

Examples

- -
<em:hidden>true</em:hidden>
-
- -

requires

- -

Firefox 2.0 - 3.6.x. Other versions will ignore the restrictions and install the add-on regardless of the requirements.

- -

See Replacement for install.rdf property "requires" discussion for rationale behind removing this feature and the suggested workaround.

- -

<em:requires> has a similar syntax to the <em:targetApplication> tag (i.e. you must specify <em:id>, <em:minVersion>, <em:maxVersion> when using it). If the add-on specified by the <em:id> tag is not installed or has an incompatible version, the extension manager will disable your extension and show the message "Requires additional items". You can add as many <em:requires> tags as you like. Your extension will be disabled if any of the specified requirements fail. It is not possible to add dependencies that are specific to a <em:targetApplication>. See Extension Dependencies for more details.

- -

Glossary

- -

restricted access area

- -

A restricted access area is an install location that could be restricted on a restricted-access account, regardless of whether or not the location is restricted with the current user privileges (see {{ Source("toolkit/mozapps/extensions/public/nsIExtensionManager.idl#80", "nsIInstallLocation::restricted") }}). Currently, the ($APPDIR)/extensions folder and the registry install location under HKEY_LOCAL_MACHINE (see Adding Extensions using the Windows Registry for details) are restricted.

- -

The ($PROFILE)/extensions and HKEY_CURRENT_USER install locations, on the other hand, are not restricted.

diff --git a/files/fr/mozilla/add-ons/nous_contacter/index.html b/files/fr/mozilla/add-ons/nous_contacter/index.html deleted file mode 100644 index b15844c18c..0000000000 --- a/files/fr/mozilla/add-ons/nous_contacter/index.html +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Nous contacter -slug: Mozilla/Add-ons/nous_contacter -tags: - - Add-ons - - Extension - - Extensions - - Mozilla -translation_of: Mozilla/Add-ons/Contact_us ---- -

{{AddonSidebar}}

- -

Utilisez les liens ci-dessous pour obtenir de l'aide, pour vous tenir au courant des actualités des add-ons et pour nous faire part de vos commentaires.

- -

Forum des add-ons

- -

Utilisez le forum Discourse Add-ons pour discuter de tous les aspects du développement d'add-on et demander de l'aide.

- -

Mailing listes

- -

Utilisez la liste dev-addons pour discuter du développement de l'écosystème des add-ons, y compris le système WebExtensions et addons.mozilla.org:

- - - -

Chat

- -

Matrix est un protocole ouvert et léger pour les communications décentralisées en temps réel. Pour plus d'informations sur la manière de rejoindtre l'instance Matrix de Mozilla, reportez-vous à la page Matrix sur MozillaWiki.

- - - -

Signaler des problèmes

- -

Vulnérabilités de sécurité

- -

Si vous découvrez une vulnérabilité de sécurité d'un add-on, même si l'add-on n'est pas hébergé sur un site Mozilla, veuillez nous en informer. Nous travaillerons avec le développeur pour corriger le problème. Veuillez signaler les failles de sécurité de manière confidentielle dans Bugzilla ou par e-mail à amo-admins@mozilla.com.

- -

Bugs sur addons.mozilla.org (AMO)

- -

Si vous rencontrez un problème avec le site, nous serions ravis de le résoudre. Veuillez déposer un rapport de bug et inclure autant de détails que possible.

diff --git a/files/fr/mozilla/add-ons/performance_best_practices_in_extensions/index.html b/files/fr/mozilla/add-ons/performance_best_practices_in_extensions/index.html deleted file mode 100644 index f7043ecc70..0000000000 --- a/files/fr/mozilla/add-ons/performance_best_practices_in_extensions/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Bonnes pratiques pour la performance des extensions -slug: Mozilla/Add-ons/Performance_best_practices_in_extensions -tags: - - Bonnes pratiques - - Exemple nécessaire - - Extensions - - Guide - - Performance -translation_of: Archive/Add-ons/Performance_best_practices_in_extensions ---- -

Un des grands avantages de Firefox est son extrême extensibilité. Les extensions peuvent faire presque tout. Toutefois, il y a un revers à cela : des extensions mal écrites peuvent avoir des conséquences graves sur l'usage de la navigation, y compris sur la performance globale de Firefox. Cet article propose quelques bonnes pratiques et recommandations qui peuvent non seulement améliorer la performance et la vitesse de votre extension, mais aussi de Firefox lui-même.

- -

Améliorer les performances du démarrage

- -

Les extensions sont chargées et exécutées dès que s'ouvre une nouvelle fenêtre du navigateur. Cela signifie qu'à chaque fois qu'une fenêtre s'ouvre, votre extension peut avoir une incidence sur la durée de visualisation du contenu. Plusieurs procédés sont possibles  pour réduire le délai d'attente d'affichage des contenus provoqué par votre extension.

- -

Chargez seulement ce dont vous avez besoin quand vous en avez besoin

- -

Ne chargez pas lors du démarrage les ressources qui ne seront nécessaires que lorsque l'utilisateur cliquera sur un bouton, ou qu'une préférence donnée sera activée alors qu'elle ne l'est pas encore. De la même façon, si votre extension dispose de caractéristiques qui s'exécutent uniquement quand l'utilisateur est identifié à un service, n'en chargez pas les ressources avant qu'il ne soit réellement connecté.

- -

Utilisez les modules de code JavaScript

- -

Vous pouvez créer vos propres modules de code JavaScript regroupant les fonctionnalités nécessaires dans des circonstances précises. Cela permet de charger votre extension par grand bloc à la volée au cas par cas, au lieu de tout charger à la fois.

- -

Bien que les modules JavaScript puissent être extrêmement utiles et offrir des avantages de performance significatifs, ils doivent être utilisés à bon escient. Le chargement des modules engage peu de coût, donc segmenter le code jusqu'à un degré inutile peut être contre-productif. Le code devrait être modulaire, à souhait, ce qui augmente la clarté et le chargement des morceaux importants ou coûteux de fragments de code, s'ils peuvent être différés d'une façon significative.

- -

Différez tout ce que vous pouvez

- -

La plupart des extensions ont un auditeur d'événements de chargement dans leur séquence principale qui exécute les fonctions de démarrage. Faites-en le moins possible à cet endroit. La fenêtre du navigateur est bloquée pendant que le gestionnaire de chargement de votre extension fonctionne, ainsi plus il tarde dans cette opération, plus Firefox semblera lent à l'utilisateur.

- -

S'il y a quelque chose qui peut être fait, même en une fraction de seconde plus tard, vous pouvez utiliser les méthodes {{ interface("nsITimer") }} ou {{ domxref("window.setTimeout()") }} pour planifier une exécution différée. Même un court report peut avoir un grand impact.

- -

Conseils sur les performances générales

- -

Évitez de créer des fuites de mémoire

- -

Les fuites de mémoire exigent du ramasse-miette et du collecteur de cycle un travail plus intense qui peut de manière significative dégrader les performances.

- -

Les compartiments zombie sont un type particulier de fuite mémoire que vous pouvez détecter avec un minimum d'effort. Consultez la page Compartiments zombie, particulièrement la section Vérification proactive des extensions.

- -

Consultez les Causes classiques de fuites de mémoire dans les extensions afin d'éviter les compartiments zombie et d'autres genres de fuites.

- -

Aussi bien que la recherche de ces types spécifiques de fuite, il vaut la peine de s'exercer sur les fonctionnalités de votre extension et d'examiner le contenu de la mémoire pour s'assurer de toute utilisation excessive. Par exemple, le bug 719601 de Firefox a indiqué un compartiment JavaScript « Système principal » contenant des centaines de Mo de mémoire, ce qui est beaucoup plus important qu'habituellement.

- -

Évitez l'écriture de CSS lent

- - - -

Évitez les auditeurs d'événements de mutation dans un DOM

- -

Les auditeurs d'événements de mutation sont extrêmement consommateurs de temps, une fois ajoutés même brièvement à un document, ils nuisent de manière significative à sa performance.

- -

Les événements de mutation sont officiellement obsolètes, et il existe denombreuses alternatives ; ils devraient donc être évités à tout prix.

- -

Chargez les services en mode paresseux

- -

Le module XPCOMUtils JavaScript fournit deux méthodes pour le chargement lent de ressources :

- - - -

Beaucoup de services communs sont déjà mis en cache pour vous dans Services.jsm.

- -

Utilisez les entrées-sorties en asynchrone

- -

Cela ne peut pas être suffisamment souligné : ne jamais faire d'entrées-sorties dans une tâche principale.

- -

N'importe quel genre d'entrée-sortie dans un traitement principal, que ce soit l'entrée-sortie de disque ou de réseau, peut causer les questions sérieuses de réactivité de l'unité centrale.

- - - -

Évitez les événements de mouvement de souris

- -

Évitez d'utiliser les auditeurs d'événement de souris, y compris le mouseover, le mouseout, le mouseenter, le mouseexit, et particulièrement le mousemove. Ces événements se produisent avec la haute fréquence, ainsi leurs auditeurs peuvent trivialement créer des surcharges très élevées de l'unité centrale .

- -

Quand ces événements ne peuvent pas être évités, pendant le calcul, les auditeurs devraient être maintenus à un minimum et à un travail réel restreint. Les auditeurs devraient être ajoutés à l'élément le plus spécifique possible, et être enlevés lorsqu'ils ne sont pas immédiatement nécessaires.

- -

Évitez les images animées

- -

Généralement les images animées sont beaucoup plus consommatrices de temps que prévu, particulièrement lorsqu'elles sont utilisées dans l'élément XUL {{ XULElem("tree") }}.

- -

Envisagez d'utiliser les exécuteurs du Chrome

- -

Vous pouvez utiliser l'élément {{ domxref("ChromeWorker") }} pour exécuter des tâches de longue durée ou faire du traitement de données.

- -

Consulter aussi

- - diff --git a/files/fr/mozilla/add-ons/plugins/index.html b/files/fr/mozilla/add-ons/plugins/index.html deleted file mode 100644 index c978874fe1..0000000000 --- a/files/fr/mozilla/add-ons/plugins/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Plugins -slug: Mozilla/Add-ons/Plugins -translation_of: Archive/Plugins ---- -
-

Important: Since Firefox 52, all plugin support except Flash has been dropped (see Plug-in support has been dropped other than Flash for more details). Flash usage is also set to be phased out in the future.

-
- -
-

Note: Plugins are now a legacy technology. They are not available on most mobile devices. Mozilla encourages website developers to avoid using plugins wherever possible and use standard Web APIs instead. If there are plugin features which are not available in the web platform, we encourage developers to post their use cases to mozilla.dev.platform project list, so that Mozilla can prioritize web platform work to make those use cases possible.

-
- -

For more information about plugin roadmap, see non-archived plugin information.

- -

Plugins are shared libraries that users can install to display content that the browser can't display natively. For example, the Adobe Reader plugin lets the user open PDF files directly inside the browser, and the QuickTime and RealPlayer plugins are used to play special format videos in a web page.

- -

Plugins are written using NPAPI, the cross-browser API for plugins. The main source of documentation for NPAPI is the Gecko Plugin API Reference. To make your plugin scriptable from web pages, use npruntime.

- -

Plugins can be written completely from scratch using C APIs (usually in C or C++) or they may be built on a plugin framework such as Firebreath, JUCE, or QtBrowserPlugin. There are also some code generation tools that may be helpful. More information about these tools can be found on the External Resources page.

- -

Plugins are different from extensions, which modify or enhance the functionality of the browser itself. Plugins are also different from search plugins, which plug additional search engines in the search bar.

- -
-
-
-
-
Gecko Plugin API Reference (NPAPI)
-
This reference describes the application programming interfaces for NPAPI plugins and provides information about how to use these interfaces.
-
Site Author Guide For Click-To-Activate Plugins
-
These guidelines will help website authors use plugins when they are blocked by default with the Firefox click-to-activate feature.
-
- -
-
Scripting plugins (npruntime)
-
This reference describes the new cross-browser NPAPI extensions that let plugins be scriptable and also let them access the script objects in the browser.
-
- -
-
Shipping a plugin as a Toolkit bundle
-
Plugins can be shipped as a Toolkit bundle, allowing a user to easily install, uninstall and manage their personal plugins.
-
- -
-
Supporting private browsing in plugins
-
Firefox 3.5 introduced support for private browsing; learn how to make your plugin respect the user's privacy wishes.
-
Multi-Process Plugin Architecture
-
How Firefox loads plugins into a separate process. Firefox 3.6.4 introduced out-of-process plugins which execute in a separate process so that a crashing plugin does not crash the browser.
-
Logging and Debugging for Multi-Process Plugins
-
How to create a plugin log to aid in debugging problems with multi-process plugins.
-
-
- -
-
-
Writing a plugin for Mac OS X
-
Learn how to write a plugin for Mac OS X; a template Xcode project is provided.
-
- -
-
Monitoring Plugins
-
Use an observer service notification to monitor the amount of time spent executing calls in plugins. This can be useful when trying to determine if a plug-in is consuming too many resources.
-
- -
-
Scripting Plugins: Macromedia Flash
-
This article explains how JavaScript can be used to access methods from within the Flash plugin, as well as how a feature called FSCommands can be used to access JavaScript functions from within the Flash animation.
-
- -
-
Plugins: The First Install Problem
-
The First Install Problem is the name given to the conditions arising when a plugin or embeddable software installs itself on a system first, before any other Gecko-based browser.
-
- -
-
Plugins: Samples and Test Cases
-
NPAPI plugin samples and test cases.
-
External Resources for Plugin Creation
-
External projects, frameworks, and blog posts that may be useful.
-
- -
-
XEmbed Extension for Mozilla Plugins
-
Recent versions of Mozilla on *nix-based systems include an extension for writing plugins that use XEmbed instead of using the old Xt-based main loop that most plugins have been using since the Netscape 3.x days.
-
-
-
- -
-

Categories

- -

Interwiki Language Links

- -
-
-

Join the plugin development community

- -
-
Choose your preferred method for joining the discussion:
- - -
- -
-
-
diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/base64/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/base64/index.html deleted file mode 100644 index f4d71166d9..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/base64/index.html +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: base64 -slug: Mozilla/Add-ons/SDK/High-Level_APIs/base64 -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/base64 ---- -

 Le codage des données et le décodage en utilisant des algorithmes Base64.
-
- var base64 = require ("sdk / base64");
-  
- var encodedData = base64.encode ("Bonjour, monde»);
- var decodedData = base64.decode (encodedData);

- -
-
Les fonctions
-encode (données, charset)
-
-Crée une chaîne de caractères ASCII de base 64 codé à partir d'une chaîne de données binaires.
-Paramètres
-
-données: string
-Les données pour coder
-
-charset: string
-Le charset de la chaîne à coder (en option). La seule valeur acceptée est "utf-8". Pour coder et décoder les chaînes Unicode, le paramètre charset doit être réglé:
-
-var base64 = require ("sdk / base64");
-
-var encodedData = base64.encode (UnicodeString, "utf-8");
-
-résultats
-
-string: La chaîne codée
-decode (données, charset)
-
-Décode une chaîne de données qui a été codé en utilisant la base 64 codage.
-Paramètres
-
-données: string
-Les données codées
-
-charset: string
-Le charset de la chaîne à coder (en option). La seule valeur acceptée est "utf-8". Pour coder et décoder les chaînes Unicode, le paramètre charset doit être réglé:
-
-var base64 = require ("sdk / base64");
-
-var decodedData = base64.decode (encodedData, "utf-8");
-
-résultats
-
-string: La chaîne décodée (encodedData);
-
- -
-

{{AddonSidebar}}

-
- -
-

Unstable

-
- -

Data encoding and decoding using Base64 algorithms.

- -
var base64 = require("sdk/base64");
-
-var encodedData = base64.encode("Hello, World");
-var decodedData = base64.decode(encodedData);
- -

Globals

- -

Functions

- -

encode(data, charset)

- -

Creates a base-64 encoded ASCII string from a string of binary data.

- -
Parameters
- -

data : string
- The data to encode

- -

charset : string
- The charset of the string to encode (optional). The only accepted value is "utf-8". In order to encode and decode Unicode strings, the charset parameter needs to be set:

- -
var base64 = require("sdk/base64");
-
-var encodedData = base64.encode(unicodeString, "utf-8");
-
- -
Returns
- -

string : The encoded string

- -

decode(data, charset)

- -

Decodes a string of data which has been encoded using base-64 encoding.

- -
Parameters
- -

data : string
- The encoded data

- -

charset : string
- The charset of the string to encode (optional). The only accepted value is "utf-8". In order to encode and decode Unicode strings, the charset parameter needs to be set:

- -
var base64 = require("sdk/base64");
-
-var decodedData = base64.decode(encodedData, "utf-8");
- -
Returns
- -

string : The decoded string

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html deleted file mode 100644 index 9af486cc64..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html +++ /dev/null @@ -1,833 +0,0 @@ ---- -title: context-menu -slug: Mozilla/Add-ons/SDK/High-Level_APIs/context-menu -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/context-menu ---- -

{{AddonSidebar}}

- -
-

Stable

-
- -

Ajouez des éléments, sous-menus et des séparateurs au menu contextuel.

- -

Usage

- -

Instead of manually adding items when particular contexts occur and then removing them when those contexts go away, you bind items to contexts, and the adding and removing is automatically handled for you. Items are bound to contexts in much the same way that event listeners are bound to events. When the user invokes the context menu, all of the items bound to the current context are automatically added to the menu. If no items are bound, none are added. Likewise, any items that were previously in the menu but are not bound to the current context are automatically removed from the menu. You never need to manually remove your items from the menu unless you want them to never appear again.

- -

For example, if your add-on needs to add a context menu item whenever the user visits a certain page, don't create the item when that page loads, and don't remove it when the page unloads. Rather, create your item only once and supply a context that matches the target URL.

- -

Context menu items are displayed in the order created or in the case of sub menus the order added to the sub menu. Menu items for each add-on will be grouped together automatically. If the total number of menu items in the main context menu from all add-ons exceeds a certain number (normally 10 but configurable with the extensions.addon-sdk.context-menu.overflowThreshold preference) all of the menu items will instead appear in an overflow menu to avoid making the context menu too large.

- -

Specifying contexts

- -

As its name implies, the context menu should be reserved for the occurrence of specific contexts. Contexts can be related to page content or the page itself, but they should never be external to the page.

- -

For example, a good use of the menu would be to show an "Edit Image" item when the user right-clicks an image in the page. A bad use would be to show a submenu that listed all the user's tabs, since tabs aren't related to the page or the node the user clicked to open the menu.

- -

The page context

- -

First of all, you may not need to specify a context at all. When a top-level item does not specify a context, the page context applies. An item that is in a submenu is visible unless you specify a context.

- -

The page context occurs when the user invokes the context menu on a non-interactive portion of the page. Try right-clicking a blank spot in this page, or on text. Make sure that no text is selected. The menu that appears should contain the items "Back", "Forward", "Reload", "Stop", and so on. This is the page context.

- -

The page context is appropriate when your item acts on the page as a whole. It does not occur when the user invokes the context menu on a link, image, or other non-text node, or while a selection exists.

- -

Declarative contexts

- -

You can specify some simple, declarative contexts when you create a menu item by setting the context property of the options object passed to its constructor, like this:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "My Menu Item",
-  context: cm.URLContext("*.mozilla.org")
-});
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
PageContext() The page context.
SelectionContext() This context occurs when the menu is invoked on a page in which the user has made a selection.
SelectorContext(selector) This context occurs when the menu is invoked on a node that either matches selector, a CSS selector, or has an ancestor that matches. selector may include multiple selectors separated by commas, e.g., "a[href], img".
URLContext(matchPattern) This context occurs when the menu is invoked on pages with particular URLs. matchPattern is a match pattern string or an array of match pattern strings. When matchPattern is an array, the context occurs when the menu is invoked on a page whose URL matches any of the patterns. These are the same match pattern strings that you use with the page-mod include property. Read more about patterns.
PredicateContext(predicateFunction)predicateFunction is called when the menu is invoked, and the context occurs when the function returns a true value. The function is passed an object with properties describing the menu invocaton context.
arrayAn array of any of the other types. This context occurs when all contexts in the array occur.
- -

Menu items also have a context property that can be used to add and remove declarative contexts after construction. For example:

- -
var context = require("sdk/context-menu").SelectorContext("img");
-myMenuItem.context.add(context);
-myMenuItem.context.remove(context);
- -

When a menu item is bound to more than one context, it appears in the menu when all of those contexts occur.

- -

In content scripts

- -

The declarative contexts are handy but not very powerful. For instance, you might want your menu item to appear for any page that has at least one image, but declarative contexts won't help you there.

- -

When you need more control over the context in which your menu items are shown, you can use content scripts. Like other APIs in the SDK, the context-menu API uses content scripts to let your add-on interact with pages in the browser. Each menu item you create in the top-level context menu can have a content script.

- -

A special event named "context" is emitted in your content scripts whenever the context menu is about to be shown. If you register a listener function for this event and it returns true, the menu item associated with the listener's content script is shown in the menu.

- -

For example, this item appears whenever the context menu is invoked on a page that contains at least one image:

- -
require("sdk/context-menu").Item({
-  label: "This Page Has Images",
-  contentScript: 'self.on("context", function (node) {' +
-                 '  return !!document.querySelector("img");' +
-                 '});'
-});
- -

Note that the listener function has a parameter called node. This is the node in the page that the user context-clicked to invoke the menu. You can use it to determine whether your item should be shown.

- -

You can both specify declarative contexts and listen for contexts in a content script. Your context listener is called even if any declarative contexts are not current (since Firefox 36).

- -

If you combine SelectorContext and the "context" event, be aware that the node argument passed to the "context" event will not always match the type specified in SelectorContext.

- -

SelectorContext will match if the menu is invoked on the node specified or any descendant of that node, but the "context" event handler is passed the actual node on which the menu was invoked. The example above works because <IMG> elements can't contain other elements, but in the example below, node.nodeName is not guaranteed to be "P" - for example, it won't be "P" if the user context-clicked a link inside a paragraph:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "A Paragraph",
-  context: cm.SelectorContext("p"),
-  contentScript: 'self.on("context", function (node) {' +
-                 '  console.log(node.nodeName);' +
-                 '  return true;' +
-                 '});'
-});
- -

The content script is executed for every page that a context menu is shown for. It will be executed the first time it is needed (i.e. when the context menu is first shown and all of the declarative contexts for your item are current) and then remains active until you destroy your context menu item or the page is unloaded.

- -

Handling menu item clicks

- -

In addition to using content scripts to listen for the "context" event as described above, you can use content scripts to handle item clicks. When the user clicks your menu item, an event named "click" is emitted in the item's content script.

- -

Therefore, to handle an item click, listen for the "click" event in that item's content script like so:

- -
require("sdk/context-menu").Item({
-  label: "My Item",
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  console.log("Item clicked!");' +
-                 '});'
-});
- -

Note that the listener function has parameters called node and data.

- -

The "node" argument

- -

node is the node that the user context-clicked to invoke the menu.

- - - -

For example, suppose your add-on looks like this:

- -
var script = "self.on('click', function (node, data) {" +
-             "  console.log('clicked: ' + node.nodeName);" +
-             "});";
-
-var cm = require("sdk/context-menu");
-
-cm.Item({
-  label: "body context",
-  context: cm.SelectorContext("body"),
-  contentScript: script
-});
- -

This add-on creates a context-menu item that uses SelectorContext to display the item whenever the context menu is activated on any descendant of the <BODY> element. When clicked, the item just logs the nodeName property for the node passed to the click handler.

- -

If you run this add-on you'll see that it always logs "BODY", even if you click on a paragraph element inside the page:

- -
info: contextmenu-example: clicked: BODY
- -

By contrast, this add-on uses the PageContext:

- -
var script = "self.on('click', function (node, data) {" +
-             "  console.log('clicked: ' + node.nodeName);" +
-             "});";
-
-var cm = require("sdk/context-menu");
-
-cm.Item({
-  label: "body context",
-  context: cm.PageContext(),
-  contentScript: script
-});
- -

It will log the name of the actual node clicked:

- -
info: contextmenu-example: clicked: P
- -

The "data" Argument

- -

data is the data property of the menu item that was clicked. Note that when you have a hierarchy of menu items the click event will be sent to the content script of the item clicked and all ancestors so be sure to verify that the data value passed matches the item you expect. You can use this to simplify click handling by providing just a single click listener on a Menu that reacts to clicks for any child items.:

- -
var cm = require("sdk/context-menu");
-cm.Menu({
-  label: "My Menu",
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  console.log("You clicked " + data);' +
-                 '});',
-  items: [
-    cm.Item({ label: "Item 1", data: "item1" }),
-    cm.Item({ label: "Item 2", data: "item2" }),
-    cm.Item({ label: "Item 3", data: "item3" })
-  ]
-});
-
- -

Communicating With the Add-on

- -

Often you will need to collect some kind of information in the click listener and perform an action unrelated to content. To communicate to the menu item associated with the content script, the content script can call the postMessage function attached to the global self object, passing it some JSON-able data. The menu item's "message" event listener will be called with that data.

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Edit Image",
-  context: cm.SelectorContext("img"),
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  self.postMessage(node.src);' +
-                 '});',
-  onMessage: function (imgSrc) {
-    openImageEditor(imgSrc);
-  }
-});
- -

Updating a menu item's label

- -

Each menu item must be created with a label, but you can change its label later using a couple of methods.

- -

The simplest method is to set the menu item's label property. This example updates the item's label based on the number of times it's been clicked:

- -
var numClicks = 0;
-var myItem = require("sdk/context-menu").Item({
-  label: "Click Me: " + numClicks,
-  contentScript: 'self.on("click", self.postMessage);',
-  onMessage: function () {
-    numClicks++;
-    this.label = "Click Me: " + numClicks;
-    // Setting myItem.label is equivalent.
-  }
-});
- -

Sometimes you might want to update the label based on the context. For instance, if your item performs a search with the user's selected text, it would be nice to display the text in the item to provide feedback to the user. In these cases you can use the second method. Recall that your content scripts can listen for the "context" event and if your listeners return true, the items associated with the content scripts are shown in the menu. In addition to returning true, your "context" listeners can also return strings. When a "context" listener returns a string, it becomes the item's new label.

- -

This item implements the aforementioned search example:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Search Google",
-  context: cm.SelectionContext(),
-  contentScript: 'self.on("context", function () {' +
-                 '  var text = window.getSelection().toString();' +
-                 '  if (text.length > 20)' +
-                 '    text = text.substr(0, 20) + "...";' +
-                 '  return "Search Google for " + text;' +
-                 '});'
-});
- -

The "context" listener gets the window's current selection, truncating it if it's too long, and includes it in the returned string. When the item is shown, its label will be "Search Google for text", where text is the truncated selection.

- -

You can also get the selected text using the High Level selection API.

- -
var selection = require("sdk/selection");
- -

and within the contentScript, reference the selected text as selection.text

- -

Private windows

- -

If your add-on has not opted into private browsing, then any menus or menu items that you add will not appear in context menus belonging to private browser windows.

- -

To learn more about private windows, how to opt into private browsing, and how to support private browsing, refer to the documentation for the private-browsing module.

- -

More examples

- -

For conciseness, these examples create their content scripts as strings and use the contentScript property. In your own add-on, you will probably want to create your content scripts in separate files and pass their URLs using the contentScriptFile property. See Working with Content Scripts for more information.

- -
-

Warning: Unless your content script is extremely simple and consists only of a static string, don't use contentScript: if you do, you may have problems getting your add-on approved on AMO.

- -

Instead, keep the script in a separate file and load it using contentScriptFile. This makes your code easier to maintain, secure, debug and review.

-
- -

Show an "Edit Page Source" item when the user right-clicks a non-interactive part of the page:

- -
require("sdk/context-menu").Item({
-  label: "Edit Page Source",
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  self.postMessage(document.URL);' +
-                 '});',
-  onMessage: function (pageURL) {
-    editSource(pageURL);
-  }
-});
- -

Show an "Edit Image" item when the menu is invoked on an image:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Edit Image",
-  context: cm.SelectorContext("img"),
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  self.postMessage(node.src);' +
-                 '});',
-  onMessage: function (imgSrc) {
-    openImageEditor(imgSrc);
-  }
-});
- -

Show an "Edit Mozilla Image" item when the menu is invoked on an image in a mozilla.org or mozilla.com page:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Edit Mozilla Image",
-  context: [
-    cm.URLContext(["*.mozilla.org", "*.mozilla.com"]),
-    cm.SelectorContext("img")
-  ],
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  self.postMessage(node.src);' +
-                 '});',
-  onMessage: function (imgSrc) {
-    openImageEditor(imgSrc);
-  }
-});
- -

Show an "Edit Page Images" item when the page contains at least one image:

- -
var cm = require("sdk/context-menu");
-cm.Item({
-  label: "Edit Page Images",
-  // This ensures the item only appears during the page context.
-  context: cm.PageContext(),
-  contentScript: 'self.on("context", function (node) {' +
-                 '  var pageHasImgs = !!document.querySelector("img");' +
-                 '  return pageHasImgs;' +
-                 '});' +
-                 'self.on("click", function (node, data) {' +
-                 '  var imgs = document.querySelectorAll("img");' +
-                 '  var imgSrcs = [];' +
-                 '  for (var i = 0 ; i < imgs.length; i++)' +
-                 '    imgSrcs.push(imgs[i].src);' +
-                 '  self.postMessage(imgSrcs);' +
-                 '});',
-  onMessage: function (imgSrcs) {
-    openImageEditor(imgSrcs);
-  }
-});
- -

Show a "Search With" menu when the user right-clicks an anchor that searches Google or Wikipedia with the text contained in the anchor:

- -
var cm = require("sdk/context-menu");
-var googleItem = cm.Item({
-  label: "Google",
-  data: "http://www.google.com/search?q="
-});
-var wikipediaItem = cm.Item({
-  label: "Wikipedia",
-  data: "http://en.wikipedia.org/wiki/Special:Search?search="
-});
-var searchMenu = cm.Menu({
-  label: "Search With",
-  context: cm.SelectorContext("a[href]"),
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  var searchURL = data + node.textContent;' +
-                 '  window.location.href = searchURL;' +
-                 '});',
-  items: [googleItem, wikipediaItem]
-});
- -

To create sub-menus, one of the items in your main menu must be defined as a menu.

- -
var cm = require("sdk/context-menu");
-var googleItem = cm.Item({
-  label: "Google",
-  data: "http://www.google.com/search?q="
-});
-var wikipediaItem = cm.Item({
-  label: "Wikipedia",
-  data: "http://en.wikipedia.org/wiki/Special:Search?search="
-});
-var bingItem = cm.Item({
-  label: "Bing",
-  data: "http://www.bing.com/search?q="
-});
-var yahooItem = cm.Item({
-  label: "Yahoo",
-  data: "https://search.yahoo.com/search?p="
-});
-var moreMenu = cm.Menu({
-  label: "More Search",
-  items: [bingItem, yahooItem]
-});
-var searchMenu = cm.Menu({
-  label: "Search With",
-  context: cm.SelectorContext("a[href]"),
-  contentScript: 'self.on("click", function (node, data) {' +
-                 '  var searchURL = data + node.textContent;' +
-                 '  window.location.href = searchURL;' +
-                 '});',
-  items: [googleItem, wikipediaItem, moreMenu]
-});
- -

If you need a tooltip:

- -

tooltip

- -

First you need a dummy menu item that will serve as a trigger and subsequently will add the tooltips to the actual menu items.

- -

It is easy to find out which menu items are constructed by the addon-sdk module because they have the class addon-context-menu-item. The difficult part it to identify those that belong to your extension.

- -

One way to achieve this it to utilize the data attribute of Item class constructor, which conveniently maps to the value attribute of the underlying xul element.

- -

So if data consists of unique prefix and the desired tooltip text, it is just a matter of kicking in the right moment.

- -
const { getMostRecentBrowserWindow } = require("sdk/window/utils");
-
-var cm = require("sdk/context-menu");
-var uuid = require('sdk/util/uuid').uuid();
-var uuidstr = uuid.number.substring(1,37);
-
-cm.Item({
-  data: uuidstr+"This is a tooltip",
-  label: "Just a tigger, will never show up",
-  contentScript: 'self.on("context", function(){self.postMessage(); return false;})',
-  onMessage: function(){
-    var cmitems = getMostRecentBrowserWindow().document.querySelectorAll(".addon-context-menu-item[value^='"+ uuidstr +"']");
-    for(var i=0; i < cmitems.length; i++)
-      cmitems[i].tooltipText = cmitems[i].value.substring(36);
-  }
-});
- -

 

- -

Globals

- -

Constructors

- -

Item(options)

- -

Creates a labeled menu item that can perform an action when clicked.

- -
Parameters
- -

options : object
- Required options:

- - - - - - - - - - - - - - - - -
NameType 
labelstring -

The item's label. It must either be a string or an object that implements toString().

-
- -

Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
imagestring -

The item's icon, a string URL. The URL can be remote, a reference to an image in the add-on's data directory, or a data URI.

-
datastring -

An optional arbitrary value to associate with the item. It must be either a string or an object that implements toString(). It will be passed to click listeners.

-
accesskeysingle-character string -
-

New in Firefox 35.

-
- -

Access key for the item. Pressing this key selects the item when the context menu is open.

-
contextvalue -

If the item is contained in the top-level context menu, this declaratively specifies the context under which the item will appear; see Specifying Contexts above.

-
contentScriptstring,array -

If the item is contained in the top-level context menu, this is the content script or an array of content scripts that the item can use to interact with the page.

-
contentScriptFilestring,array -

If the item is contained in the top-level context menu, this is the local file URL of the content script or an array of such URLs that the item can use to interact with the page.

-
onMessagefunction -

If the item is contained in the top-level context menu, this function will be called when the content script calls self.postMessage. It will be passed the data that was passed to postMessage.

-
- - - -

Creates a labeled menu item that expands into a submenu.

- -
Parameters
- -

options : object
- Required options:

- - - - - - - - - - - - - - - - - - - - - -
NameType 
labelstring -

The item's label. It must either be a string or an object that implements toString().

-
itemsarray -

An array of menu items that the menu will contain. Each must be an Item, Menu, or Separator.

-
- -

Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
imagestring -

The menu's icon, a string URL. The URL can be remote, a reference to an image in the add-on's data directory, or a data URI.

-
contextvalue -

If the menu is contained in the top-level context menu, this declaratively specifies the context under which the menu will appear; see Specifying Contexts above.

-
contentScriptstring,array -

If the menu is contained in the top-level context menu, this is the content script or an array of content scripts that the menu can use to interact with the page.

-
contentScriptFilestring,array -

If the menu is contained in the top-level context menu, this is the local file URL of the content script or an array of such URLs that the menu can use to interact with the page.

-
onMessagefunction -

If the menu is contained in the top-level context menu, this function will be called when the content script calls self.postMessage. It will be passed the data that was passed to postMessage.

-
- -

Separator()

- -

Creates a menu separator.

- -

PageContext()

- -

Creates a page context. See Specifying Contexts above.

- -

SelectionContext()

- -

Creates a context that occurs when a page contains a selection. See Specifying Contexts above.

- -

SelectorContext(selector)

- -

Creates a context that matches a given CSS selector. See Specifying Contexts above.

- -
Parameters
- -

selector : string
- A CSS selector.

- -

URLContext(matchPattern)

- -

Creates a context that matches pages with particular URLs. See Specifying Contexts above.

- -
Parameters
- -

matchPattern : string,array
- A match pattern string, regexp or an array of match pattern strings or regexps.

- -

PredicateContext(predicateFunction)

- -
-

New in Firefox 29

-
- -

Creates a context that occurs when predicateFunction returns a true value. See Specifying Contexts above.

- -
Parameters
- -

predicateFunction : function(context)
- A function which will be called with an object argument that provide information about the invocation context. context object properties:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
documentTypeThe MIME type of the document the menu was invoked in. E.g. text/html for HTML pages, application/xhtml+xml for XHTML, or image/jpeg if viewing an image directly.
documentURLThe URL of the document the menu was invoked in.
targetNameThe name of the DOM element that the menu was invoked on, in lower-case.
targetIDThe id attribute of the element that the menu was invoked on, or null if not set.
isEditabletrue if the menu was invoked in an editable element, and that element isn't disabled or read-only.  This includes non-input elements with the contenteditable attribute set to true.
selectionTextThe current selection as a text string, or null. If the menu was invoked in an input text box or area, this is the selection of that element, otherwise the selection in the contents of the window.
srcURLThe src URL of the element that the menu was invoked on, or null if it doesn't have one.
linkURLThe href URL of the element that the menu was invoked on, or null if it doesn't have one.
valueThe current contents of a input text box or area if the menu was invoked in one, null otherwise.
- -

Item

- -

A labeled menu item that can perform an action when clicked.

- -

Methods

- -

destroy()

- -

Permanently removes the item from its parent menu and frees its resources. The item must not be used afterward. If you need to remove the item from its parent menu but use it afterward, call removeItem() on the parent menu instead.

- -

Properties

- -

label

- -

The menu item's label. You can set this after creating the item to update its label later.

- -

image

- -

The item's icon, a string URL. The URL can be remote, a reference to an image in the add-on's data directory, or a data URI. You can set this after creating the item to update its image later. To remove the item's image, set it to null.

- -

data

- -

An optional arbitrary value to associate with the item. It must be either a string or an object that implements toString(). It will be passed to click listeners. You can set this after creating the item to update its data later.

- -

context

- -

A list of declarative contexts for which the menu item will appear in the context menu. Contexts can be added by calling context.add() and removed by called context.remove().

- -

parentMenu

- -

The item's parent Menu, or null if the item is contained in the top-level context menu. This property is read-only. To add the item to a new menu, call that menu's addItem() method.

- -

contentScript

- -

The content script or the array of content scripts associated with the menu item during creation.

- -

contentScriptFile

- -

The URL of a content script or the array of such URLs associated with the menu item during creation.

- -

Events

- -

message

- -

If you listen to this event you can receive message events from content scripts associated with this menu item. When a content script posts a message using self.postMessage(), the message is delivered to the add-on code in the menu item's message event.

- -
Arguments
- -

value : Listeners are passed a single argument which is the message posted from the content script. The message can be any JSON-serializable value.

- - - -

A labeled menu item that expands into a submenu.

- -

Methods

- -

addItem(item)

- -

Appends a menu item to the end of the menu. If the item is already contained in another menu or in the top-level context menu, it's automatically removed first. If the item is already contained in this menu it will just be moved to the end of the menu.

- -
Parameters
- -

item : Item,Menu,Separator
- The Item, Menu, or Separator to add to the menu.

- -

removeItem(item)

- -

Removes the given menu item from the menu. If the menu does not contain the item, this method does nothing.

- -
Parameters
- -

item : Item,Menu,Separator
- The menu item to remove from the menu.

- -

destroy()

- -

Permanently removes the menu from its parent menu and frees its resources. The menu must not be used afterward. If you need to remove the menu from its parent menu but use it afterward, call removeItem() on the parent menu instead.

- -

Properties

- -

label

- -

The menu's label. You can set this after creating the menu to update its label later.

- -

items

- -

An array containing the items in the menu. The array is read-only, meaning that modifications to it will not affect the menu. However, setting this property to a new array will replace all the items currently in the menu with the items in the new array.

- -

image

- -

The menu's icon, a string URL. The URL can be remote, a reference to an image in the add-on's data directory, or a data URI. You can set this after creating the menu to update its image later. To remove the menu's image, set it to null.

- -

context

- -

A list of declarative contexts for which the menu will appear in the context menu. Contexts can be added by calling context.add() and removed by called context.remove().

- -

parentMenu

- -

The menu's parent Menu, or null if the menu is contained in the top-level context menu. This property is read-only. To add the menu to a new menu, call that menu's addItem() method.

- -

contentScript

- -

The content script or the array of content scripts associated with the menu during creation.

- -

contentScriptFile

- -

The URL of a content script or the array of such URLs associated with the menu during creation.

- -

Events

- -

message

- -

If you listen to this event you can receive message events from content scripts associated with this menu item. When a content script posts a message using self.postMessage(), the message is delivered to the add-on code in the menu item's message event.

- -
Arguments
- -

value : Listeners are passed a single argument which is the message posted from the content script. The message can be any JSON-serializable value.

- -

Separator

- -

A menu separator. Separators can be contained only in Menus, not in the top-level context menu.

- -

Methods

- -

destroy()

- -

Permanently removes the separator from its parent menu and frees its resources. The separator must not be used afterward. If you need to remove the separator from its parent menu but use it afterward, call removeItem() on the parent menu instead.

- -

Properties

- -

parentMenu

- -

The separator's parent Menu. This property is read-only. To add the separator to a new menu, call that menu's addItem() method.

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/index.html deleted file mode 100644 index e78b5f5cb5..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/index.html +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: High-Level APIs -slug: Mozilla/Add-ons/SDK/High-Level_APIs -tags: - - Add-on SDK - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs ---- -

{{AddonSidebar}}

- -

Les modules répertoriés sur cette page implémentent des API de haut niveau pour la création de modules complémentaires: création d'interfaces utilisateur, interaction avec le Web et interaction avec le navigateur.

- -

Sauf indication contraire explicite de la documentation, tous ces modules sont "Stables": nous éviterons d'y apporter des modifications incompatibles. {{ LandingPageListSubpages ("/en-US/Add-ons/SDK/High-Level_APIs", 5) }}

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/indexed-db/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/indexed-db/index.html deleted file mode 100644 index 4a73e29e98..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/indexed-db/index.html +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: indexed-db -slug: Mozilla/Add-ons/SDK/High-Level_APIs/indexed-db -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/indexed-db ---- -

{{AddonSidebar}}

- -
-

Expérimental

-
- -

Expose l'API IndexedDB pour les add-ons.

- -

Utilisation

- -

Les scripts en cours d'exécution dans les pages Web peuvent accéder à IndexedDB via window. Par exemple:

- -
window.indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
-
-var request = window.indexedDB.open("MyDatabase");
-request.onerror = function(event) {
-  console.log("failure");
-};
-request.onsuccess = function(event) {
-  console.log("success");
-};
- -

Parce que votre code add-on principale ne peut pas accéder au DOM, vous ne pouvez pas faire cela. Mais vous pouvez utiliser le module indexed-db pour y accéder:

- -
var { indexedDB } = require('sdk/indexed-db');
-
-var request = indexedDB.open('MyDatabase');
-request.onerror = function(event) {
-  console.log("failure");
-};
-request.onsuccess = function(event) {
-  console.log("success");
-};
- -

La plupart des objets qui mettent en œuvre l'API IndexedDB, tels que IDBTransaction , IDBOpenDBRequest , et IDBObjectStore , sont accessibles à travers l'objet IndexedDB lui-même. < br>

- -

L'API exposée par indexed-db est presque identique à l'API DOM IndexedDB, donc on n'a pas répété sa documentation ici, référer vous à la documentation de l'API IndexedDB pour tous les détails.

- -

La base de données créé sera unique et privée pour l'add-on, et n'est pas liés à une base de données de site. Le module ne peut pas être utilisé pour interagir avec une base de données du site donné. Voir bug 778197 et bug 786688 .

- -

Exemple

- -
-

Cet exemple utilise l'API bouton d'action , qui est uniquement disponible à partir de Firefox 29 partir.

-
- -

Voici un add-on complet qui ajoute deux boutons pour le navigateur: le bouton "Ajouter" ajoute le titre de l'onglet en cours à une base de données, tandis que le bouton intitulé «Liste» répertorie tous les titres dans la base de données .

- -

L'add-on implémente les fonctions open(), addItem() et getItems() pour ouvrir la base de données, ajouter un nouvel élément à la base de données, et d'obtenir tous les éléments de la base de données.

- -
var { indexedDB, IDBKeyRange } = require('sdk/indexed-db');
-
-var database = {};
-
-database.onerror = function(e) {
-  console.error(e.value)
-}
-
-function open(version) {
-  var request = indexedDB.open("stuff", version);
-
-  request.onupgradeneeded = function(e) {
-    var db = e.target.result;
-    e.target.transaction.onerror = database.onerror;
-
-    if(db.objectStoreNames.contains("items")) {
-      db.deleteObjectStore("items");
-    }
-
-    var store = db.createObjectStore("items",
-      {keyPath: "time"});
-  };
-
-  request.onsuccess = function(e) {
-    database.db = e.target.result;
-  };
-
-  request.onerror = database.onerror;
-};
-
-function addItem(name) {
-  var db = database.db;
-  var trans = db.transaction(["items"], "readwrite");
-  var store = trans.objectStore("items");
-  var time = new Date().getTime();
-  var request = store.put({
-    "name": name,
-    "time": time
-  });
-
-  request.onerror = database.onerror;
-};
-
-function getItems(callback) {
-  var cb = callback;
-  var db = database.db;
-  var trans = db.transaction(["items"], "readwrite");
-  var store = trans.objectStore("items");
-  var items = new Array();
-
-  trans.oncomplete = function() {
-    cb(items);
-  }
-
-  var keyRange = IDBKeyRange.lowerBound(0);
-  var cursorRequest = store.openCursor(keyRange);
-
-  cursorRequest.onsuccess = function(e) {
-    var result = e.target.result;
-    if(!!result == false)
-      return;
-
-    items.push(result.value.name);
-    result.continue();
-  };
-
-  cursorRequest.onerror = database.onerror;
-};
-
-function listItems(itemList) {
-  console.log(itemList);
-}
-
-open("1");
-
-var add = require("sdk/ui/button/action").ActionButton({
-  id: "add",
-  label: "Add",
-  icon: "./add.png",
-  onClick: function() {
-    addItem(require("sdk/tabs").activeTab.title);
-  }
-});
-
-var list = require("sdk/ui/button/action").ActionButton({
-  id: "list",
-  label: "List",
-  icon: "./list.png",
-  onClick: function() {
-    getItems(listItems);
-  }
-});
-
- -

Notez que pour exécuter cet add-on, vous aurez besoin de fournir des icônes nommées "add.png" et "list.png" dans le répertoire "data" de l'add-ons .

- -

Globals

- -

Propriétés

- -

indexedDB

- -

Permet de créer, ouvrir et supprimer des bases de données. Voir la documentation IDBFactory.

- -

IDBKeyRange

- -

Définit une plage de clés. Voir la documentation IDBKeyRange.

- -

DOMException

- -

Fournit des informations plus détaillées sur une exception. Voir la documentation DOMException.

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/simple-storage/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/simple-storage/index.html deleted file mode 100644 index 2b35fc120b..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/simple-storage/index.html +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: simple-storage -slug: Mozilla/Add-ons/SDK/High-Level_APIs/simple-storage -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/simple-storage ---- -

{{AddonSidebar}}

- -
-

Stable

-
- -

Permet au add-on le stockage des données afin qu'il soit conservé entre les redémarrages de Firefox. Ce module fonctionne de façon similaire au DOM Storage du Web, mais il est uniquement disponible pour des add-ons.

- -

Utilisation

- -

Le module de stockage simple exporte un objet appelé storage qui est persistant et à porté de votre add-on. C'est un objet JavaScript normal, et vous pouvez le traiter comme vous le feriez pour tout autre.

- -

Pour stocker une valeur, il faut juste l'affecter avec la propriété storage:

- -
var ss = require("sdk/simple-storage");
-ss.storage.myArray = [1, 1, 2, 3, 5, 8, 13];
-ss.storage.myBoolean = true;
-ss.storage.myNull = null;
-ss.storage.myNumber = 3.1337;
-ss.storage.myObject = { a: "foo", b: { c: true }, d: null };
-ss.storage.myString = "O frabjous day!";
- -

Vous pouvez stocker des valeurs tableau, booléennes, nombre, objet, null et des textes. Si vous souhaitez stocker d'autres types de valeurs, vous devrez d'abord les convertir en chaînes ou un autre de ces types.

- -

Veillez à définir les propriétés avec storage et non avec le module lui-même:

- -
// This is not good!
-var ss = require("sdk/simple-storage");
-ss.foo = "I will not be saved! :(";
- -

stockage simple et "jpm run"

- -

Le module de stockage simple stocke ses données dans votre profil. Parce que jpm run utilise par défaut un profil frais chaque fois qu'il est exécuté, le stockage simple ne fonctionnera pas avec des add-ons exécutées en utilisant jpm run - les données stockées ne persisteront pas d'une exécution à l'autre.

- -

La solution la plus simple à ce problème est d'utiliser l'option --profile de jpm avec un chemin d'accès à un profil - pas seulement un nom de profil. Vous pouvez aussi avoir besoin d'inclure l'option --no-copie pour empêcher Firefox de copier le profil dans un répertoire de temporaire chaque fois qu'il démarre.

- -
jpm run --no-copy --profile path/to/profile/dir
- -

Si vous spécifiez un profil non-existant, il sera créé.

- -
-

Important: Si vous utilisez cette méthode, vous devez mettre fin à votre session de débogage en quittant Firefox normalement, en annulant la commande shell. Si vous ne fermez pas Firefox normalement, puis un simple stockage ne sera pas informé que la session est terminée, et ne sera pas écrire vos données à la mémoire de sauvegarde.

-
- -

Accès au stockage à partir de la console

- -

Dans l' Add-on Debugger , vous pouvez accéder à vos addons simple stockage par programmation à partir de la console en utilisant ce qui suit:

- -
loader.modules['resource://gre/modules/commonjs/sdk/simple-storage.js'].exports.storage
- -

Constructeur de tableaux

- -

Pour ne pas remettre à zéro un tableau, attention au constructeur. Par exemple, cet add-on essaie de stocker les URL des pages visitées:

- -
var ss = require("sdk/simple-storage");
-ss.storage.pages = [];
-
-require("sdk/tabs").on("ready", function(tab) {
-  ss.storage.pages.push(tab.url);
-});
-
-require("sdk/ui/button/action").ActionButton({
-  id: "read",
-  label: "Read",
-  icon: "./read.png",
-  onClick: function() {
-    console.log(ss.storage.pages);
-  }
-});
- -

Mais cela ne fonctonne pas, car il vide le tableau chaque fois que l'add-on est apellée (par exemple, chaque fois que Firefox est lancé). La ligne 2 a besoin d'être subordonné, de sorte que le tableau est uniquement construite si il n'existe pas déjà:

- -
if (!ss.storage.pages)
-  ss.storage.pages = [];
- -

Suppression de données

- -

Vous pouvez supprimer des propriétés en utilisant l'opérateur delete. Voici une add-on qui ajoute trois boutons pour écrire, lire et supprimer une valeur:

- -
var ss = require("sdk/simple-storage");
-
-require("sdk/ui/button/action").ActionButton({
-  id: "write",
-  label: "Write",
-  icon: "./write.png",
-  onClick: function() {
-    ss.storage.value = 1;
-    console.log("Setting value");
-  }
-});
-
-require("sdk/ui/button/action").ActionButton({
-  id: "read",
-  label: "Read",
-  icon: "./read.png",
-  onClick: function() {
-    console.log(ss.storage.value);
-  }
-});
-
-require("sdk/ui/button/action").ActionButton({
-  id: "delete",
-  label: "Delete",
-  icon: "./delete.png",
-  onClick: function() {
-    delete ss.storage.value;
-    console.log("Deleting value");
-  }
-});
- -

Si vous l'exécutez, vous verrez que si vous cliquez sur "Lire" après avoir cliqué sur "Supprimer" vous aurez le résultat escompté:

- -
info: undefined
-
- -

Notez que pour exécuter cet add-on, vous aurez à enregistrer des fichiers icône nommées "write.png", "read.png", et "delete.png" dans le répertoire "data".

- -

Quotas

- -

Le stockage simple à la disposition de votre add-on est limité. Actuellement, cette limite est environ cinq mégaoctets (5,242,880 octets). Vous pouvez choisir d'être averti lorsque vous dépassez le quota, et vous devez répondre en réduisant la quantité de données dans le stockage. Si vous quittez l'application pendant que vous êtes hors quota, toutes les données stockées depuis la dernière fois que vous étiez sous le quota ne sont pas conservées. Vous ne devriez pas laisser cela se produire.

- -

Pour écouter les notifications du quota, utiliser l'evenement "OverQuota". il sera appelée quand votre stockage dépasse le quota.

- -
function myOnOverQuotaListener() {
-  console.log("Uh oh.");
-}
-ss.on("OverQuota", myOnOverQuotaListener);
- -

Les auditeurs peuvent également être retirés:

- -
ss.removeListener("OverQuota", myOnOverQuotaListener);
- -

Pour connaitre le % de saturation du quota utiliser la proprieté quotaUsage. Si vous êtes dans votre quota, c'est un nombre entre 0 et 1. Si votre add-on utilise plus que son quota, cette valeur est supérieure à 1,0.

- -

Par conséquent, lorsque vous êtes averti que vous êtes hors quota, vous devez répondre en supprimant les données de l'espace de stockage jusqu'à ce que votre quotaUsage soit inférieur ou égal à 1.

- -
ss.storage.myList = [ /* some long array */ ];
-ss.on("OverQuota", function () {
-  while (ss.quotaUsage > 1)
-    ss.storage.myList.pop();
-});
- - - -

Si votre mémoire est liée à l'histoire de vos utilisateurs Web, des renseignements personnels, ou d'autres données sensibles, votre add-on devrait respecter la navigation privé .

- -

Pour en savoir plus sur la façon de choisir en mode de navigation privée et comment utiliser le SDK pour éviter de stocker des données d'utilisateur associées aux fenêtres privées, reportez-vous à la documentation du private-browsing Module .

- -

Globals

- -

Propriétés

- -

storage

- -

Un objet persistant privé de votre add-on.

- -

quotaUsage

- -

Un certain nombre dans l'intervalle [0, Infinity) qui indique le pourcentage de quota occupé par le stockage. Une valeur dans l'intervalle [0, 1] indique que le stockage est dans le quota. Une valeur supérieure à 1 indique que le stockage dépasse le quota.

- -

Événements

- -

OverQuota

- -

Le module émet cet événement lorsque votre stockage add-ons dépasse son quota.

diff --git a/files/fr/mozilla/add-ons/sdk/high-level_apis/tabs/index.html b/files/fr/mozilla/add-ons/sdk/high-level_apis/tabs/index.html deleted file mode 100644 index 5ffa11d9a4..0000000000 --- a/files/fr/mozilla/add-ons/sdk/high-level_apis/tabs/index.html +++ /dev/null @@ -1,669 +0,0 @@ ---- -title: tabs -slug: Mozilla/Add-ons/SDK/High-Level_APIs/tabs -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/tabs ---- -

{{AddonSidebar}}

- -
-

Stable

-
- -

Ouvre, manipule, accède et recevoir les événements des onglets.

- -

Utilisation

- -

Ouvrez un onglet

- -

Vous pouvez ouvrir un nouvel onglet, en spécifiant diverses propriétés, y compris l'emplacement:

- -
var tabs = require("sdk/tabs");
-tabs.open("http://www.example.com");
- -

Track tabs

- -

You can register event listeners to be notified when tabs open, close, finish loading DOM content, or are made active or inactive:

- -
var tabs = require("sdk/tabs");
-
-// Listen for tab openings.
-tabs.on('open', function onOpen(tab) {
-  myOpenTabs.push(tab);
-});
-
-// Listen for tab content loads.
-tabs.on('ready', function(tab) {
-  console.log('tab is loaded', tab.title, tab.url);
-});
- -

Access tabs

- -

The module itself can be used as a list of all opened tabs across all windows. In particular, you can enumerate it:

- -
var tabs = require('sdk/tabs');
-for (let tab of tabs)
-  console.log(tab.title);
- -

You can also access individual tabs by index:

- -
var tabs = require('sdk/tabs');
-
-tabs.on('ready', function () {
-  console.log('first: ' + tabs[0].title);
-  console.log('last: ' + tabs[tabs.length-1].title);
-});
- -

You can access the currently active tab:

- -
var tabs = require('sdk/tabs');
-
-tabs.on('activate', function () {
-  console.log('active: ' + tabs.activeTab.url);
-});
- -

Track a single tab

- -

Given a tab, you can register event listeners to be notified when the tab is closed, activated or deactivated, or when the page hosted by the tab is loaded or retrieved from the "back-forward cache":

- -
var tabs = require("sdk/tabs");
-
-function onOpen(tab) {
-  console.log(tab.url + " is open");
-  tab.on("pageshow", logShow);
-  tab.on("activate", logActivate);
-  tab.on("deactivate", logDeactivate);
-  tab.on("close", logClose);
-}
-
-function logShow(tab) {
-  console.log(tab.url + " is loaded");
-}
-
-function logActivate(tab) {
-  console.log(tab.url + " is activated");
-}
-
-function logDeactivate(tab) {
-  console.log(tab.url + " is deactivated");
-}
-
-function logClose(tab) {
-  console.log(tab.url + " is closed");
-}
-
-tabs.on('open', onOpen);
- -

Manipulate a tab

- -

You can get and set various properties of tabs (but note that properties relating to the tab's content, such as the URL, will not contain valid values until after the tab's ready event fires). By setting the url property you can load a new page in the tab:

- -
var tabs = require("sdk/tabs");
-tabs.on('activate', function(tab) {
-  tab.url = "http://www.example.com";
-});
- -

Run scripts in a tab

- -

You can attach a content script to the page hosted in a tab, and use that to access and manipulate the page's content (see the Modifying the Page Hosted by a Tab tutorial):

- -
var tabs = require("sdk/tabs");
-
-tabs.on('activate', function(tab) {
-  var worker = tab.attach({
-    contentScript: 'self.port.emit("html", document.body.innerHTML);'
-  });
-  worker.port.on("html", function(message) {
-    console.log(message)
-  })
-});
- -

Note that tab.attach is tab-centric: if the user navigates to a new page in the same tab, then the worker and content scripts will be reattached to the new page.

- -

Attaching stylesheets

- -
-

New in Firefox 34.

-
- -

You can't attach style sheets to a tab using tab.attach(), but from Firefox 34 onwards you can attach and detach them using the low-level stylesheet/style and content/mod APIs. Here's an add-on that uses a toggle button to attach a stylesheet to the active tab, and detach it again. The stylesheet is called "style.css" and is located in the add-on's "data" directory:

- -
var tabs = require("sdk/tabs");
-var { attach, detach } = require('sdk/content/mod');
-var { Style } = require('sdk/stylesheet/style');
-var { ToggleButton } = require("sdk/ui/button/toggle");
-
-var style = Style({
-  uri: './style.css'
-});
-
-var button = ToggleButton({
-  id: "stylist",
-  label: "stylist",
-  icon: "./icon-16.png",
-  onChange: function(state) {
-    if (state.checked) {
-      attach(style, tabs.activeTab);
-    }
-    else {
-      detach(style, tabs.activeTab);
-    }
-  }
-});
- -

Private windows

- -

If your add-on has not opted into private browsing, then you won't see any tabs that are hosted by private browser windows.

- -

Tabs hosted by private browser windows won't be seen if you enumerate the tabs module itself, and you won't receive any events for them.

- -

To learn more about private windows, how to opt into private browsing, and how to support private browsing, refer to the documentation for the private-browsing module.

- -

Converting to XUL tabs

- -

To convert from the high-level Tab objects used in this API to the low-level XUL tab objects used in the tabs/utils API and by traditional add-ons, use the viewFor() function exported by the viewFor module.

- -

To convert back the other way, from a XUL tab to a high-level Tab object, use the modelFor() function, exported by the modelFor module.

- -

Here's an example converting from a high-level Tab to a XUL tab and then back the other way:

- -
var { modelFor } = require("sdk/model/core");
-var { viewFor } = require("sdk/view/core");
-
-var tabs = require("sdk/tabs");
-var tab_utils = require("sdk/tabs/utils");
-
-function mapHighLevelToLowLevel(tab) {
-  // get the XUL tab that corresponds to this high-level tab
-  var lowLevelTab = viewFor(tab);
-  // now we can, for example, access the tab's content directly
-  var browser = tab_utils.getBrowserForTab(lowLevelTab);
-  console.log(browser.contentDocument.body.innerHTML);
-  // get the high-level tab back from the XUL tab
-  var highLevelTab = modelFor(lowLevelTab);
-  console.log(highLevelTab.url);
-}
-
-tabs.on("ready", mapHighLevelToLowLevel);
-
- -

Note that directly accessing XUL objects and web content like this means you're no longer protected by the compatibility guarantees made by the SDK's high-level APIs. In particular, your code might not work with multiprocess Firefox.

- -

Globals

- -

Functions

- -

open(options)

- -

Opens a new tab. The new tab will open in the active window or in a new window, depending on the inNewWindow option.

- -

Example

- -
var tabs = require("sdk/tabs");
-
-// Open a new tab on active window and make tab active.
-tabs.open("http://www.mysite.com");
-
-// Open a new tab in a new window and make it active.
-tabs.open({
-  url: "http://www.mysite.com",
-  inNewWindow: true
-});
-
-// Open a new tab on active window in the background.
-tabs.open({
-  url: "http://www.mysite.com",
-  inBackground: true
-});
-
-// Open a new tab as an app tab and do something once it's open.
-tabs.open({
-  url: "http://www.mysite.com",
-  isPinned: true,
-  onOpen: function onOpen(tab) {
-    // do stuff like listen for content
-    // loading.
-  }
-});
- -
Parameters
- -

options : object
- Required options:

- - - - - - - - - - - - - - - - -
NameType 
urlstring -

String URL to be opened in the new tab. This is a required property.

-
- -

Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
isPrivateboolean -

Boolean which will determine whether the new tab should be private or not. If your add-on does not support private browsing this will have no effect. See the private-browsing documentation for more information. Defaults to false.

-
inNewWindowboolean -

If present and true, a new browser window will be opened and the URL will be opened in the first tab in that window. This is an optional property.

-
inBackgroundboolean -

If present and true, the new tab will be opened to the right of the active tab and will not be active. This is an optional property.

-
isPinnedboolean -

If present and true, then the new tab will be pinned as an app tab.

-
onOpenfunction -

A callback function that will be registered for the 'open' event. This is an optional property.

-
onClosefunction -

A callback function that will be registered for the 'close' event. This is an optional property.

-
onReadyfunction -

A callback function that will be registered for the 'ready' event. This is an optional property.

-
onLoadfunction -

A callback function that will be registered for the 'load' event. This is an optional property.

-
onPageShowfunction -

A callback function that will be registered for the 'pageshow' event. This is an optional property.

-
onActivatefunction -

A callback function that will be registered for the 'activate' event. This is an optional property.

-
onDeactivatefunction -

A callback function that will be registered for the 'deactivate' event. This is an optional property.

-
- -

Properties

- -

activeTab

- -

The currently active tab in the active window. This property is read-only. To activate a Tab object, call its activate method.

- -

Example

- -
// Get the active tab's title.
-var tabs = require("sdk/tabs");
-console.log("title of active tab is " + tabs.activeTab.title);
- -

length

- -

The number of open tabs across all windows.

- -

Events

- -

open

- -

This event is emitted when a new tab is opened. This does not mean that the content has loaded, only that the browser tab itself is fully visible to the user.

- -

Properties relating to the tab's content (for example: title, favicon, and url) will not be correct at this point. If you need to access these properties, listen for the ready event:

- -
var tabs = require("sdk/tabs");
-tabs.on('open', function(tab){
-  tab.on('ready', function(tab){
-    console.log(tab.url);
-  });
-});
- -
Arguments
- -

Tab : Listeners are passed the tab object that just opened.

- -

close

- -

This event is emitted when a tab is closed. When a window is closed this event will be emitted for each of the open tabs in that window.

- -
Arguments
- -

Tab : Listeners are passed the tab object that has closed.

- -

ready

- -

This event is emitted when the DOM for a tab's content is ready. It is equivalent to the DOMContentLoaded event for the given content page.

- -

A single tab will emit this event every time the DOM is loaded: so it will be emitted again if the tab's location changes or the content is reloaded.

- -

After this event has been emitted, all properties relating to the tab's content can be used.

- -
Arguments
- -

Tab : Listeners are passed the tab object that has loaded.

- -

activate

- -

This event is emitted when an inactive tab is made active.

- -
Arguments
- -

Tab : Listeners are passed the tab object that has become active.

- -

deactivate

- -

This event is emitted when the active tab is made inactive.

- -
Arguments
- -

Tab : Listeners are passed the tab object that has become inactive.

- -

Tab

- -

A Tab instance represents a single open tab. It contains various tab properties, several methods for manipulation, as well as per-tab event registration.

- -

Tabs emit all the events described in the Events section. Listeners are passed the Tab object that triggered the event.

- -

Methods

- -

pin()

- -

Pins this tab as an app tab.

- -

unpin()

- -

Unpins this tab.

- -

close(callback)

- -

Closes this tab.

- -
Parameters
- -

callback : function
- A function to be called when the tab finishes its closing process. This is an optional argument.

- -

reload()

- -

Reloads this tab.

- -

activate()

- -

Makes this tab active, which will bring this tab to the foreground.

- -

getThumbnail()

- -

Returns thumbnail data URI of the page currently loaded in this tab.

- -

attach(options)

- -

Attach one or more scripts to the document loaded in the tab. Note that by attaching inside ready event, this becomes tab-centric: if the user navigates to a new page in the same tab, then the content scripts will be reattached to the new page.

- -

Example

- -
var tabs = require("sdk/tabs");
-
-tabs.on('ready', function(tab) {
-  var worker = tab.attach({
-      contentScript:
-        'document.body.style.border = "5px solid red";'
-  });
-});
- -
Parameters
- -

options : object
- Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
contentScriptFilestring,array -

The local file URLs of content scripts to load. Content scripts specified by this option are loaded before those specified by the contentScript option. Optional.

-
contentScriptstring,array -

A string or an array of strings of code to be evaluated in the context. Content scripts specified by this option are loaded after those specified by the contentScriptFile option. Optional.

-
contentScriptOptionsobject -

You can use this option to define read-only values for your content scripts.

- -

The option consists of an object literal listing name:value pairs for the values you want to provide to the content script. For example:

- -
-// main.js
-
-const tabs = require("sdk/tabs");
-
-tabs.open({
-  url: "./page.html",
-  onReady: function(tab) {
-    tab.attach({
-      contentScriptFile: "./content-script.js",
-      contentScriptOptions: {
-        a: "blah"
-      }
-    });
-  }
-});
- -

The values are accessible to content scripts via the self.options property:

- -
-// content-script.js
-
-alert(self.options.a);
-
onMessagefunction -

A function called when the content worker receives a message from content scripts. Listeners are passed a single argument, the message posted from the content script. Optional.

-
onErrorfunctionA function called when the content worker receives an error from content scripts. Listeners are passed a single argument, error, which is the error posted from the content script and an object of type Error. Optional
- -
Returns
- -

Worker : The Worker object can be used to communicate with the content script. See Content Scripts guide to learn the details.

- -

Properties

- -

id

- -

The unique id for the tab. This property is read-only.

- -

title

- -

The title of the tab (usually the title of the page currently loaded in the tab) This property can be set to change the tab title.

- -

url

- -

The URL of the page currently loaded in the tab. This property can be set to load a different URL in the tab.

- -

favicon

- -

The URL of the favicon for the page currently loaded in the tab. This property is read-only.

- -
This property is deprecated. From version 1.15, use the favicon module's getFavicon() function instead.
- -

contentType

- -
-

This is currently an experimental API, so we might change it in future releases.

- -

Returns the MIME type that the document currently loaded in the tab is being rendered as. This may come from HTTP headers or other sources of MIME information, and might be affected by automatic type conversions performed by either the browser or extensions. This property is read-only.

-
- -

index

- -

The index of the tab relative to other tabs in the application window. This property can be set to change its relative position.

- -

isPinned

- -

Whether or not this tab is pinned as an app tab. This property is read-only.

- -

window

- -

The window object for this tab.

- -

readyState

- -
-

New in Firefox 33.

-
- -

A string telling you the load state of the document hosted by this tab. This corresponds directly to Document.readyState. It has one of four possible values:

- - - -

Once a tab's readyState has entered "interactive", you can retrieve properties such as the document's URL.

- -

Events

- -

close

- -

This event is emitted when the tab is closed. It's also emitted when the tab's window is closed.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

ready

- -

This event is emitted when the DOM for the tab's content is ready. It is equivalent to the DOMContentLoaded event for the given content page. At this point the document itself is fully loaded and parsed, but resources such as stylesheets and images may still be loading.

- -

A single tab will emit this event every time the DOM is loaded: so it will be emitted again if the tab's location changes or the content is reloaded. After this event has been emitted, all properties relating to the tab's content can be used.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

load

- -

This event is emitted when the page for the tab's content is loaded. It is equivalent to the load event for the given content page. At this point the document and its resources, such as images and stylesheets, have finished loading.

- -

This event can be used for pages that do not have a DOMContentLoaded event, like images. For pages that have a DOMContentLoaded event, load is fired after ready.

- -

A single tab will emit this event every time the page is loaded: so it will be emitted again if the tab's location changes or the content is reloaded. After this event has been emitted, all properties relating to the tab's content can be used.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

pageshow

- -

The pageshow event is emitted when the page for a tab's content is loaded. It is equivalent to the pageshow event for the given content page.

- -

This event is similar to the load and ready events, except unlike load and ready, pageshow is triggered if the page was retrieved from the bfcache. This means that if the user loads a page, loads a new page, then moves back to the previous page using the "Back" button, the pageshow event is emitted when the user moves back to the previous page, while the load and ready events are not.

- -

This event is not emitted when the tab is made the active tab: to get notified about that, you need to listen to the activate event.

- -

After this event has been emitted, all properties relating to the tab's content can be used. It is emitted after load and ready.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

persisted : Listeners are passed a boolean value indicating whether or not the page was loaded from the bfcache.

- -

activate

- -

This event is emitted when the tab is made active.

- -

Note that you cannot guarantee that a tab's content, or even its url, are initialized at the time activate is emitted. This is because when a new tab is opened, its activate event may be emitted before the content is loaded.

- -

You can use the tab's readyState property to determine whether the tab's content and url will be available: if readyState is uninitialized or loading, then you can't access the tab's properties and must wait for the tab's ready event.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

- -

deactivate

- -

This event is emitted when the tab is made inactive.

- -
Arguments
- -

Tab : Listeners are passed the tab object.

diff --git a/files/fr/mozilla/add-ons/sdk/index.html b/files/fr/mozilla/add-ons/sdk/index.html deleted file mode 100644 index 4de1603cd2..0000000000 --- a/files/fr/mozilla/add-ons/sdk/index.html +++ /dev/null @@ -1,337 +0,0 @@ ---- -title: Add-on SDK -slug: Mozilla/Add-ons/SDK -tags: - - Add-on SDK - - Jetpack -translation_of: Archive/Add-ons/Add-on_SDK ---- -

- -
-

Support for extensions using XUL/XPCOM or the Add-on SDK was removed in Firefox 57, released November 2017. As there is no supported version of Firefox enabling these technologies, this page will be removed by December 2020.

- -

Add-ons using the techniques described in this document are considered a legacy technology in Firefox. Don't use these techniques to develop new add-ons. Use WebExtensions instead. If you maintain an add-on which uses the techniques described here, consider migrating it to use WebExtensions.

- -

Starting from Firefox 53, no new legacy add-ons will be accepted on addons.mozilla.org (AMO) for desktop Firefox and Firefox for Android.

- -

Starting from Firefox 57, only extensions developed using WebExtensions APIs will be supported on Desktop Firefox and Firefox for Android.

- -

Even before Firefox 57, changes coming up in the Firefox platform will break many legacy extensions. These changes include multiprocess Firefox (e10s), sandboxing, and multiple content processes. Legacy extensions that are affected by these changes should migrate to use WebExtensions APIs if they can. See the "Compatibility Milestones" document for more information.

- -

A wiki page containing resources, migration paths, office hours, and more, is available to help developers transition to the new technologies.

-
- - - -

- -

Using the Add-on SDK, you can create Firefox add-ons. You can use various standard Web technologies: JavaScript, HTML, and CSS, to create the add-ons. The SDK includes JavaScript APIs, which you can use to create add-ons and tools for creating, running, testing, and packaging add-ons.

- -
-

Tutorials

- -
-
-
-
Getting started
-
How to install the SDK and use the jpm tool to develop, test, and package add-ons.
-
Interact with the browser
-
Open web pages, listen for pages loading and list open pages.
-
Development techniques
-
Learn about common development techniques, such as unit testing, logging, creating reusable modules, localization, and mobile development.
-
-
- -
-
-
Create user interface components
-
Create user interface components such as toolbar buttons, context menus, menu items, and dialogs.
-
Modify web pages
-
Modify pages matching a URL pattern or dynamically modify a particular tab.
-
Putting it together
-
Walkthrough of the Annotator example add-on.
-
-
-
- -
-

Guides

- -
-
-
-
Contributor's guide
-
Learn how to start contributing to the SDK and about the most important idioms used in the SDK code such as modules, classes and inheritance, private properties, and content processes.
-
SDK infrastructure
-
Aspects of the SDK's underlying technology: modules, the Program ID and the rules defining Firefox compatibility.
-
Content scripts
-
A detailed guide to working with content scripts.
-
-
- -
-
-
SDK idioms
-
The SDK's event framework and the distinction between add-on scripts and content scripts.
-
XUL migration
-
A guide to porting XUL add-ons to the SDK. This guide includes a comparison of the two toolsets and a working example of porting a XUL add-on.
-
Multiprocess Firefox and the SDK
-
How to check whether your add-on is compatible with multiprocess Firefox or not and fix it accordingly.
-
-
-
- -
-

Reference

- -
-
-
-
High-Level APIs
-
Reference documentation for the high-level SDK APIs.
-
Tools reference
-
Reference documentation for the jpm tool used to develop, test and package add-ons, the console global used for logging, and the package.json file.
-
-
- -
-
-
Low-Level APIs
-
Reference documentation for the low-level SDK APIs.
-
-
-
- -

- -
-
-
-
-

Join the Add-on SDK community

- -
-
Choose your preferred method for joining the discussion:
- - -
- -
- -
-
-
-
diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/index.html deleted file mode 100644 index 0460b4ce3d..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/index.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Low-Level APIs -slug: Mozilla/Add-ons/SDK/Low-Level_APIs -tags: - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs ---- -

Les modules de cette section implémentent des API de bas niveau. Ces modules se divisent à peu près en trois catégories:

- - - -

Ces modules sont toujours en développement actif et nous prévoyons d'y apporter des modifications incompatibles dans les prochaines versions.

- -

{{ LandingPageListSubpages ("/en-US/Add-ons/SDK/Low-Level_APIs", 5) }}

diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/io_byte-streams/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/io_byte-streams/index.html deleted file mode 100644 index c37870a8cb..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/io_byte-streams/index.html +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: io/byte-streams -slug: Mozilla/Add-ons/SDK/Low-Level_APIs/io_byte-streams -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/io_byte-streams ---- -

{{AddonSidebar}}

- -
-

Expérimental

-
- -

Fournit des flux d'octets en lecture/écriture.

- -
function readBinaryDataFromFile (filename) {
-  var fileIO = require("sdk/io/file");
-  var data = null;
-  if (fileIO.exists(filename)) {
-    var ByteReader = fileIO.open(filename, "rb");
-    if (!ByteReader.closed) {
-      data = ByteReader.read();
-      ByteReader.close();
-    }
-  }
-  return data;
-}
-
- -
function writeBinaryDataToFile(data, filename) {
-  var fileIO = require("sdk/io/file");
-  var ByteWriter = fileIO.open(filename, "wb");
-  if (!ByteWriter.closed) {
-    ByteWriter.write(data);
-    ByteWriter.close();
-  }
-}
- -

Globals

- -

Constructeurs

- -

ByteReader(inputStream)

- -

Crée un flux d'entrée binaire qui lit les octets d'un flux de support.

- -

Vous pouvez également créer un objets ByteReader en utilisant la fonction io/file open().

- -
Paramètres
- -

inputStream: flux
- Le flux de support, un nsIInputStream

- -

ByteWriter(outputStream)

- -

Crée un flux de sortie binaire qui écrit les octets dans un flux de support.

- -

Vous pouvez également créer un objets ByteWriter en utilisant la fonction io/file open().

- -
Parameters
- -

outputStream : flux
- Le flux de support, un nsIOutputStream.

- -

ByteReader

- -

Méthodes

- -

close()

- -

Ferme à la fois le flux et son flux de support. Si le flux est déjà fermé, une exception est levée.

- -

read(numBytes)

- -

Lit une chaîne à partir du flux. Si le flux est fermé, une exception est levée.

- -
Parameters
- -

numBytes: nombre <être> Le nombre d'octets à lire. Sinon donné, la totalité du flux est lu.

- -
Retours
- -

string : Une chaîne contenant les octets lus. Si le flux est finit, retourne une chaîne vide.

- -

Propriétés

- -

closed

- -

Vrai si le flux est fermé.

- -

ByteWriter

- -

Méthodes

- -

close()

- -

Ferme à la fois le flux et son flux de support. Si le flux est déjà fermé, une exception est levée.

- -

write(str)

- -

Ecrit une chaîne dans le flux. Si le flux est fermé, une exception est levée.

- -
Paramètres
- -

str: string La chaîne à écrire .

- -

Propriétés

- -

closed

- -

Vrai si le flux est fermé.

diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/io_file/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/io_file/index.html deleted file mode 100644 index 51900f5799..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/io_file/index.html +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: io/file -slug: Mozilla/Add-ons/SDK/Low-Level_APIs/io_file -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/io_file ---- -

{{AddonSidebar}}

- -
-

Expérimental

-
- -

Permet d'accéder au système de fichiers local.

- -

Utilisation

- -

Paths

- -

Les specifications Path de cette API sont spécifiques à l'OS. Cela signifie que les chemins Windows sont spécifiés en utilisant le séparateur antislash (\), et sur les systèmes de type Unix comme Linux et OS X les slash sont utilisés (/).

- -

To ensure your add-on works for everyone, generate paths using the join function. Unfortunately this API does not currently provide a way to obtain an absolute base path which you could then use with join. For now, you need to require("chrome") and use the XPCOM directory service as described in this article about File I/O.

- -

Note that if you do decide to hardcode Windows-style paths, be sure to escape backslashes in strings. For example, to specify the file at C:\Users\Myk, you need to use the string "C:\\Users\\Myk", not "C:\Users\Myk".  Read more about escaping characters in strings.

- -

Globals

- -

Functions

- -

basename(path)

- -
-

The path parameter must be an absolute path, relative paths will cause an error.

- -

Use the fs/path module for relative path support.

-
- -

Returns the last component of the given path. For example, basename("/foo/bar/baz") returns "baz". If the path has no components, the empty string is returned.

- -
Parameters
- -

path : string
- The path of a file.

- -
Returns
- -

string : The last component of the given path.

- -

dirname(path)

- -

Returns the path of the directory containing the given file. If the file is at the top of the volume, the empty string is returned.

- -
Parameters
- -

path : string
- The path of a file.

- -
Returns
- -

string : The path of the directory containing the file.

- -

exists(path)

- -

Returns true if a file exists at the given path and false otherwise.

- -
Parameters
- -

path : string
- The path of a file.

- -
Returns
- -

boolean : True if the file exists and false otherwise.

- -

join(...)

- -

Takes a variable number of strings, joins them on the file system's path separator, and returns the result.

- -
Parameters
- -

... : strings
- A variable number of strings to join. The first string must be an absolute path.

- -
Returns
- -

string : A single string formed by joining the strings on the file system's path separator.

- -

list(path)

- -

Returns an array of file names in the given directory.

- -
Parameters
- -

path : string
- The path of the directory.

- -
Returns
- -

array : An array of file names. Each is a basename, not a full path.

- -

mkpath(path)

- -

Makes a new directory named by the given path. Any subdirectories that do not exist are also created. mkpath can be called multiple times on the same path.

- -
Parameters
- -

path : string
- The path to create.

- -

open(path, mode)

- -

Returns a stream providing access to the contents of a file.

- -
Parameters
- -

path : string
- The path of the file to open.

- -

mode : string
- An optional string, each character of which describes a characteristic of the returned stream.

- - - -

If mode is not given, "r" is assumed, and the file is opened in read-only text mode.

- -

Apart from these options, this API always passes the following options:  CREATE_FILE, TRUNCATE (see https://dxr.mozilla.org/mozilla-central/source/nsprpub/pr/include/prio.h#550). This means that:

- - - -
Returns
- -

stream : If the file is opened in text read-only mode, a TextReader is returned, and if text write-only mode, a TextWriter is returned. See text-streams for information on these text stream objects. If the file is opened in binary read-only mode, a ByteReader is returned, and if binary write-only mode, a ByteWriter is returned. See byte-streams for more information on these byte stream objects. Opened files should always be closed after use by calling close on the returned stream.

- -

read(path, mode)

- -

Opens a file and returns a string containing its entire contents.

- -
Parameters
- -

path : string
- The path of the file to read.

- -

mode : string
- An optional string, each character of which describes a characteristic of the returned stream. If the string contains "b", the contents will be returned in binary mode. If "b" is not present or mode is not given, the file contents will be returned in text mode.

- -
Returns
- -

string : A string containing the file's entire contents.

- -

remove(path)

- -

Removes a file from the file system. To remove directories, use rmdir.

- -
Parameters
- -

path : string
- The path of the file to remove.

- -

rmdir(path)

- -

Removes a directory from the file system. If the directory is not empty, an exception is thrown.

- -
Parameters
- -

path : string
- The path of the directory to remove.

- -

isFile(path)

- -

Returns true only if this path specifies a file.

- -
const fileIO = require("sdk/io/file");
-
-let path = "/Users/Work/";
-let list = fileIO.list(path);
-
-for (i = 0; i < list.length; i++) {
-  let item = fileIO.join(path, list[i]);
-  if (fileIO.isFile(item)) {
-    console.log(item + " is a file");
-  }
-  else {
-    console.log(item + " is a directory");
-  }
-}
- -
Parameters
- -

path : string
- The path of the object.

diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/system_child_process/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/system_child_process/index.html deleted file mode 100644 index 9c315edd9f..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/system_child_process/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: system/child_process -slug: Mozilla/Add-ons/SDK/Low-Level_APIs/system_child_process -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/system_child_process ---- -
-

Expérimentale

-
- -

Une mise en œuvre de l'API node.js child_process.

- -

Ce module vous permet d'exécuter un programme sous-jacent dans un nouveau processus. Il émule l'API node.js child_process, qui n'est pas documentées séparément. Cependant, il ya quelques différences :

- - - -

Voici un exemple qui adapte l'exemple de la documentation de node.js pour spawn() :

- -
var child_process = require("sdk/system/child_process");
-
-var ls = child_process.spawn('/bin/ls', ['-lh', '/usr']);
-
-ls.stdout.on('data', function (data) {
-  console.log('stdout: ' + data);
-});
-
-ls.stderr.on('data', function (data) {
-  console.log('stderr: ' + data);
-});
-
-ls.on('close', function (code) {
-  console.log('child process exited with code ' + code);
-});
- -

Utilisation child_process dans les extensions non-jpm

- -

 

- -
// Import SDK Stuff
-const COMMONJS_URI = 'resource://gre/modules/commonjs';
-const { require } = Cu.import(COMMONJS_URI + '/toolkit/require.js', {});
-var child_process = require('sdk/system/child_process');
-
-// Use it in the same way as in the example above
- -

 

diff --git a/files/fr/mozilla/add-ons/sdk/low-level_apis/ui_button_action/index.html b/files/fr/mozilla/add-ons/sdk/low-level_apis/ui_button_action/index.html deleted file mode 100644 index f018689432..0000000000 --- a/files/fr/mozilla/add-ons/sdk/low-level_apis/ui_button_action/index.html +++ /dev/null @@ -1,659 +0,0 @@ ---- -title: ui/button/action -slug: Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_action -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/ui_button_action ---- -

{{AddonSidebar}}

- -
Experimental
- -

Ajouter un boutton dans l'interface utilisateur de Firefox. Avec ce module vous pourrez créer des bouttons contenant des icônes et répondant aux clic de la sourie.

- -

Usage

- -


- Créer des  bouttons

- -

Pour créer un boutton, vous devez lui donné un identifiant (id), une icône et un libellé:

- -
var { ActionButton } = require("sdk/ui/button/action");
-
-var button = ActionButton({
-    id: "my-button",
-    label: "my button",
-    icon: {
-      "16": "./firefox-16.png",
-      "32": "./firefox-32.png"
-    },
-    onClick: function(state) {
-        console.log("button '" + state.label + "' was clicked");
-    }
-  });
- -

By default, the button appears in the Firefox toolbar:

- -

However, users can move it to the Firefox menu panel using the toolbar customization feature:

- -

- -

Badged buttons

- -
-

New in Firefox 36.

-
- -

You can add a "badge" to a button using its badge property. This can be a number or a string, and you can update it at any time. By default the badge's color is red, but you can set your own color using the badgeColor property, specified as a CSS <color> value:

- -
var { ToggleButton } = require("sdk/ui/button/toggle");
-
-var button = ToggleButton({
-    id: "my-button1",
-    label: "my button1",
-    icon: "./icon-16.png",
-    onChange: changed,
-    badge: 0,
-    badgeColor: "#00AAAA"
-  });
-
-function changed(state) {
-  button.badge = state.badge + 1;
-  if (state.checked) {
-    button.badgeColor = "#AA00AA";
-  }
-  else {
-    button.badgeColor = "#00AAAA";
-  }
-}
- -

- -

Specifying multiple icons

- -

You can specify just one icon, or multiple icons in different sizes.

- -

If you specify multiple icons, Firefox will select the best-fitting icon based on the device screen resolution and the place the icon appears. For example, in the screenshots above, Firefox uses the small icon when the button is in the toolbar and the large icon when the button is in the menu panel. Read more about specifying icons in the reference documentation for the ActionButton constructor.

- -

Responding to click events

- -

You can respond to click events by assigning a listener to the button's click event. You can do this in the button's constructor, by assigning the listener to the onClick option. You can also add, or change, the listener afterwards:

- -
var { ActionButton } = require("sdk/ui/button/action");
-
-var button = ActionButton({
-    id: "my-button",
-    label: "my button",
-    icon: {
-      "16": "./firefox-16.png",
-      "32": "./firefox-32.png"
-    },
-    onClick: firstClick
-  });
-
-function firstClick(state) {
-  console.log("You clicked '" + state.label + "'");
-  button.removeListener("click", firstClick);
-  button.on("click", subsequentClicks);
-}
-
-function subsequentClicks(state) {
-  console.log("You clicked '" +  state.label + "' again");
-}
- -

The listener is passed a state object that contains all the button's properties.

- -

You can generate click events programmatically with the button's click() method.

- -

Disabling buttons

- -

You can disable a button by setting its disabled property to true. A disabled button will not generate click events and its icon will appear disabled:

- -

- -

Updating state

- -

You can update all the button's properties except for its id.

- -

By default, the button has global state: that is, its properties are the same across all open windows and tabs, and updating them updates the button's state across all open windows and tabs.

- -

You can set state to be specific to a window or tab using the button's state() method. To set state like this, call state() with 2 parameters:

- - - -

Here's an add-on with a button that disables itself when you click it, but only for the currently active window:

- -
var { ActionButton } = require("sdk/ui/button/action");
-
-var button = ActionButton({
-    id: "my-button",
-    label: "my button",
-    icon: {
-      "16": "./firefox-16.png",
-      "32": "./firefox-32.png"
-    },
-    onClick: disableForThisWindow
-  });
-
-function disableForThisWindow(state) {
-  button.state("window", {
-    disabled: true
-  });
-}
- -

To fetch the state for a specific window or tab, call state(), passing in the window or tab you are interested in, and it will return the state:

- -
var labelForActiveTab = button.state("tab").label;
- -

To learn more about this, see the API documentation for state().

- -

Destroying buttons

- -

When you've finished with a button, destroy it by calling its destroy() method. After that, any attempts to access any of its properties or to call any of its methods will throw exceptions.

- -

Globals

- -

Constructors

- -

ActionButton(options)

- -

Creates an action button.

- -
Parameters
- -

options : object
- Required options:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
idstring -

The button's ID. This is used internally to keep track of this button. The ID must be unique within your add-on.

-
labelstring -

The button's human-readable label. When the button is in the toolbar, this appears in a tooltip, and when the button is in the menu, it appears underneath the button as a legend.

-
iconurl, string, object -

One or more icons for the button. You can specify this in one of three ways: 

- -
    -
  • as a resource:// URL pointing at an icon file in your add-on's "data" directory, typically constructed using self.data.url(iconfile)
  • -
  • as a relative path: a string in the form "./iconfile", where "iconfile" is a relative path to the icon file beginning in your add-on's "data" directory
  • -
  • as an object, or dictionary of key-value pairs. Here you can specify a range of sizes for your button's icon. Each key-value pair specifies an icon: -
      -
    • each value specifies an image file as a resource:// URL or relative path.
    • -
    • each key must be a numeric string such as "16", or "32", which represents the size in pixels of the corresponding image.
    • -
    -
  • -
- -
-var { ActionButton } = require('sdk/ui/button/action');
-var self = require("sdk/self");
-
-var button1 = ActionButton({
-    id: "my-button1",
-    label: "my button1",
-    icon: self.data.url("firefox-16.png")
-  });
-
-var button2 = ActionButton({
-    id: "my-button2",
-    label: "my button2",
-    icon: "./firefox-16.png"
-  });
-
-var button3 = ActionButton({
-    id: "my-button3",
-    label: "my button3",
-    icon: {
-      "16" : "./firefox-16.png",
-      "32" : "./firefox-32.png",
-      "64" : "./firefox-64.png"
-    }
-  });
- -

If you use the final form, Firefox will automatically choose the best-fit icon for your button, depending on the device screen resolution and where the button is in the UI. On a device with a "normal" screen resolution, the toolbar has space for 18 x 18 pixels and the menu panel has space for 32 x 32 pixels. On a high resolution screen (such as a HiDPI display), these are doubled to 36 x 36 and 64 x 64 pixels, respectively. So you can supply three icon files:

- -
-icon: {
-  "16": "./addon16.png",
-  "32": "./addon32.png",
-  "64": "./addon64.png"
-}
- -

This will look fine in both toolbar and menu panel, and for both screen resolutions. However, the icons in the toolbar will not quite fill the space available, so you can instead supply four icons:

- -
-icon: {
-  "18": "./addon18.png", // toolbar icon non HiDPI
-  "32": "./addon32.png", // menu panel icon non HiDPI
-  "36": "./addon36.png", // toolbar icon HiDPI
-  "64": "./addon64.png"  // menu panel icon HiDPI
-}
-
-
- -

Optional options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameType 
disabledboolean -

Determines whether the button is disabled. Disabled buttons appear disabled in the UI, and do not respond to clicks. Defaults to false.

-
onClickfunction -

Click handler for the button.

-
badgeNumber or String -
-

New in Firefox 36.

-
- -

Badge to attach to the button.

- -

The badge can contain as many characters (or digits) as you like, but only the first four will be displayed.

-
badgeColorCSS <color> value -
-

New in Firefox 36.

-
- -

Color for the badge. If badgeColor is omitted and badge is specified, then the badge is red.

-
- -

ActionButton

- -

Methods

- -

click()

- -

Click the button. This will cause the button to generate the click event:

- -
var { ActionButton } = require('sdk/ui/button/action');
-
-var button = ActionButton({
-  id: "my-button",
-  label: "my button",
-  icon: {
-    "16": "./firefox-16.png",
-    "32": "./firefox-32.png"
-  },
-  onClick: function(state) {
-      console.log("You clicked '" + state.label + "'");
-  }
-});
-
-button.click();
-
- -

state()

- -

Get or set the button's state for a specific window or tab.

- -

By default, a button's properties are global, meaning that they are the same across all open windows and tabs, and that if you update these properties, then they are updated across all windows and tabs. But sometimes you want a button attached to one window (or tab) to have a different state to a button attached to a different window (or tab). That's what state() is for.

- -

To set a button's properties for a specific window or tab, call state(), passing it the window or tab you want the property to apply to, and the property value to set. A special shortcut allows you to pass the string "window" or "tab" to select the currently active window or tab.

- -

For example, if you have a button like this:

- -
var { ActionButton } = require('sdk/ui/button/action');
-
-var button = ActionButton({
-  id: "my-button",
-  label: "default",
-  icon: "./firefox-16.png"
-});
- -

You can change its label for only the currently active window like this:

- -
button.state("window", {
-  "label" : "window-specific label"
-});
- -

You can change its label for only the currently active tab like this:

- -
button.state("tab", {
-  "label" : "tab-specific label"
-});
-
- -

To fetch the button state for a specific window or tab, call state(), passing it the window or tab you're interested in, and it will return a state object containing all the properties for the button associated with that window or tab. Again. you can use the strings "window" or "tab" as shortcuts. For example, this add-on:

- - - -
var { ActionButton } = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = ActionButton({
-  id: "my-button",
-  label: "default label",
-  icon: "./firefox-16.png"
-});
-
-tabs.open({
-  url: "https://mozilla.org/",
-  onOpen: onNewTab
-});
-
-function onNewTab(tab) {
-  // Modify the label only for the new tab
-  button.state(tab, {
-    "label" : "tab-specific label"
-  });
-
-  // access the global label -> "default label"
-  console.log(button.label);
-
-  // access the window's label -> "default label"
-  console.log(button.state("window").label);
-
-  // access the first tab's label -> "default label"
-  console.log(button.state(tabs[0]).label);
-
-  // access the second tab's label -> "tab-specific label"
-  console.log(button.state(tabs[1]).label);
-}
- -

Setting a property won't affect a more-specific property setting. For example, if you have a window with two tabs, and you set a tab-specific label, then set the window-specific label, this will not overwrite the tab-specific label:

- -
var { ActionButton } = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = ActionButton({
-  id: "my-button",
-  label: "default label",
-  icon: "./firefox-16.png"
-});
-
-tabs.open({
-  url: "https://mozilla.org/",
-  onOpen: onNewTab
-});
-
-function onNewTab(tab) {
-  // Modify the label only for the new tab
-  button.state(tab, {
-    "label" : "tab-specific label"
-  });
-
-  // Modify the label for the window
-  button.state("window", {
-    "label" : "window-specific label"
-  });
-
-  // access the global label -> "default label"
-  console.log(button.label);
-
-  // access the window's label -> "window-specific label"
-  console.log(button.state("window").label);
-
-  // access the first tab's label -> "window-specific label"
-  console.log(button.state(tabs[0]).label);
-
-  // access the second tab's label -> "tab-specific label"
-  console.log(button.state(tabs[1]).label);
-}
- -

The best way to think of this is as a tree: the global state is the root, followed by the state for each window, followed by the state for each tab in a window. If a property value for a node in the tree has not been set explicitly using state(), then it inherits its value from the next level up. So if you have one window containing two tabs, and have set the button's label only for tab A, then tab B will inherit label's value from the window, and changing the value for the window will implicitly change the value for tab B.

- -

To delete a tab- or window-specific state, assign null to the property. After that, the property will inherit its value from the less-specific state as before:

- -
var { ActionButton } = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = ActionButton({
-  id: "my-button",
-  label: "default label",
-  icon: "./firefox-16.png"
-});
-
-tabs.open({
-  url: "https://mozilla.org/",
-  onOpen: onNewTab
-});
-
-function onNewTab(tab) {
-  // Modify the label only for the new tab
-  button.state(tab, {
-    "label" : "tab-specific label"
-  });
-
-  // Modify the label for the window
-  button.state("window", {
-    "label" : "window-specific label"
-  });
-
-  // access the global label -> "default label"
-  console.log(button.label);
-
-  // access the window's label -> "window-specific label"
-  console.log(button.state("window").label);
-
-  // access the first tab's label -> "window-specific label"
-  console.log(button.state(tabs[0]).label);
-
-  // access the second tab's label -> "tab-specific label"
-  console.log(button.state(tabs[1]).label);
-
-  // Reset the tab-specific state
-  button.state(tab, null);
-
-  // access the second tab's label -> "window-specific label"
-  console.log(button.state(tabs[1]).label);
-}
- -

Finally, you can pass the button itself into state(). This is an alternative way to set or get the global state. The reason for using this, rather than setting properties individually, is that you can define an object with the properties to set in one place, then apply it to the global state with a single line:

- -
const defaultState = {
-  "label": "default label",
-  "icon": "./default.png",
-}
-
-const differentState = {
-  "label": "different label",
-  "icon": "./different.png",
-}
-
-var { ActionButton } = require("sdk/ui/button/action");
-
-var button = ActionButton({
-    id: "default-label",
-    label: "default label",
-    icon: "./default.png",
-    onClick: function(state) {
-      if (button.label == "default label") {
-        button.state(button, differentState);
-      }
-      else {
-        button.state(button, defaultState);
-      }
-      console.log(button.state(button).label);
-      console.log(button.state(button).icon);
-    }
-  });
-
- -
Parameters
- -

target : button, tab, window, string

- - - -

state : object, null
- Include this parameter only if you are setting state. It is an object containing all the properties you wish to set. For example:

- -
button.state("tab", {
-  "label" : "tab-specific label",
-  "icon": "./tab-specific-icon.ico"
-});
- -

To reset state, pass null:

- -
button.state("tab", null);
- -
Returns
- -

state : if you have passed the second state argument to make this function a setter, it returns undefined. Otherwise, it functions as a getter and returns the button's state for the specified object. This logs the state for the button associated with the currently active tab:

- -
console.log(button.state("tab"));
- -

This object represents a snapshot of the state at the time state() is called. It is not kept up to date with changes made to the button:

- -
button.label = "foo";
-var state = button.state(button);
-button.label = "bar";
-console.log(state.label) // foo
- -

on()

- -

Add a listener to an event emitted by the button. The button only emits one type of event, click:

- -
button.on("click", handleClick)
-
-function handleClick(state) {
-  console.log("button '" + state.label + "' was clicked");
-}
- -
Parameters
- -

event : string
- The event to listen for. Action buttons only emit one type of event, "click".

- -

listener : function
- Function that will be called on click.

- -

once()

- -

Assign a listener to the first occurrence only of an event emitted by the button. The button only emits one type of event, click. The listener is automatically removed after the first time the event is emitted.

- -
Parameters
- -

event : string
- The event to listen for. Action buttons only emit one type of event, "click".

- -

listener : function
- Function that will be called on click.

- -

removeListener()

- -

Removes an event listener. For example, this code is equivalent to once():

- -
button.on("click", handleClick)
-
-function handleClick(state) {
-  console.log("button '" + state.label + "' was clicked");
-  button.removeListener("click", handleClick);
-} 
- -
Parameters
- -

event : string
- The event to listener is listening for. Action buttons only emit one type of event, "click".

- -

listener : function
- The listener to remove.

- -

destroy()

- -

Destroy the button. After calling this function, the button will no longer appear in the UI, and accessing any of its properties or methods will throw an error.

- -

Properties

- -

id

- -

The button's unique ID. This is read-only.

- -

label

- -

The button's label.

- -

icon

- -

The button's icon or icons, as a URL, relative path, or object containing a set of key-value pairs.

- -

disabled

- -

Boolean property indicating whether or not the button is disabled.

- -

badge

- -
-

New in Firefox 36.

-
- -

Value to attach to the button as a badge. May be a number or a string.

- -

The badge can contain as many characters (or digits) as you like, but only the first four will be displayed.

- -

badgeColor

- -
-

New in Firefox 36.

-
- -

Color for the badge, specified as a CSS <color> value.

- -

Events

- -

click

- -

This event is emitted when a user clicks the button or your add-on calls the button's click() method.

- -
Arguments
- -

state : The button's state. This contains all the button's properties.

diff --git a/files/fr/mozilla/add-ons/sdk/tools/cfx_to_jpm/index.html b/files/fr/mozilla/add-ons/sdk/tools/cfx_to_jpm/index.html deleted file mode 100644 index e8b50f5006..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tools/cfx_to_jpm/index.html +++ /dev/null @@ -1,192 +0,0 @@ ---- -title: De cfx à jpm -slug: Mozilla/Add-ons/SDK/Tools/cfx_to_jpm -translation_of: Archive/Add-ons/Add-on_SDK/Tools/cfx_to_jpm ---- -
-

L'Add-on SDK inclut un outil de ligne de commande que vous utilisez pour initialiser, exécuter, tester, et empaqueter des add-ons. L'outil actuel est appelé jpm, il est basé sur Node.js . Il remplace l'outil cfx.

- -

Vous pouvez utiliser jpm à partir de Firefox 38.

- -

Cet article met en évidence les principales différences entre cfx et jpm.

-
- -

Un guide pour travailler avec jpm si vous êtes déjà familier avec cfx.

- -

Installation

- -

cfx est basée sur Python et est distribué comme un fichier zip. jpm est baser sur Node.js qui est distribué par npm . Donc, pour jpm vous n'avez pas besoin de Python, mais vous avez besoin npm.

- -

Pour obtenir les mises de cfx vous deviez télécharger et extraire un fichier zip, tandis que pour obtenir la nouvelle version de jpm, utilisez npm update .

- -

Pour obtenir des instructions d'installation de jmp, consultez la section de l' Installation dans la référentiel de jmp.

- -

Activation

- -

Vous devez appeler cfx activate avant de pouvoir utiliser cfx, et cela ne fonctionne que dans le shell de commande de courant:. Si vous ouvrez un nouveau shell, vous devez appeler activate de nouveau

- -

Avec jpm, pas d'activation. Une fois qu'il est installé, vous pouvez simplement l'utiliser.

- -

Incompatibilités

- -

Dans la plupart cas, les add-ons créés avec cfx fonctionnent bien avec jpm. Cependant, il y a quelques différences que vous devez connaitre.

- -

Add-on ID

- -

L'ID de add-on est l'identifiant unique de votre add-on. Dans un xpi, c'est le champ ID dans le fichier Manifest d'instalation de l'add-on (install.rdf).

- -

L'identifiant est utilisé à des fins variées. Par exemple: addons.mozilla.org l'utilise pour distinguer entre les nouvelles add-ons et les mises à jour d'add-ons existantes, et le module simple-storage l'utilise pour déterminer lesquelles des données stockées appartiennent à tel add-on.

- -

Manipulation avec l'ID cfx

- -

Lorsque vous utilisez cfx, l'ID est tiré du champ id dans le fichier de package.json de l'add-on. Vous pouvez éditer ce fichier pour créer votre propre identité, mais si vous ne le faites pas, cfx va le générer pour vous, ce qui va ressembler à quelque chose comme "jid1-F3BoogbjQJE67A". L'ID Add-on doit être l'un des deux types suivant : un GUID ou une chaîne qui comprend un symbole "@". Le SDK ne prévoit que le dernier format, et si l'ID dans package.json ne contient pas de "@", cfx xpi ajouter "@jetpack" dans le champ de package.json, ce qui transforme l'ID de l'add-on.

- -

Donc: si vous n'avez jamais manipulé l'ID lors de l'utilisation cfx, alors la valeur dans le package.json de votre add-on sera quelque chose comme "jid1-F3BoogbjQJE67A", et l'ID correspondant dans la install.rdf sera "jid1-F3BoogbjQJE67A@jetpack".

- -

Manipulation d'ID avec jpm

- -

Lorsque vous créez un xpi avec jpm xpi:

- - - -

Ce que vous devez faire

- -

Tout cela signifie que: si votre package.json contient un champ id, et sa valeur ne contient pas «@», alors vous devez ajouter "@jetpack» lors du passage à jpm .

- -

Si vous faites cela, l'ID de l'add-on sera la même que l'id utilisée avec cfx.

- -

Point d'entrée

- -

Le point d'entrée de l'add-on est le fichier qui est exécutée lorsque l'add-on a besoin de s'initialiser: par exemple, au démarrage de Firefox, ou lorsque l'add-on est installé, activé, ou mis à niveau. Avec cfx, la valeur par défaut à "lib/main.js", même si elle peut être réglée sur un autre fichier en utilisant le main champ dans le package.json .

- -

Dans jpm, le point d'entrée par défaut est "index.js". Donc, lors de la commutation vers jpm:

- - - -

Chargement des modules

- -

L'outil jpm utilise la même logique que Node.js pour déterminer comment résoudre l'argument require(). Dans la plupart des cas, c'est la même logique que cfx. Cependant, il existe quelques différences, parce certaines compatibilités ont été retirées.

- -

Requérir à des modules locaux

- -

Supposons que votre add-on est structuré en modules séparés :

- - - -

Lorsque vous voulez utiliser un module "utils.js" dans "main.js", vous devez utiliser un chemin relatif à "main.js", et le préfixer avec "./" pour indiquer que c'est un chemin relatif:

- -
var utils = require("./utils");
- -

Cependant, avec cfx vous êtes également autorisé à omettre le "./":

- -
var utils = require("utils"); // this will not work with jpm!
- -

Cette seconde forme ne fonctionnera pas avec jpm.

- -

Requérir des modules de code de test

- -

Similarly, suppose you've written some tests for your add-on:

- - - -

Avec cfx, le code de "test-my-addon.js" peut importer "my-addon.js" en utilisant une déclaration de ce genre:

- -
var my_addon = require("my-addon"); // ceci ne fonctionne pas avec jpm!
- -

Avec jpm, vous devez spécifier le chemin vers «my-addon" explicitement, en utilisant un chemin relatif:

- -
var my_addon = require("../lib/my-addon");
-
- -

Modules tiers

- -

Le SDK a toujours soutenu les modules tiers: les développeurs peuvent écrire leurs propres modules qui étendent les API du SDK ou ajouter de nouvelles API, et d'autres add-on peuvent faire usage de ces modules de la même manière qu'ils utilisent les modules intégré au SDK.

- -

Dans jpm cette façon d'utiliser des modules tiers ne fonctionne plus. Au lieu de cela, jpm n'accepte que les modules tiers hébergés sur la npm, vous pouvez les utiliser en les installant à partir de la npm dans l'arbre de répertoire de votre add-on. Voir le tutoriel utilisant des modules tiers avec jpm.

- -

Les commandes et les options de commande

- -

Commandes définitivement retiré

- -

jpm ne soutient plus les commandes cfx "interne".

- -

Options définitivement retiré

- -

jpm ne soutient plus :

- -
--extra-packages
---use-config
---package-path
---pkgdir
---no-strip-xpi
---harness-option
---manifest-overload
---output-file
---templatedir
---keydir
---profiledir
---overload-modules
---static-args
---app
---no-run
---addons
---e10s
---logfile
---dependencies
---test-runner-pkg
- -

Au lieu de --profiledir et de --overload-modules, utilisez --profile et --overload

- -

Champs Package.json

- -

Beaucoup de champs package.json sont des commandes implicites de cfx. Dans jpm, nous avons supprimé le soutien de certains de ces domaines, et travaillons toujours sur le soutien des autres.

- -

Champs définitivement retiré

- - - -

Echappement dans Package.json

- -

Où avec cfx vous auriez dû échapper avec 2 voir 3 barres obliques inverses (\), jpm n'en a besoin que d'une.

- -

 

diff --git a/files/fr/mozilla/add-ons/sdk/tools/index.html b/files/fr/mozilla/add-ons/sdk/tools/index.html deleted file mode 100644 index 89f1db963b..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tools/index.html +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Tools -slug: Mozilla/Add-ons/SDK/Tools -tags: - - Add-on SDK - - CFX - - JPM - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/Tools ---- -

Les articles répertoriés ici fournissent une référence pour les outils du SDK:

- -

{{ LandingPageListSubpages ("/en-US/Add-ons/SDK/Tools", 7) }}

diff --git a/files/fr/mozilla/add-ons/sdk/tools/jpm/index.html b/files/fr/mozilla/add-ons/sdk/tools/jpm/index.html deleted file mode 100644 index c079f3b0b5..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tools/jpm/index.html +++ /dev/null @@ -1,600 +0,0 @@ ---- -title: jpm -slug: Mozilla/Add-ons/SDK/Tools/jpm -translation_of: Archive/Add-ons/Add-on_SDK/Tools/jpm ---- -
-

Vous pouvez utiliser jpm pour Firefox 38 et au-delà.

- -

Cet article est la référence pour jpm.

-
- -

The Node-based replacement for cfx. Enables you to test, run, and package add-ons.

- -

Voir aussi le tutoriel jpm pour débuter.

- -

jpm usage is:

- -
jpm [command] [options]
-
- -

jpm supports the following global options:

- -
-h, --help        - show a help message and exit
--V, --version     - print the jpm version number
-
- -

Installation

- -

jpm is distributed using the node package manager npm, so to get jpm you need to have npm installed, if you haven't already. npm is included in Node.js. To install npm, you can either visit nodejs.org and download the latest binary or if you have a package manager like APT installed on your system, you might want to use this package manager to install npm. For example, if you are using an Ubuntu or Debian operating system, execute sudo apt-get install nodejs followed by sudo apt-get install npm in a terminal window.

- -

After that you can install jpm just as you would any other npm package:

- -
npm install jpm --global
- -

Depending on your setup, you might need to run this as an administrator:

- -
sudo npm install jpm --global
- -

Or, you can install jpm using git:

- -
git clone https://github.com/mozilla-jetpack/jpm.git
-cd jpm
-npm install
-npm link
-
- -

À l'invite de commande, tapez:

- -
jpm
- -

You should see a screen summarizing the available jpm commands. Note that unlike cfx, jpm is available in every command prompt you start, as long as you installed it with the --global flag.

- -

If you get an error message saying  /usr/bin/env: node: No such file or directory and you have installed nodejs through a package manager, nodejs may have been installed in the wrong directory. A corresponding topic at stackoverflow.org might help you to solve this problem. Basically, you can solve it by creating a symlink to the node:

- -
sudo ln -s "$(which nodejs)" /usr/bin/node
- -

Problems?

- -

If you don't see this, ask for help. SDK users and project team members discuss problems and proposals on the project mailing list. Someone else may have had the same problem you do, so try searching the list. You're welcome to post a question, too. You can also chat with other SDK users in #jetpack on Mozilla's IRC network.

- -

Command reference

- -

There are six jpm commands:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
jpm initCreate a skeleton add-on as a starting point for your own add-on.
jpm runLaunch an instance of Firefox with your add-on installed.
jpm testRuns your add-on's unit tests.
jpm xpiPackage your add-on as an XPI file, which is the install file format for Firefox add-ons.
jpm postPackage your add-on as an XPI file, then post it to some url.
jpm watchpostPackage your add-on as an XPI file whenever there is a file changed, and post that to some url.
jpm signPackage your add-on as an XPI file, then retrieve a new XPI signed by Mozilla.
- -

jpm init

- -

This command initializes a new add-on from scratch.

- -

Create a new directory, change into it, and run jpm init.

- -
mkdir my-addon
-cd my-addon
-jpm init
- -

You'll then be asked to supply some information about your add-on: this will be used to create your add-on's package.json file.

- - - -

Most of these fields have a default, which is shown in brackets after the question. If you just press Enter, your add-on will get the default value.

- -

Once you've supplied a value or accepted the default for these properties, you'll be shown the complete contents of "package.json" and asked to accept it.

- -

Then jpm will create an skeleton add-on, as a starting point for your own add-on development, with the following file structure:

- - - -

jpm run

- -

This command runs a new instance of Firefox with the add-on installed:

- -
jpm run
- -

jpm run accepts the following options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-b --binary BINARY -

Use the version of Firefox specified in BINARY. BINARY may be specified as a full path or as a path relative to the current directory.

- -
-jpm run -b /path/to/Firefox/Nightly
- See Selecting a browser version.
--binary-args CMDARGS -

Pass extra arguments to Firefox.

- -

For example, to pass the -jsconsole argument to Firefox, which will launch the Browser Console, try the following:

- -
-jpm run --binary-args -jsconsole
- -

To pass multiple arguments, or arguments containing spaces, quote them:

- -
-jpm run --binary-args '-url mzl.la -jsconsole'
-
--debugRun the add-on debugger attached to the add-on.
-o --overload PATH -

Rather than use the SDK modules built into Firefox, use the modules found at PATH. If -o is specified and PATH is omitted, jpm will look for the JETPACK_ROOT environment variable and use its value as the path.

- -

See Overloading the built-in modules for more information.

-
-p --profile= PROFILE -

By default, jpm uses a clean temporary Firefox profile each time you call jpm run. Use the --profile option to instruct jpm to launch Firefox with an existing profile.

- -

The PROFILE value may be a profile name or the path to the profile.

- -

See Using profiles for more information.

-
-v --verboseVerbose operation.
--no-copy -
Use with caution because jpm run|test changes many preferences, never use with your main profile.
- -
This only applies when --profile is used.
- Disables the copying of the profile used, which allows one to reuse a profile.
 
- -

jpm test

- -

Use this command to run an add-on's unit tests. It will:

- - - -
jpm test
-
- -

See the tutorial on unit testing and the reference documentation for the assert module for more details on this.

- -

jpm test accepts the following options:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-b --binary BINARY -

Use the version of Firefox specified in BINARY. BINARY may be specified as a full path or as a path relative to the current directory.

- -
-jpm test -b /path/to/Firefox/Nightly
- -

See Selecting a browser version.

-
--binary-args CMDARGS -

Pass extra arguments to Firefox.

- -

For example, to pass the -jsconsole argument to Firefox, which will launch the Browser Console, try the following:

- -
-jpm test --binary-args -jsconsole
- -

To pass multiple arguments, or arguments containing spaces, quote them:

- -
-jpm test --binary-args '-url mzl.la -jsconsole'
-
--debugRun the add-on debugger attached to the add-on.
-f --filter FILE[:TEST] -

Only run tests whose filenames match FILE and optionally match TEST, both regexps.

- -
-jpm test --filter base64:btoa
- -

The above command only runs tests in files whose names contain "base64", and in those files only runs tests whose names contain "btoa".

-
-o --overload PATH -

Rather than use the SDK modules built into Firefox, use the modules found at PATH. If -o is specified and PATH is omitted, jpm will look for the JETPACK_ROOT environment variable and use its value as the path.

- -

See Overloading the built-in modules for more information.

-
-p --profile PROFILE -

By default, jpm uses a clean temporary Firefox profile each time you call jpm run. Use the --profile option to instruct jpm to launch Firefox with an existing profile.

- -

The PROFILE value may be a profile name or the path to the profile.

- -

See Using profiles for more information.

-
--stop-on-error -

By default jpm test keeps running tests even after tests fail. Specify --stop-on-error to stop running tests after the first failure:

- -
-jpm test --stop-on-error
-
--tbplPrint test output in Treeherder format
--times NUMBER -

Run tests NUMBER of times:

- -
-jpm test --times 2
-
-v --verboseVerbose operation.
--no-copy -
Use with caution because jpm run|test changes many preferences, never use with your main profile.
- -
This only applies when --profile is used.
- Disables the copying of the profile used, which allows one to reuse a profile.
- -

jpm xpi

- -

This command packages the add-on as an XPI file, which is the install file format for Mozilla add-ons.

- -
jpm xpi
- -

It looks for a file called package.json in the current directory and creates the corresponding XPI file. It ignores any ZIPs or XPIs in the add-on's root, and any test files. It includes all other files. If you want to exclude extra files, see the .jpmignore file.

- -

Once you have built an XPI file you can distribute your add-on by submitting it to addons.mozilla.org.

- -

jpm xpi accepts the following option:

- - - - - - - - -
-v --verbose -

Verbose operation:

- -
-jpm xpi -v
-
- -

jpm post

- -

This command packages the add-on as an XPI file then posts it to some url.

- -
jpm post
- -

It looks for a file called package.json in the current directory and creates a XPI file with which to post to the --post-url.

- -

jpm post accepts the following options:

- - - - - - - - - - - - -
--post-url URL -

The url to post the extension to after creating a XPI.

- -
-jpm post --post-url http://localhost:8888/
- -

See Using Post and Watchpost for more information.

-
-v --verbose -

Verbose operation:

- -
-jpm post --post-url http://localhost:8888/ -v
-
- -

jpm watchpost

- -

This command packages the add-on as an XPI file then posts it to some url whenever a file in the current working directory changes.

- -
jpm watchpost
- -

Creates a XPI whenever a file in the current working directory changes and posts that to the --post-url.

- -

jpm watchpost accepts the following options:

- - - - - - - - - - - - -
--post-url URL -

The url to post the extension to after creating a XPI.

- -
-jpm watchpost --post-url http://localhost:8888/
- -

See Using Post and Watchpost for more information.

-
-v --verbose -

Verbose operation:

- -
-jpm watchpost --post-url http://localhost:8888/ -v
-
- -

jpm sign

- -
-

This feature is only supported from jpm 1.0.4 onwards.

-
- -

This command retrieves a new XPI for your add-on signed by Mozilla. This allows you to self-host your add-on so that users can install it without error when signed add-ons are required.

- -
jpm sign --api-key ${AMO_API_KEY} --api-secret ${AMO_API_SECRET}
- -

This creates an XPI, submits it to the addons.mozilla.org signing API, then downloads a new signed XPI to the working directory if it passes validation. Here are some possible outcomes of running the sign command:

- - - -

Under the hood, jpm sign creates an unlisted add-on inside addons.mozilla.org which means you must distribute the XPI file yourself in order for your users to install it. If you need to create a listed add-on, just submit it directly to addons.mozilla.org where it will be signed automatically. See the debugging section if you're experiencing difficulty installing a signed add-on.

- -

jpm sign accepts the following options:

- - - - - - - - - - - - - - - - -
--api-key API_KEY -

API access key (string) generated on the addons.mozilla.org key management page.

-
--api-secret API_SECRET -

API access secret (string) generated on the addons.mozilla.org key management page. This value should be guarded with care and never checked into version control. If your secret is compromised, another developer could upload add-ons to your account. You should revoke and regenerate compromised API credentials immediately.

-
--api-url-prefix http://.../api -

An optional API URL prefix in case you'd like to use a pre-production signing API. Here is an example of using a dev instance of addons.mozilla.org :

- -
-jpm sign ... --api-url-prefix https://addons-dev.allizom.org/api/v3
-
- -

Techniques

- -

Selecting a browser version

- -

By default, jpm run and jpm test will run the release version of Firefox. You can instruct jpm to use a different version in one of two ways:

- - - -

Using .jpmignore to ignore files

- -

Using .jpmignore is similar to using .gitignore with git, .hgignore with Mercurial, or .npmignore with npm. By using this file you can let jpm know which files you would like it to ignore when building a .xpi file with jpm xpi.

- -

Here is an example:

- -
# Ignore .DS_Store files created by mac
-.DS_Store
-
-# Ignore any zip or xpi files
-*.zip
-*.xpi
-
- -

A .jpmignore file with the above contents would ignore all zip files and .DS_Store files from the xpi generated by jpm xpi.

- -

Using profiles

- -

By default, jpm run uses a new profile each time it is executed. This means that any profile-specific data entered from one run of jpm will not, by default, be available in the next run.

- -

This includes, for example, any extra add-ons you installed, or your history, or any data stored using the simple-storage API.

- -

To make jpm use a specific profile, pass the --profile option, specifying the name of the profile you wish to use, or the path to the profile.

- -
jpm run --profile boogaloo
-
- -
jpm run --profile path/to/boogaloo
- -

If you supply --profile but its argument is not the name of or path to an existing profile, jpm will open the profile manager,  enabling you to select and existing profile or create a new one:

- -
jpm run --profile i-dont-exist
- -

Developing without browser restarts

- -

Because jpm run restarts the browser each time you invoke it, it can be a little cumbersome if you are making very frequent changes to an add-on. An alternative development model is to use the Extension Auto-Installer add-on: this listens for new XPI files on a specified port and installs them automatically. That way you can test new changes without needing to restart the browser:

- - - -

You could even automate this workflow with a simple script. For example:

- -
jpm watchpost --post-url http://localhost:8888/
-
- -

Note that the logging level defined for the console is different when you use this method, compared to the logging level used when an add-on is run using jpm run. This means that if you want to see output from console.log() messages, you'll have to tweak a setting. See the documentation on logging levels for the details on this.

- -

Overloading the built-in modules

- -

The SDK modules you use to implement your add-on are built into Firefox. When you run or package an add-on using jpm run or jpm xpi, the add-on will use the versions of the modules in the version of Firefox that hosts it.

- -

As an add-on developer, this is usually what you want. But if you're developing the SDK modules themselves, of course, it isn't. In this case you need to:

- - - -
jpm run -o
-
- -

This instructs jpm to use the local copies of the SDK modules, not the ones in Firefox. If you don't want to set the JETPACK_ROOT environment variable, you can pass the location of your copy of the SDK modules along with -o:

- -
jpm run -o "/path/to/SDK/"
- -

Supporting updates for self-hosted add-ons

- -
-

This feature is only supported from jpm 1.0.3 onwards.

-
- -

When you make updates to your add-on to add features or fix bugs, you'll want any previously installed versions of the add-on to update themselves to the new version.

- -

If you list your add-on on addons.mozilla.org, then all you have to do here is submit the new version; add-ons default to checking addons.mozilla.org for new versions of themselves. You can stop reading this section.

- -

If you do not list your add-on on addons.mozilla.org, you need to generate a Mozilla-signed XPI and tell Firefox where it can find new versions of your add-on. The way this works is:

- - - -

To do this, include two extra keys in package.json:

- - - -

- -

If you include updateURL and updateLink (and also updateKey in case updateURL is not HTTPS), then jpm xpi will:

- - - -

You then host the update manifest at updateURL, and host new versions of the XPI at updateLink.

- -

For some more details on this, see Automatic Add-on Update Checking.

diff --git a/files/fr/mozilla/add-ons/sdk/tutorials/add_a_context_menu_item/index.html b/files/fr/mozilla/add-ons/sdk/tutorials/add_a_context_menu_item/index.html deleted file mode 100644 index 1ad8700c3d..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tutorials/add_a_context_menu_item/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Add a Context Menu Item -slug: Mozilla/Add-ons/SDK/Tutorials/Add_a_Context_Menu_Item -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Add_a_Context_Menu_Item ---- -

{{AddonSidebar}}

- -
-

Pour suivre ce tuto , vous aurez besoin d'avoir appris des rudiments de jpm.

-
- -

Pour ajouter des éléments et des sous-menus dans le menu contextuel de Firefox, utilisez le module context-menu.

- -

Voici un add-on qui ajoute un nouvel élément de menu contextuel. L'élément est affiché à chaque fois qu'une séléction est opérée dans la page. Si l'élément est cliqué, la séléction est envoyé au code principal.

- -
var contextMenu = require("sdk/context-menu");
-var menuItem = contextMenu.Item({
-  label: "Log Selection",
-  context: contextMenu.SelectionContext(),
-  contentScript: 'self.on("click", function () {' +
-                 '  var text = window.getSelection().toString();' +
-                 '  self.postMessage(text);' +
-                 '});',
-  onMessage: function (selectionText) {
-    console.log(selectionText);
-  }
-});
- -

Executer l'add-on, charger une page web, séléctioner un texte et faites un clic droit, le nouvel élément doit apparaitre:

- -

Click it, and the selection is logged to the console (or the shell, if you're running an instance of Firefox from the command line):

- -
info: elephantine lizard
-
- -

Details

- -

All this add-on does is to construct a context menu item. You don't need to add it: once you have constructed the item, it is automatically added in the correct context. The constructor in this case takes four options: label, context, contentScript, and onMessage.

- -

label

- -

The label is just the string that's displayed.

- -

context

- -

The context describes the circumstances in which the item should be shown. The context-menu module provides a number of simple built-in contexts, including this SelectionContext(), which means: display the item when something on the page is selected.

- -

If these simple contexts aren't enough, you can define more sophisticated contexts using scripts.

- -

contentScript

- -

This attaches a script to the item. In this case the script listens for the user to click on the item, then sends a message to the add-on containing the selected text.

- -

onMessage

- -

The onMessage property provides a way for the add-on code to respond to messages from the script attached to the context menu item. In this case it just logs the selected text.

- -

So:

- -
    -
  1. the user clicks the item
  2. -
  3. the content script's click event fires, and the content script retrieves the selected text and sends a message to the add-on
  4. -
  5. the add-on's message event fires, and the add-on code's handler function is passed the selected text, which it logs
  6. -
- -

More options

- -

Adding an image

- -

You can add an image to a context menu item with the image option. This is a URL pointing to a 16x16 icon that's displayed at the left side of the context menu item. Typically you'd store the image in your add-on's "data" directory, and construct the URL using self.data.url():

- -
var self = require("sdk/self");
-
-var contextMenu = require("sdk/context-menu");
-var menuItem = contextMenu.Item({
-  label: "Log Selection",
-  context: contextMenu.SelectionContext(),
-  contentScript: 'self.on("click", function () {' +
-                 '  var text = window.getSelection().toString();' +
-                 '  self.postMessage(text);' +
-                 '});',
-  image: self.data.url("icon-16.png"),
-  onMessage: function (selectionText) {
-    console.log(selectionText);
-  }
-});
- -

Adding an access key

- -
-

New in Firefox 35.

-
- -

From Firefox 35 you can specify an access key using the accessKey option. This must be a single-character string. Pressing the key selects the option when the context menu is open:

- -
var contextMenu = require("sdk/context-menu");
-var menuItem = contextMenu.Item({
-  label: "Log Selection",
-  context: contextMenu.SelectionContext(),
-  contentScript: 'self.on("click", function () {' +
-                 '  var text = window.getSelection().toString();' +
-                 '  self.postMessage(text);' +
-                 '});',
-  accessKey: "l",
-  onMessage: function (selectionText) {
-    console.log(selectionText);
-  }
-});
-
- -

 

- -

Learning More

- -

To learn more about the context-menu module, see the context-menu API reference.

diff --git a/files/fr/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html b/files/fr/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html deleted file mode 100644 index 09fa1442a9..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Commencer avec jpm -slug: Mozilla/Add-ons/SDK/Tutorials/Getting_Started_(jpm) -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Getting_Started_(jpm) ---- -
-

The Add-on SDK includes a command-line tool that you use to initialize, run, test, and package add-ons. The current tool is called jpm, and is based on Node.js. It replaces the old cfx tool.

- -

You can use jpm from Firefox 38 onwards.

- -

This article describes how to develop using jpm.

-
- -

Ce tutoriel est un exemple de création d'une add-on en utilisant le SDK.

- -

Prérequis

- -

Pour créer des add-ons pour Firefox en utilisant le SDK, vous aurez besoin:

- - - -

Initialisation d'un add-on vide

- -

Dans l'invite de commande, créez un nouveau répertoire. Accédez à, tapez jpm init, et appuyez sur Entrée:

- -
mkdir my-addon
-cd my-addon
-jpm init
-
- -

Vous serez alors invité à fournir quelques informations sur votre add-on: elles seront utilisées pour créer votre fichier package.json. Pour l'instant, appuyez sur Entrée pour accepter la valeur par défaut pour chaque propriété. Pour plus d'informations sur jpm init, voir le commande de référence jpm .

- -

Une fois que vous avez fourni une valeur ou accepté la valeur par défaut pour ces propriétés, vous verrez le contenu complet de "package.json" que vous validerez.

- -

Mise en œuvre de l'add-on

- -

Maintenant, vous pouvez écrire le code de l'add-on. Sauf si vous avez changé la valeur du "point d'entrée"("main"dans package.json), allez dans le fichier "index.js" à la racine de votre add-on. Ce fichier a été créé dans l'étape précédente. Ouvrez-le et ajoutez le code suivant:

- -
var buttons = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = buttons.ActionButton({
-  id: "mozilla-link",
-  label: "Visit Mozilla",
-  icon: {
-    "16": "./icon-16.png",
-    "32": "./icon-32.png",
-    "64": "./icon-64.png"
-  },
-  onClick: handleClick
-});
-
-function handleClick(state) {
-  tabs.open("https://www.mozilla.org/");
-}
-
- -
-

Notez que par défaut le "point d'entrée" dans jpm est "index.js", ce qui signifie que votre fichier principal est "index.js", et il se trouve à la racine de votre add-on.

- -

Dans cfx, le "point d'entrée" par défaut est "main.js», il se trouve dans le répertoire "lib" sous la racine de l'add-on.

-
- -

Enregistrez le fichier.

- -

Ensuite, créez un répertoire appelé "data" à la racine de votre add-on, et enregistrer ces trois fichiers d'icônes dans "data" :

- - - - - - - - - - - - - - - - -
icon-16.png
icon-32.png
icon-64.png
- -

Retour à l'invite de commande, tapez:

- -
jpm run
- -

Ceci est la commande de jpm pour lancer une nouvelle instance de Firefox avec votre add-on installée.

- -

Si Firefox ne peut pas être localisé, vous devrez peut-être fournir le chemin d'accès (par exemple dans Ubuntu):

- - -
jpm run -b /usr/bin/firefox
- -
-

Vous pouvez egalement modifier le chemin dans le fichier \npm\node_modules\jpm\node_modules\fx-runner\lib\utils.js.

- -

Par exemple sous windos : var rootKey = '\\Programe Files\\Mozilla Firefox\\';

-
- -

Lorsque Firefox est lancé, dans le coin en haut à droite du navigateur, vous verrez une icône avec le logo de Firefox. Cliquez sur l'icône, et un nouvel onglet sera ouvert avec https://www.mozilla.org/ chargé.

- -

Voilà ce que fait cette add-on. Elle utilise deux modules: le module SDK button_action, qui vous permet d'ajouter des boutons dans le navigateur, et le module tabs, qui vous permet d'effectuer des opérations de base avec des onglets. Dans ce cas, nous avons créé un bouton dont l'icône est celle de Firefox, et ajouté un gestionnaire de clic qui charge la page d'accueil de Mozilla dans un nouvel onglet.

- -

Essayez d'éditer ce fichier. Par exemple, nous pourrions changer la page qui est chargé:

- -
var buttons = require('sdk/ui/button/action');
-var tabs = require("sdk/tabs");
-
-var button = buttons.ActionButton({
-  id: "mozilla-link",
-  label: "Visit Mozilla",
-  icon: {
-    "16": "./icon-16.png",
-    "32": "./icon-32.png",
-    "64": "./icon-64.png"
-  },
-  onClick: handleClick
-});
-
-function handleClick(state) {
-  tabs.open("https://developer.mozilla.org/");
-}
- -

À l'invite de commande, exécutez à nouveau jpm run. Vous ouvrirez cette fois en cliquant https://developer.mozilla.org/.

- -

Empaquetté l'add-on

- -

Lorsque vous avez terminé l'add-on et êtes prêt à la distribuer, vous aurez besoin de l'emballer dans un fichier XPI. C'est le format de fichier installable pour Firefox Add-ons. Vous pouvez distribuer xpi en les publiant sur https://addons.mozilla.org afin que les autres utilisateurs puissent la télécharger et l'installer.

- -

Pour construire un xpi, exécutez simplement la commande jpm xpi dans le répertoire de l'add-on:

- -
jpm xpi
-
- -

Vous devriez voir un message du type:

- -
JPM info Successfully created xpi at /path/to/getting-started/@getting-started.xpi
-
- -

Pour voir si cela a fonctionné, essayez d'installer le fichier xpi dans votre navigateur Firefox. Vous pouvez le faire en appuyant sur la combinaison de touches Ctrl+O (O+Cmd sur Mac) à partir de Firefox, ou en sélectionnant l'option "Ouvrir" dans le menu "Fichier" de Firefox. Cela fera apparaître une boîte de dialogue de sélection de fichier: naviguer vers le fichier "@getting-started.xpi", ouvrez-le et suivez les instructions pour installer l'add-on.

- -

Pour distribuer votre add-on, soumettre le fichier xpi à addons.mozilla.org ou exécuter jpm sign si vous souhaitez distribuer l'add-on sur votre propre serveur.

- -

Résumé

- -

Dans ce tutoriel, nous avons construit et emballé une add-on en utilisant trois commandes:

- - - -

Ce sont les trois principales commandes que vous utiliserez lors de l'élaboration d'add-ons SDK. Il y a une documentation de référence complète couvrant toutes les commandes que vous pouvez utiliser et toutes les options qu'elles prennent.

- -

Le code de add-on lui-même utilise deux modules de SDK, action bouton et tabs. Il ya une documentation de référence pour toute les APIs high-level et low-level dans le SDK.

- -

Et en suite?

- -

Pour avoir une idée de certaines des choses que vous pouvez faire avec les API du SDK, essayer de travailler avec certains tutoriels.

diff --git a/files/fr/mozilla/add-ons/sdk/tutorials/index.html b/files/fr/mozilla/add-ons/sdk/tutorials/index.html deleted file mode 100644 index d68fcfd2ac..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tutorials/index.html +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Tutoriels -slug: Mozilla/Add-ons/SDK/Tutorials -tags: - - Add-on SDK - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials ---- -

Cette page répertorie les articles sur la façon d'accomplir des tâches spécifiques en utilisant le SDK.

- -
-

Commencer

- -
-
-
-
Installation
-
Comment faire pour installer l'outil de jpm, que vous allez utiliser pour développer des add-ons.
-
- -
-
Dépannage
-
Quelques conseils pour résoudre les problèmes courants et obtenir de l'aide.
-
-
- -
-
-
Commencer
-
Démonstration de la création d'une add-on avec le SDK, en utilisant jpm.
-
-
-
- -
-

Créer des interfaces utilisateur

- -
-
-
-
Ajouter un bouton de barre d'outils
-
Attachez un bouton à la barre d'outils du module complémentaire Firefox.
-
Ajouter un élément de menu à Firefox
-
Ajoutez des éléments aux menus principaux de Firefox.
-
-
- -
-
-
Afficher une popup
-
Afficher une boîte de dialogue contextuelle (popup) implémentée avec HTML et JavaScript.
-
Ajouter un élément de menu contextuel
-
Ajoutez des éléments au menu contextuel de Firefox.
-
-
-
- -
-

Interagir avec le navigateur

- -
-
-
-
Ouvrir une page Web
-
Ouvrez une page Web dans un nouvel onglet ou une nouvelle fenêtre du navigateur à l'aide du module onglets et accédez à son contenu.
-
Écouter le chargement de la page
-
Utilisez le module onglets pour être averti lorsque de nouvelles pages Web sont chargées et accéder à leur contenu.
-
-
- -
-
-
Obtenir la liste des onglets ouverts
-
Utilisez le module onglets pour parcourir les onglets actuellement ouverts et accéder à leur contenu.
-
-
-
- -
-

Modifier les pages Web

- -
-
-
-
Modifier les pages Web en fonction de l'URL
-
Créez des filtres pour les pages Web en fonction de leur URL: chaque fois qu'une page Web dont l'URL correspond au filtre est chargée, exécutez un script spécifié.
-
-
- -
-
-
Modifier la page Web active
-
Chargez dynamiquement un script dans la page Web actuellement active.
-
-
-
- -
-

Techniques de développement

- -
-
-
-
Enregistrement
-
Enregistrez les messages sur la console à des fins de diagnostic.
-
Création de modules réutilisables
-
Structurez votre module complémentaire en modules séparés pour faciliter le développement, le débogage et la maintenance. Créez des paquets réutilisables contenant vos modules, afin que d'autres développeurs de modules complémentaires puissent également les utiliser.
-
Tests unitaires
-
Ecrire et exécuter des tests unitaires à l'aide du framework de test du SDK.
-
Autorité Chrome
-
Accédez à l'objet Components, permettant à votre module complémentaire de charger et d'utiliser n'importe quel objet XPCOM.
-
Création de cibles d'événements
-
Permettez aux objets que vous définissez d'émettre leurs propres événements.
-
-
- -
-
-
Écouter pour charger et décharger
-
Recevez des notifications lorsque votre module complémentaire est chargé ou déchargé par Firefox, et passez des arguments dans votre module complémentaire à partir de la ligne de commande.
-
Utilisation de modules tiers (jpm)
-
Installez et utilisez des modules supplémentaires qui ne sont pas fournis avec le SDK lui-même.
-
Localisation
-
Écriture de code localisable.
-
Développement mobile
-
Développez des modules complémentaires pour Firefox Mobile sur Android.
-
Débogueur de module complémentaire (Add-on)
-
Déboguez le JavaScript de votre module complémentaire.
-
-
-
- -
-

Mettre ensemble

- -
-
-
-
Module complémentaire Annotator
-
Présentation d'un module complémentaire relativement complexe.
-
-
-
diff --git a/files/fr/mozilla/add-ons/sdk/tutorials/l10n/index.html b/files/fr/mozilla/add-ons/sdk/tutorials/l10n/index.html deleted file mode 100644 index 4b9ca669e7..0000000000 --- a/files/fr/mozilla/add-ons/sdk/tutorials/l10n/index.html +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Localisation -slug: Mozilla/Add-ons/SDK/Tutorials/l10n -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/l10n ---- -

Le SDK supporte la localisation des chaînes figurant dans:

- - - -

Il ne le fait pas dans le CSS, les scripts anexe, ou les champs titre et description qui apparaissent dans le gestionnaire de modules complémentaires. Voir Limitations ci-dessous.

- -

Chaînes localisées

- -

Les chaînes traduites sont conservées dans un répertoire appelé "locale" sous votre répertoire principale de l'add-on , avec un fichier pour chaque langue. Les dossiers:

- - - -

Supposons que votre add-on contient une seule chaîne localisable, représentée en anglais comme "Hello!", Et que vous souhaitez fournir les localisations Français FRANCAIS et anglais ETATS-UNIS.

- -

Vous souhaitez ajouter deux fichiers au répertoire "locale" :

- -
my-addon/
-         data
-         lib
-         locale/
-                en-US.properties
-                fr.properties
-
- -

"en-US.properties" contient ceci:

- -
hello_id= Hello!
-
- -

"fr.properties" contient ceci:

- -
hello_id= Bonjour!
-
- -

Maintenant, chaque fois que votre JavaScript ou HTML demande au système de localisation la traduction de l'identifiant hello_id, il obtiendra la traduction correcte pour la localisation en cours.

- -

Utilisation de chaînes localisées en HTML

- -
-

Cet exemple utilise l'API button_action, qui est uniquement disponible à partir de Firefox 29.

-
- -

Pour référencer des chaînes localisées du HTML, ajouter un attribut data-l10n-id à la balise HTML où vous voulez que la chaîne localisée apparaisse, et assignez y l'identifiant :

- -
<html>
-  <body>
-    <h1 data-l10n-id="hello_id"></h1>
-  </body>
-</html>
-
- -

Ensuite, vous pouvez utiliser ce fichier HTML pour construire votre interface, par exemple à l'intérieur d'un panel :

- -
var button = require("sdk/ui/button/action").ActionButton({
-  id: "localized-hello",
-  label: "Localized hello",
-  icon: "./icon-16.png",
-  onClick: function() {
-    hello.show();
-  }
-});
-
-var hello = require("sdk/panel").Panel({
-  height: 75,
-  width: 150,
-  contentURL: require("sdk/self").data.url("my-panel.html")
-});
- -

Compte tenu de fichiers locaux pour "en-US" et "fr" qui fournissent les traductions de hello_id, le panneau affichera désormais "Bonjour!" ou "Hello!", selon la localisation en cours:

- -

- -

La traduction est inséré dans le nœud qui a l'attribut data-l10n-id défini. Tout contenu existant précédemment est simplement remplacé.

- -

La chaîne est insérée sous forme de texte, de sorte que vous ne pouvez pas insérer du code HTML en utilisant une déclaration comme:

- -
# Ne fonctionne pas. Les balises HTML sont insérés sous forme de texte.
-hello_id= <blink>Hello!</blink>
-
- -

Attributs d'Elément Localisation

- -
Cette fonction est nouvelle dans Firefox 39
- -

Vous pouvez localiser certains attributs d'éléments avec un l10n-id en définissant sa valeur avec l10n-id.attributeName dans le fichier de propriétés comme:

- -
hello_id.accesskey= H
- -

Les attributs suivants sont supportés:

- - - -

En outre, la localisation avec les attributs ARIA aria-label , aria-valuetex et aria-moz-hint sont pris en charge avec les mêmes alias que sur Firefox OS :

- - - -

Utilisation de chaînes localisées en JavaScript

- -

Pour référencer les chaînes localisées à partir de votre code d'add-on principale, faites ceci:

- -
var _ = require("sdk/l10n").get;
-console.log(_("hello_id!"));
- -

L'affectation de "_" n'est pas nécessaire, mais pour travailler avec les outils gettext qui attendent "_" pour indiquer les chaînes localisables, cela est préférable.

- -
    -
  1. Importez le module l10n, et assigner sa fonction get à "_"(underscore).
  2. -
  3. Enveloppez toutes les références aux chaînes localisables avec la fonction _().
  4. -
- -

Si vous l'exécutez, vous verrez le résultat attendu pour la localisation en cours:

- -
info: Hello!
-
- -
info: Bonjour!
-
- -

Notez que parce que vous ne pouvez pas appeler des modules avec require() dans les content_scripts, vous ne pouvez pas encore référencer les chaînes localisées à partir des content_scripts.

- -

Pluriels

- -

Le module l10n prend en charge les formes plurielles. Plusieurs langues ont des règles différentes pour la formation des pluriels. Par exemple, l'anglais a deux formes: une forme singulière pour "un", et une forme plurielle pour "tout le reste, y compris zéro":

- -
one tomato
-no tomatoes
-two tomatoes
-
- -

Mais le Russe a des formes différentes pour les numéros se terminant par 1 (sauf 11), numéros se terminant par 2-4 (sauf 12-14) et les autres numéros:

- -
один помидор     // one tomato
-два помидора     // two tomatoes
-пять помидоров   // five tomatoes
-
- -

Le SDK utilise les données de Unicode CLDR pour décrire les différentes formes plurielles utilisés dans les différentes langues.

- -

Formes plurielles de Unicode CLDR

- -

Le projet Unicode CLDR définit un schéma pour décrire les règles de pluriel d'une langue particulière. Dans ce schéma, une langue peut se distinguer par un maximum de six formes, identifié par les catégories suivantes : zero, one, two, few, many et other.

- -

L'englais a deux formes, qui peuvent être décrits par les categories "1" à "one" et "everything else" à "other":

- -
one   → n is 1;
-other → everything else
-
- -

Le russe utilise quatre formes, qui peuvent être décrits comme suit:

- -
one   → n mod 10 is 1 and n mod 100 is not 11;
-few   → n mod 10 in 2..4 and n mod 100 not in 12..14;
-many  → n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14;
-other → everything else
-
- -

Les règles de pluriel pour toutes les langues peuvent être trouvés dans le CLDR Langue règles pluriel (ce tableau est mis à jour par rapport à la source XML CLDR).

- -

Formes plurielles dans le SDK

- -

Dans le code, vous pouvez fournir un paramètre supplémentaire à côté de l'identifiant, en décrivant combien d'articles il y a :

- -
var _ = require("sdk/l10n").get;
-console.log(_("tomato_id"));
-console.log(_("tomato_id", 1));
-console.log(_("tomato_id", 2));
-console.log(_("tomato_id", 5));
-console.log(_("tomato_id", .5));
- -

Dans le fichier .properties pour chaque langue, vous pouvez définir une localisation différente pour chaque forme plurielle possible dans cette langue, en utilisant les mots-clés de CLDR. Donc, en anglais, nous pourrions avoir deux localisations pluriel (à noter que la catégorie «other» ne prendre pas le mot-clé CLDR):

- -
# en-US translations
-tomato_id[one]= %d tomato
-tomato_id= %d tomatoes
-
- -

En Russe, nous pourrions avoir quatre localisations pluriel:

- -
# ru-RU translations
-tomato_id[one]= %d помидор
-tomato_id[few]= %d помидора
-tomato_id[many]= %d помидоров
-tomato_id= %d помидоры
-
- -

Le module de localisation comprend les définitions de CLDR pour chaque langue, ce qui lui permet de faire la différence entre, par exemple, "2" dans le code et "few" dans ru-RU.properties. Ensuite, il récupère et renvoie la localisation pour le compte que vous avez fourni.

- -

Espaces réservés

- -

Le module l10n prend en charge des espaces réservés, vous permettant d'insérer une chaîne qui ne devrait pas être localisé. Dans le code qui suit les fichiers "en-US" et "fr" ".properties" incluent des espaces réservés :

- -
# en-US translations
-hello_id= Hello %s!
-
- -
# fr translations
-hello_id= Bonjour %s !
-
- -

Pour utiliser les espaces réservés, fournir la chaîne de réservation après l'identifiant:

- -
var _ = require("sdk/l10n").get;
-console.log(_("hello_id", "Bob"));
-console.log(_("hello_id", "Alice"));
- -

Dans la localisation "en-US", cela nous donne:

- -
info: Hello Bob!
-info: Hello Alice!
-
- -

Dans "fr" nous obtenons:

- -
info: Bonjour Bob !
-info: Bonjour Alice !
-
- -

Commande espaces réservés

- -

Quand une chaîne localisable peut prendre deux ou plusieurs espaces réservés, les traducteurs peuvent définir l'ordre dans lequel les espaces réservés sont insérés, sans affecter le code.

- -

Principalement, ce qui est important c'est que les différentes langues ont des règles différentes pour l'ordre des mots. Même au sein de la même langue, cependant, les traducteurs doivent avoir la liberté de définir l'ordre des mots.

- -

Par exemple, supposons que nous voulons inclure une chaîne localisée nommer ville natale d'une personne. Il y a deux espaces réservés: le nom de la personne et le nom de la ville natale :

- -
var _ = require("sdk/l10n").get;
-console.log(_("home_town_id", "Bob", "London"));
- -

Un traducteur anglais pourrait vouloir choisir entre les ordres suivantes:

- -
"<town_name> is <person_name>'s home town."
-
- -
"<person_name>'s home town is <town_name>"
-
- -

Pour choisir la première option, le fichier .properties peut commander les espaces réservés comme suit:

- -
home_town_id= %2s is %1s's home town.
-
- -

Cela nous donne le résultat suivant:

- -
info: London is Bob's home town.
-
- -

Utilisation de chaînes localisées dans les Préférences

- -

En incluant une structure "preferences" dans votre fichier "package.json", vous pouvez définir des préférences pour votre add-on que l'utilisateur peut voir et modifier à l'aide de Firefox Add-ons Manager.

- -

Les préférences ont obligatoirement des champs title et description. Ce sont des chaînes qui apparaissent aux côtés de la préférence dans le Gestionnaire Add-ons, pour expliquer à l'utilisateur ce que signifie la préférence.

- - - -

Par exemple, supposons que votre "package.json" définit une seule préférence:

- -
{
-    "preferences": [
-        {
-            "type": "string",
-            "name": "monster_name",
-            "value": "Gerald",
-            "title": "Name"
-        }
-    ],
-    "name": "monster-builder",
-    "license": "MPL 2.0",
-    "author": "me",
-    "version": "0.1",
-    "fullName": "Monster Builder",
-    "id": "monster-builder@me.org",
-    "description": "Build your own monster"
-}
-
- -

Dans votre fichier "en-US.properties", inclure ces deux éléments :

- -
monster_name_title= Name
-monster_name_description= What is the monster's name?
-
- -

Dans votre fichier "fr.properties", inclure la traduction française:

- -
monster_name_title= Nom
-monster_name_description= Quel est le nom du monstre ?
-
- -

Quand la configuration locale du navigateur est "en-US", les utilisateurs voient dans le gestionnaire de modules complémentaires:

- -

- -

Lorsque la configuration locale du navigateur est "fr", ils voient ceci:

- -

- -

Les types menulist et radio de préférences ont des options. L'attribut label de chaque option est affichée à l'utilisateur. Si le fichier de paramètres régionaux a une entrée avec la valeur de l'élément label préfixé «{name}_options." comme clé (où {name} est le nom de la préférence), sa valeur est utilisée comme étiquette localisée.

- -

Utilisation de l'identificateurs

- -

Si le système de localisation ne peut pas trouver une entrée pour un identifiant particulier en utilisant la localisation en cours, elle retourne juste l'identifiant lui-même.

- -

C'est intéressante car vous pouvez écrire du code "localisable", entièrement fonctionnel sans avoir à écrire des fichiers locaux. Vous pouvez simplement utiliser les chaînes de langue par défaut et fournir ultérieurement les fichiers .properties pour toutes les langues supplémentaires que vous souhaitez soutenir.

- -

Par exemple, dans le cas ci-dessus, vous pouvez utiliser "Bonjour!" comme identificateur, et juste avoir un .properties pour la locale "fr":

- -
Hello!= Bonjour!
-
- -

Puis, quand la locale "en-US", le système ne parviennent pas à trouver un .properties, et revoit "Bonjour!".

- -
-

Cependant, cette approche rend difficile le maintien d'une add-on qui a de nombreuses localisations, parce que vous utilisez les chaînes de langue par défaut en tant que chaînes de l'interface utilisateur et que les clés recherchent vos traductions. Cela signifie que si vous voulez changer le libellé d'une chaîne dans la langue par défaut, ou corriger une faute de frappe, alors vous cassez tous vos fichiers de paramètres régionaux.

-
- -

Locale Updater

- -

L'add-on locale updater (paramètres régionaux de mise à jour) rend plus facile la mise à jour des fichiers locaux. Une fois que vous l'avez installé, ouvrez le Gestionnaire de modules complémentaires, et vous verrez un nouveau bouton "Update l10n" à côté de chaque add-on que vous avez installé :

- -

- -

Cliquez sur le bouton et vous serez invité à entrer un nouveau fichier .properties pour cette add-on. Si vous fournissez un nouveau fichier, les données locales de l'add-on seront mis à jour avec le nouveau fichier.

- -

Limites

- -

Le support de la localisation actuelle est un premier pas vers la prise en charge complète, et contient un certain nombre de limitations.

- - - -

Voir aussi - pour les développeurs qui cherchent à localiser les add-ons non-SDK

- - diff --git a/files/fr/mozilla/add-ons/thunderbird/index.html b/files/fr/mozilla/add-ons/thunderbird/index.html deleted file mode 100644 index b15b535a59..0000000000 --- a/files/fr/mozilla/add-ons/thunderbird/index.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Thunderbird extensions -slug: Mozilla/Add-ons/Thunderbird -tags: - - Add-ons - - Extensions - - NeedsTranslation - - TopicStub - - thunderbird -translation_of: Mozilla/Thunderbird/Thunderbird_extensions ---- -
Building a Thunderbird extension
-Step-by-step explanation on how to build an extension for Thunderbird.
- -
-

{{AddonSidebar}}

-The following documentation provides help for creating extensions for Mozilla's Thunderbird email client. Although there are many similarities with Firefox extensions there are also some differences that may confound the starting developer.
- -

-Please help! You can add a how-to (a question or an answer or a code snippet), summarize and link to a relevant newsgroup discussion, or create a tutorial. Need help? Contact jenzed.
- - - - - - - - -
-

Documentation

- -

Getting started with Thunderbird

- -

A brave, young developer wants to develop an add-on for Thunderbird. Here's a few links to help them through this journey.

- -
    -
  • Start by reading the tutorial and learn how to build a Thunderbird extension (Outdated, still talks about overlays and the add-on builder is no longer available but the tutorial has not been updated.)
  • -
  • Read about the main windows so that you know what one means when they say « thread pane », « preview pane », and « folder pane ».
  • - -
  • Want to do some real stuff? See how to inspect a message (demo add-on included!)
  • -
  • Play with our other demo add-on that exercises some more advanced Thunderbird-specific features
  • -
  • Want to do even more stuff? Don't reinvent the wheel: steal functions from the thunderbird-stdlib project (doc here). Functions for dealing with messages (delete them, archive them, change their tags, etc.) are included.
  • -
  • Haven't found what you're looking for? Read the Thunderbird how-tos; they contain a lot of recipes for things extensions want to do.
  • -
  • Still haven't managed to do what you wanted? See the list of all Thunderbird communication channels so that you know where to ask when you get stuck :-).
  • -
  • Feeling really brave? Read the source using a fancy interface; you can often find tests that demonstrate how to do what you're trying to achieve.
  • -
- -

The Gloda database

- -

Thunderbird has a subsystem called Gloda. Gloda stands for « Global Database », and creates Thunderbird-wide relations between objects. Gloda provides concepts such as Conversations, Messages, Identities, Contacts. All these concepts are related together: a Conversation contains Messages which are linked to Identities (from field, to field) which are themselves part of a Contact: indeed, a contact has multiple identities.

- -

Typical use cases for Gloda: find all messages whose subject matches [search term], find all messages from [person], find all messages in the same thread as [a given message], find all messages involving [person], etc. etc.

- -

Gloda is extremely powerful and is used heavily by add-ons such as Thunderbird Conversations. Learn more about Gloda:

- - - - - -

Some of these links may be wildly out of date, but they still provide valuable information on the codebase.

- - - - - - -
-

Community

- - - -

{{ DiscussionList("dev-extensions", "mozilla.dev.extensions") }}

- - - -

Tools

- - - -

... more tools ...

- -

View All...

- - - -
-
XUL, JavaScript, XPCOM, Themes, Developing Mozilla
-
-
- -

Categories

- -

{{ languages( { "ja": "ja/Extensions/Thunderbird" } ) }}

diff --git "a/files/fr/mozilla/add-ons/th\303\250mes/fond/index.html" "b/files/fr/mozilla/add-ons/th\303\250mes/fond/index.html" deleted file mode 100644 index 2af0b0031c..0000000000 --- "a/files/fr/mozilla/add-ons/th\303\250mes/fond/index.html" +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Thème de fond -slug: Mozilla/Add-ons/Thèmes/Fond -translation_of: Mozilla/Add-ons/Themes/Lightweight_themes ---- -

{{AddonSidebar}}

- -

Comment créer votre propre thème

- -
-

Les thèmes sont fait d'une image "header" qui va remplacer le fond de base de Firefox.

- -

Vous avez fini votre thème ? Mettez-le en ligne maintenant !

- -

Création de l'image "header" du thème

- -

L'image header est affichée en fond en haut de la fenêtre du navigateur, on la voit aussi derrière les barres d'outils, la barre d'adresse, la barre "Rehercher" et la ligne d'onglets. Elle sera ancrée au coin supérieur-droit de la fenêtre.

- -

- - - -

Image Requise

- - - -

Petites aides

- - - -

Ressources : édition d'images en ligne

- - - -

Envoyer votre thème personnalisé

- -

Pour commencer à envoyer vos images, allez sur la page Soumettre un thème.

- -
    -
  1. Nommez votre thème — choisissez un nom unique pour votre thème. 2 thèmes avec le même nom ne sont pas autorisés, alors vus devriez peut-être essayer plusieurs fois pour trouver un nom unique.
  2. -
  3. Choisissez une catégorie et des tags — sélectionnez une catégorie et entrez des tags (mots clés) qui décrivent le mieux votre thème. Rappelez-vous qu'un utilisateur pourrait rejeter votre thème si sa catégorie et ses tags ne sont pas fidèles à votre thème.
  4. -
  5. Décrivez votre thème — écrivez une courte description de votre thème. Rappelez-vous qu'un utilisateur pourrait rejeter votre thème si sa description n'est pas fidèle à votre thème.
  6. -
  7. Sélectionnez une license pour votre thème — décidez une license de droits d'auteurs pour votre travail. Lire plus à propos des types de licences Creative Common. -
      -
    • Important: Soyez sur d'avoir les droits d'utiliser cette image dans votre thème !
    • -
    -
  8. -
  9. Envoyez votre image — soyez sur qu'elle fait moins de 300 KB et qu'elle soit au formant JPG ou PNG !
  10. -
  11. Sélectionnez la couleur des textes et des onglets — vous pouvez choisir la couleur de "fond" des onglets et celle des textes qui colle le mieux avec votre image header.
  12. -
  13. Prévisualisez votre thème — vous êtes prêts à prévisualiser votre thème ! Passez simplement votre souris sur le bouton "Soumettre le thème", et vous verrez à quoi il ressemble.
  14. -
  15. Soumettre votre thème — si tout à l'air bon, cliquez sur le bouton "Soumettre le thème" et vous avez fini ! Vous pouvez voir tous les thèmes que vous avez créé sur votre page de profil. -
      -
    • Info: pour vous assurer que votre thème est approuvé pour la galerie, soyez sur qu'il n'enfreint aucune règles des Conditions d'Utilisation !
    • -
    -
  16. -
- -

soumettre votre thème ici

- -

Plus de tutoriels

- -

Mozilla Themes Focal Point on Sizing - A tutorial on theming with a focus on sizing, by VanillaOrchids.
-
-
- Traduit par Tocram2 ;)

-
diff --git "a/files/fr/mozilla/add-ons/th\303\250mes/index.html" "b/files/fr/mozilla/add-ons/th\303\250mes/index.html" deleted file mode 100644 index b0b2cd163a..0000000000 --- "a/files/fr/mozilla/add-ons/th\303\250mes/index.html" +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Thèmes -slug: Mozilla/Add-ons/Thèmes -tags: - - Apparences - - Extensions - - Theme -translation_of: Mozilla/Add-ons/Themes ---- -

{{AddonSidebar}}

- -

Les thèmes vous permettent de modifier l'apparence de l'interface utilisateur et de la personnaliser selon vos goûts. Apprenez comment créer et partager des thèmes !

- -
-
-

Documentation

- -
-
Créer un thème de navigateur
-
Introduction pour la création de thèmes pour les dernières versions de Firefox.
-
-

Thèmes légers

-
-
Thèmes légers
-
La création de thèmes utilisant peu d'espaces pour Firefox.
-
FAQ des thèmes légers
-
Donne les réponses aux questions les plus courantes.
-
-
- - -
- -

 

diff --git "a/files/fr/mozilla/add-ons/th\303\250mes/theme_concepts/index.html" "b/files/fr/mozilla/add-ons/th\303\250mes/theme_concepts/index.html" deleted file mode 100644 index 8856f4e38f..0000000000 --- "a/files/fr/mozilla/add-ons/th\303\250mes/theme_concepts/index.html" +++ /dev/null @@ -1,231 +0,0 @@ ---- -title: Theme concepts -slug: Mozilla/Add-ons/Thèmes/Theme_concepts -translation_of: Mozilla/Add-ons/Themes/Theme_concepts ---- -
{{AddonSidebar()}}
- -

Dans Firefox, les thèmes développés par la bibliothèque WebExtensions API vous permet de modifier le rendu du navigateur. Le cas se présente en ajoutant des images à la région de l'en-tête du navigateur Firefox : il s'agit de la partie, en arrière-plan, des barres de menu, d'outils, d'hyperliens, de recherche et de l'ensemble des onglets d'une même fenêtre.

- -

These theme options can be implemented as static themes (although the theme images themselves may be animated) or as dynamic themes created in a browser extension.

- -
-

If you have a lightweight theme it will be converted to this new theme format automatically before lightweight themes are deprecated. You do not need to port your theme. However, please feel free to update your themes to use any of the new features described here.

-
- -

Static themes

- -
-

Note that you can't yet submit static WebExtension-based themes to addons.mozilla.org. The work to support this is tracked in https://github.com/mozilla/addons/issues/501. If you want to share a theme with other users, you'll need to make it either a lightweight theme or a dynamic theme.

-
- -

Static themes are specified using the same resources as a browser extension: a manifest.json file to define the theme components with those components stored in the same folder as the manifest.json file or a sub folder. These resources are then packed in a zip for publication on addons.mozilla.org (AMO).

- -
-

A theme and browser extension functionality cannot be defined in one package, such as including a theme to complement an extension. You can, however, programmatically include a theme in an extension using the Theme API. See Dynamic themes.

-
- -

Defining a theme

- -

To create a theme (in this example a simple, single image theme):

- - - -

Static theme approaches

- -

There are two approaches you can take to theming the header area of Firefox: using a single image or using multiple images. You could combine the two, but it’s easier to treat them separately.

- -

Single image themes

- -

This is the basic or minimal theming option, where you define:

- - - -

The area your header image needs to fill is a maximum of 200 pixels high. The maximum image width is determined by the resolution of the monitor Firefox is displaying on and how much of the monitor Firefox is using. Practically, this means you would need to allow for a width of up to 5120 pixels wide (for the next generation of 5k monitors). However, rather than creating a very wide image, a better approach is to use a narrower image with a transparent left edge so that it fades to the background color. For example, we could use this image
- An image of a weta (the common name for a group of about 70 insect species in the families Anostostomatidae and Rhaphidophoridae, endemic to New Zealand) with the left edge fading to total transparency.
- combined with a complementary background color, to create this effect in the header
- A single image theme using the weta.png image

- -

See details about this theme in the themes example weta_fade.

- -

Obviously, you can still provide a single wide image if you prefer.

- -

Multiple image themes

- -

As an alternative to creating a single image theme, you have the option to use multiple images. These images can be individually anchored to locations within the header, with the option to apply tiling to each image.

- -

Depending on the effect you want to create you may need to suppress the mandatory "headerURL": image with an empty or transparent image. You would use an empty or transparent image if, for example, you wanted to tile a centrally justified image, such as
- An image of a weta (the common name for a group of about 70 insect species in the families Anostostomatidae and Rhaphidophoridae, endemic to New Zealand) with the left and right edges fading to total transparency.
- to create this effect
- A single image theme using the additional images option to align an image to the center of the heading and tile it.
- Here you specify the weta image like this:

- -
"images": {
-  "headerURL": "empty.png",
-  "additional_backgrounds": [ "weta_for_tiling.png"]
-},
- -

and the images tiling with:

- -
"properties": {
-  "additional_backgrounds_alignment": [ "top" ],
-  "additional_backgrounds_tiling": [ "repeat"  ]
-},
- -

Full details of how to setup this theme can be found in the themes example weta_tiled. Full detais of the alignment and tiling options can be found in the "theme" key description.

- -

Alternatively, you can use multiple images, say combining the original weta image with this one anchored to the left of the header
- An image of a weta (the common name for a group of about 70 insect species in the families Anostostomatidae and Rhaphidophoridae, endemic to New Zealand) with the right edge fading to total transparency.
- to create this effect
- A theme using the additional images option to place two mirrored image to the left and right of the browser header.

- -

Where the images are specified with:

- -
"images": {
-  "headerURL": "empty.png",
-  "additional_backgrounds": [ "weta.png", "weta-left.png"]
-},
- -

and their alignment by:

- -
"properties": {
-  "additional_backgrounds_alignment": [ "right top" , "left top" ]
-},
- -

Full details of how to setup this theme can be found in the themes example weta_mirror. Full detais of the alignment options can be found in the "theme" key description.

- -

Static animated themes

- -

It is possible to create an animated theme using an APNG format image, as in the themes example animated. However, remember that rapid animations, such as the one in the example might be too distracting for a practical theme.

- -

You can also animate themes programmatically, which we discuss in Dynamic themes.

- -

Dynamic themes

- -

As an alternative to defining a static theme, you can use the {{WebExtAPIRef("theme")}} API to control the theme used in Firefox from within a browser extension. There are a couple of use cases for this option:

- - - -

And, obviously, you can combine the two and bundle a programmatically controlled theme with your extension.

- -

Using the {{WebExtAPIRef("theme")}} API is straightforward. First, request "theme" permission in the extension's manifest.json file. Next, you build a JSON object containing the same information you would use in a static theme’s manifest.json, Finally, pass the JSON object in a {{WebExtAPIRef("theme.update()")}} call.

- -

For example, the following code, from the dynamic theme example defines the content for the day and night elements of the dynamic theme:

- -
const themes = {
-  'day': {
-    images: {
-     headerURL: 'sun.jpg',
-    },
-    colors: {
-     accentcolor: '#CF723F',
-     textcolor: '#111',
-    }
-  },
-  'night': {
-    images: {
-     headerURL: 'moon.jpg',
-    },
-    colors: {
-     accentcolor: '#000',
-     textcolor: '#fff',
-    }
-  }
-};
- -

The theme.Theme object is then passed to {{WebExtAPIRef("theme.update()")}} to change the header theme, as in this code snippet from the same example:

- -
function setTheme(theme) {
-  if (currentTheme === theme) {
-    // No point in changing the theme if it has already been set.
-    return;
-  }
-  currentTheme = theme;
-  browser.theme.update(themes[theme]);
-}
- -

Learn more about dynamic themes and see an additional example in the following video:

- -

{{EmbedYouTube("ycckyrUN0AY")}}

- -

 

- -

If you have not built a browser extension before, check out Your first extension for a step-by-step guide.

- -

Cross browser compatibility

- -

There is currently limited compatibility between themes in the major browsers. Opera takes an entirely different approach, and Microsoft Edge themes are not yet open to developers.

- -

There is some compatibility between Firefox static themes and Chrome themes, providing the ability to port a single header image theme from Firefox to Chrome. This would be done by amending the manifest.json keys as follows:

- - - -

Noting that "frame": and "tab_text": support RGB color definition only.

- -

So, in the single image theme example (weta_fade) could be supported in Chrome using the following manifest.json file:

- -
{
-  "manifest_version": 2,
-  "version": "1.0",
-  "name": "<your_theme_name>",
-  "theme": {
-    "images": {
-      "theme_frame": "weta.png"
-    },
-    "colors": {
-      "frame": [ 173 , 176 , 159 ],
-      "tab_text": [ 0 , 0 , 0 ]
-    }
-  }
-}
- -

However, there will be a couple of differences:

- - - -

The basic theme example using the Chrome compatible manifest.json keys, showing the differences in how those keys are implemented.

- -

For more information, see the notes on Chrome compatibility.

diff --git a/files/fr/mozilla/add-ons/webextensions/embedded_webextensions/index.html b/files/fr/mozilla/add-ons/webextensions/embedded_webextensions/index.html deleted file mode 100644 index 7a80ac75e7..0000000000 --- a/files/fr/mozilla/add-ons/webextensions/embedded_webextensions/index.html +++ /dev/null @@ -1,219 +0,0 @@ ---- -title: WebExtensions intégrées -slug: Mozilla/Add-ons/WebExtensions/Embedded_WebExtensions -translation_of: Archive/Add-ons/Embedded_WebExtensions ---- -
{{AddonSidebar}}
- -
-

À partir de Firefox 57 (sorti en novembre 2017), la prise en charge des types d'extensions héritées a été supprimée, y compris les extensions héritées qui intègrent les WebExtensions.

- -

A partir de Firefox 64 (sortie en décembre 2018), la prise en charge des extensions bootstrapped sera supprimée, y compris la prise en charge des extensions bootstrapped qui intègrent des WebExtensions.

-
- -

A partir de Firefox 51, vous pouvez intégrer une WebExtension dans une extension bootstrapped classique ou dans une extension dans le SDK des extensions.

- -

Les fichiers de WebExtension intégrés sont packagés dans les modules complémentaires existant. La WebExtension intégrée ne partage pas directement son champ d'application avec l'ajout d'un complément hérité, mais ils peuvent échanger des messages à l'aide des fonctions de messagerie définies dans l'API {{WebExtAPIRef("runtime")}}.

- -

- -

Cela signifie que vous pouvez migrer un add-on existant vers WebExtensions une pièce à la fois, et disposer d'un add-on entièrement fonctionnel à chaque étape. En particulier,  il vous permet de migrer des données stockées à partir d'un add-on existant vers une WebExtension, en écrivant un add-on hybride intermédiaire qui lit les données à l'aide des API existantes (par exemple, simple-prefs ou le service de préférence) et les écrit en utilisant les APIs WebExtension (par exemple, {{WebExtAPIRef("storage")}}).

- -

Avec ce guide, nous avons écrit deux exemples montrant comment utiliser les WebExtensions embarquées pour faciliter la migration à partir d'un type d'add-on existant. L'un montre comment porter à partir d'un add-on amorcé, et l'autre montre comment porter à partir d'un add-on sdk.

- -

Pour intégrer une WebExtension, vous aurez besoin de Firefox 51 ou ultérieur. Pour intégrer une WebExtension dans un add-on SDK, vous aurez également besoin de jpm 1.2.0.

- -
-

Firefox 57 laisse tomber la prise en charge des types d'add-on hérités. Si vous maintenez actuellement un add-on au format de l'ancien add-on et que vous souhaitez migrer des données, publiez une mise à jour contenant une WebExtension intégrée le plus tôt possible. Si la mise à jour est publiée près de la date de sortie de Firefox 57, les données stockées dans votre add-on seront perdues si l'utilisateur met à jour Firefox avant de recevoir votre mise à jour du add-on.

-
- -

Incorporation d'une WebExtension

- -

Si l'extension héritée est une extension bootstrap avec un install.rdf, incluez la propriété  "hasEmbeddedWebExtension" dans le RDF, contenant la valeur "true":

- -
<em:hasEmbeddedWebExtension>true</em:hasEmbeddedWebExtension>
- -
Si le complément hérité est une SDK add-on, incluez la clé "hasEmbeddedWebExtension" dans le package.json, définissez sur true:
- -
 
- -
"hasEmbeddedWebExtension": true
-
- -
La WebExtension elle-même vit dans un dossier de niveau supérieur appelé "webextension" dans l'add-on. Par exemple:
- -
 
- -
my-boostrapped-addon/
-    chrome/
-    webextension/
-        manifest.json
-        background.js
-        ...
-    bootstrap.js
-    chrome.manifest
-    install.rdf
- -
 
- -
-
my-sdk-addon/
-    index.js
-    package.json
-    webextension/
-        manifest.json
-        background.js
-        ...
-
- -

Notez que la WebExtension intégrée doit se trouver directement dans le répertoire webextension/.  Il ne peut pas être dans un sous-répertoire. Cela signifie également que vous ne pouvez pas intégrer plus d'une WebExtension.

- -

Firefox ne traite pas les WebExtensions intégrées comme une extension indépendante. Pour cette raison, vous ne devez pas spécifier une identification d'extension pour elle. Si vous le faites, il sera simplement ignoré.

- -

Toutefois, lorsque vous avez terminé la migration de l'add-on et supprimé le code d'intégration existant, vous devez inclure une clé d'application pour l'identifiant soit identique à un ID d'extension original. De cette façon, addons.mozilla.org reconnaîtra que WebExtension est une mise à jour de l'extension existante.

- -

Démarré la WebExtension

- -

La WebExtension intégrée doit être explicitement démarré par l'extension d'intégration.

- -

Si l'extension d'intégration est un add-on bootstrap, l'argument de données passé à la fonction de startup() obtiendra une propriété supplémentaire à la webExtension :

- -
// bootstrapped add-on
-
-function startup({webExtension}) {
-
-...
- -

Si l'add-on d'intégration est une extension SDK, il pourra accéder à un objet WebExtension à l'aide du module sdk/webextension :

- -
// SDK add-on
-
-const webExtension = require("sdk/webextension");
- -

Quoi qu'il en soit, cet objet a une seule fonction, startup(), qui renvoie une Promise. La promesse résolue à un objet avec un seul navigateur de propriétés :  il contient les API {{WebExtAPIRef("runtime")}} que le complément d'intégration peut utiliser pour échanger des messages avec le WebExtension intégré :

- - - -

Pour exemple:

- -
// bootstrapped add-on
-
-function startup({webExtension}) {
-  webExtension.startup().then(api => {
-    const {browser} = api;
-    browser.runtime.onMessage.addListener(handleMessage);
-  });
-}
- -
// SDK add-on
-
-const webExtension = require("sdk/webextension");
-
-webExtension.startup().then(api => {
-  const {browser} = api;
-  browser.runtime.onMessage.addListener(handleMessage);
-});
-
- -

Notez que l'ajout d'un module d'extension intégré ne peut pas démarrer les communications: il peut recevoir (et éventuellement à répondre) des messages ponctuels, en utilisant onMessage, et peut accepter des requêtes de connexion en utilisant onConnect.

- -

La promesse est rejetée si le WebExtension intégré manque un manifeste ou si le manifeste est invalide. Dans ce cas, vous verrez plus de détails dans la boite à outils de la console du navigateur.

- -

Echange des messages

- -

Une fois que la WebExtension intégré est en cours d'exécution, elle peut échanger des messages avec l'add-on hérité en utilisant le sous-ensemble des APIs {{WebExtAPIRef("runtime")}} :

- - - -

Messagerie sans connexion

- -

Pour envoyer un message unique, la WebExtension peut utiliser {{WebExtAPIRef("runtime.sendMessage()")}}. Vous pouvez omettre l'argument extensionId, car le navigateur considère la WebExtension intégrée comme faisant partie intégrante de l'add-on :

- -
browser.runtime.sendMessage("message-from-webextension").then(reply => {
-  if (reply) {
-    console.log("response from legacy add-on: " + reply.content);
-  }
-});
- -

L'add-on d'intégration peut recevoir (et répondre facultativement) ce message en utilisant l'objet {{WebExtAPIRef("runtime.onMessage")}} :

- -
// bootstrapped add-on
-
-function startup({webExtension}) {
-  // Start the embedded webextension.
-  webExtension.startup().then(api => {
-    const {browser} = api;
-    browser.runtime.onMessage.addListener((msg, sender, sendReply) => {
-      if (msg == "message-from-webextension") {
-        sendReply({
-          content: "reply from legacy add-on"
-        });
-      }
-    });
-  });
-}
- -

Messagerie orientée connexion

- -

Pour configurer une connexion plus longue entre la WebExtension et l'extension héritée, la WebExtension peut utiliser {{WebExtAPIRef("runtime.connect()")}}.

- -
var port = browser.runtime.connect({name: "connection-to-legacy"});
-
-port.onMessage.addListener(function(message) {
-  console.log("Message from legacy add-on: " + message.content);
-});
-
- -

L'extension héritée peut écouter les tentatives de connexion à l'aide de {{WebExtAPIRef("runtime.onConnect")}}, et les deux côtés peuvent alors utiliser {{webExtAPIRef("runtime.Port")}} pour échanger des messages :

- -
function startup({webExtension}) {
-  // Start the embedded webextension.
-  webExtension.startup().then(api => {
-    const {browser} = api;
-    browser.runtime.onConnect.addListener((port) => {
-      port.postMessage({
-        content: "content from legacy add-on"
-      });
-    });
-  });
-}
- -

Migration de données à partir d'extensions existantes

- -

Une utilisation majeure pour les WebExtensions intégrées sont de migrer les données stockées d'une extension.

- -

Les données stockées sont un problème pour les personnes qui essaient de migrer à partir de types d'extension existants, car les extensions existantes ne peuvent pas utiliser les API de stockage WebExtension, alors que les  WebExtensions ne peuvent pas utiliser les API de stockage existantes. Par exemple, si une extension du SDK utilise l'API simple-prefs  pour stocker les préférences, la version WebExtension ne pourra pas accéder à ces données.

- -

Avec les WebExtensions intégrées, vous pouvez migrer des données en créant une version intermédiaire de l'extension qui intègre une WebExtension. Cette version intermédiaire lit les données stockées à l'aide des API existantes et écrit les données à l'aide des API des WebExtensions.

- - - -

Nous avons fourni deux exemples illustrant ce modèle : "embedded-webextension-bootstrapped" montre la migration à partir d'un add-on bootstrap, tandis que "embedded-webextension-sdk" montre la migration à partir du SDK de l'extension.

- -

Préférences

- -

Une extension qui contient une WebExtension intégré peut définir des préférences dans l'extension d'héritage (en utilisant, par exemple, simple-prefs ou le service des préférences) ou dans la WebExtension intégrée (en utilisant options_ui).

- -

Si les deux parties définissent les préférences, que les préférences de la WebExtension intégrée annuleront les anciennes.

- -

Si la diffusion de la WebExtension intégrée définit les préférences, elles ne seront initialisées qu'après la WebExtension intégré a commencée. Jusque-là, le bouton "Préférences" dans "about:addons" ne sera pas affiché pour l'add-on, et le navigateur enregistrera une erreur dans la console du navigateur lorsque "about:addons" is ouvert.

- -

Pour cette raison, c'est important que l'extension d'intégration démarre immédiatement le démarrage WebExtension intégré lors du démarrage. Pour une extension bootstrap, cela signifie que vous devez appeler webExtension.startup() dans le bootstrap de démarrage. Pour une extension SDK supplémentaire, cela signifie que vous devez appeler  webExtension.startup() dans le point d'entrée de l'add-on (par défaut, index.js).

- -

Si la page "about:addons" est déjà ouverte dans un onglet lorsque le WebExtension intégré est démarré, le bouton Préférences ne sera visible qu'après la prochaine recharge de la page "about:addons".

- -

Limitations

- -

Debogage

- -

Si vous avez un add-on hérité qui intègre une WebExtension, vous ne pouvez pas utiliser le nouveau débogueur add-on pour le déboguer. Vous devrez utiliser l'ancien flux de travail de débogage, basé sur la boite d'outils du navigateur.

diff --git a/files/fr/mozilla/bugzilla/index.html b/files/fr/mozilla/bugzilla/index.html deleted file mode 100644 index d899f74c9e..0000000000 --- a/files/fr/mozilla/bugzilla/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Bugzilla -slug: Mozilla/Bugzilla -translation_of: Mozilla/Bugzilla ---- -

bugzilla.mozilla.org (souvent abrégé b.m.o) est un système de suivi des bugs de Mozilla.org, une base de données pour enregistrer les bugs et les demandes d'améliration pour Firefox, Thunderbird, SeaMonkey, Camino, et d'autres projets de mozilla.org.

- -
-
-

Documentation à propos B.m.o.

- -
-
What to do and what not to do in Bugzilla
-
Des conseils sur la façon d'utiliser Bugzilla, ainsi que des choses que vous devriez éviter.
-
Bugzilla etiquette
-
A guide to etiquette; this guide will help you understand how best to conduct yourself on b.m.o. and how using proper manners and civility will help ensure your problem gets solved sooner rather than later.
-
Comment savoir si un bug a déjà été signalé
-
Il vous est utile (mais pas obligatoire) de vérifier si le problème que vous signalez est déjà suivi.Ce guide vous aidera donc à le faire.
-
Assurance qualité
-
Documentation sur l'assurance qualité chez Mozilla.
-
Recommandations pour l'écriture de bug
-
A guide to writing a good, understandable, bug that will be easily followed by the development team.
-
Comment soumettre un patch
-
If you've fixed a bug, or have implemented a new feature, you'll need to get your patch into the tree so it can become part of the product. This guide will teach you how!
-
- -

View All...

-
- -
-

Obtenir de l'aide de la communauté

- -

You need help on a CSS-related problem and can't find the solution in the documentation?

- - - -

N'oubliez pas la netiquette pour poser vos questions…

- - - - - -

Outils

- -
    -
  • Bugzilla Todos lists review and flag requests, patches to check in, unfulfilled requests you made of other people, and assigned bugs.
  • -
-
-
diff --git a/files/fr/mozilla/command_line_options/index.html b/files/fr/mozilla/command_line_options/index.html deleted file mode 100644 index 377bbee16b..0000000000 --- a/files/fr/mozilla/command_line_options/index.html +++ /dev/null @@ -1,472 +0,0 @@ ---- -title: Options de ligne de commande -slug: Mozilla/Command_Line_Options -tags: - - Administration - - Documentation - - FAQ - - Greffons - - XULRunner - - ligne de commande -translation_of: Mozilla/Command_Line_Options ---- -

{{FirefoxSidebar}}

- -

Les options de ligne de commande servent à spécifier des options de démarrage des applications Mozilla. Par exemple, vous pouvez utiliser une option pour outrepasser le gestionnaire de profils et ouvrir un profil spécifique (si vous en avez plusieurs). Vous pouvez aussi contrôler la façon dont les applications Mozilla s'ouvrent, quels composants sont lancés au démarrage et ce qu'ils font à leur ouverture. Cette page décrit les options les plus courantes et comment les utiliser. Vous pouvez ouvrir l'interface de ligne de commande en appuyant sur Maj + F2

- -

Règles de syntaxe

- -

Commençons par décrire les règles syntaxiques applicables à toutes les options.

- - - -

Utilisation des options de ligne de commande

- -

Les options sont saisies après la commande servant à lancer l'application. Si les options contiennent des arguments, saisir le paramètre après l'option. Certaines options peuvent être abrégées. Par exemple, l'option « -editor » peut être abrégée en « -edit ». Quand une abréviation est disponible, elle est décrite ci-dessous avec l'option. De même pour le cas des paramètres qui dans certains cas doivent être encadrés par des guillemets droits anglais ("). Plusieurs options de ligne de commande peuvent être spécifiées. En général, la syntaxe est comme suit :

- -
application -option -option "paramètre" -option paramètre
- -

Exemples

- -

Les exemples qui suivent montrent l'usage de l'option « -ProfileManager », qui ouvre le gestionnaire de profils avant de démarrer Firefox ou Thunderbird :

- -

Windows

- -

Sélectionner « Exécuter » depuis le « Menu démarrer ». Puis taper :

- -
firefox -ProfileManager
-
- -

Mac OS X

- -

Aller à « Applications > Utilitaires > Ouvrir un terminal » et taper :

- -
cd /Applications/Firefox.app/Contents/MacOS
-./firefox -ProfileManager
-
- -

Linux

- -

Ouvrir un terminal (invite de commandes) et taper :

- -
cd Thunderbird installation directory
-./thunderbird -ProfileManager
-
- -

L'exemple ci-dessus appelle l'option « -ProfileManager » pour Mozilla Thunderbird.

- -

Profil utilisateur

- -

-allow-downgrade

- -

La protection contre la rétrogradation de Firefox 67 empêche de démarrer accidentellement Firefox avec un profil ayant été exécuté dans une version plus récente de Firefox. Selon les changements entre les deux versions, certains fichiers figurant dans un profil peuvent ne pas être rétrocompatibles. Ajouter cette option outrepasse la protection contre la rétrogradation .

- -

-CreateProfile nom_du_profil

- -

Crée un nouveau profil dans le dossier par défaut sans démarrer l'application. Le profil s'appellera  nom_du_profil dans le gestionnaire de profils. nom_du_profil ne doit pas contenir d'espaces ( ). Pour utiliser cette option correctement, aucune instance de l'application ne doit être en cours d'exécution ou alors l'option -no-remote doit être utilisée.

- -
firefox -CreateProfile UtilisateurJoel
-
- -

-CreateProfile "nom_du_profil nom_du_dossier"

- -

Crée un nouveau profil dans le dossier nom_du_dossier sans démarrer l'application. Le profil s'appellera  nom_du_profil dans le gestionnaire de profils. Attention : nom_du_profil et nom_du_dossier sont encadrés ensemble par des guillemets droits anglais et sont séparés par une seule espace (comme précédemment, nom_du_profil ne doit pas contenir d'espaces). Pour utiliser cette option correctement, l'application ne doit pas être en cours d'exécution ou alors l'option -no-remote doit être utilisée.

- -
-

Note : nom_du_dossier doit exister et il ne doit pas déjà exister de profil appelé nom_du_profil.

-
- -
firefox -CreateProfile " UtilisateurJoel c:\internet\utilisateurjoel-moz-profil"
-
- -

-migration

- -

Démarre avec l'assistant d'importation.

- -

-new-instance

- -

Ouvre une nouvelle instance et pas une nouvelle fenêtre dans l'instance en cours d'exécution, ce qui permet que plusieurs copies de l'application soient ouvertes en même temps.

- -
firefox -no-remote -P "un autre profil"
- -
-

Note: non disponible pour Windows, voir {{bug(855899)}}.

-
- -

-no-remote

- -

N'accepte pas ni n'envoie de commandes distantes. Implique -new-instance.

- -
firefox -no-remote -P "un autre profil"
- -
-

Note : depuis Firefox 9, cela signifie réellement ce que son nom implique pour toutes les plateformes, c.-à-d. que les instances créées avec cette option n'acceptent pas et n'envoient pas de commandes distantes, voir {{ bug(650078) }}. Cela signifie que de telles instances ne sont pas réutilisables. Utiliser cette option crée systématiquement de nouvelles instances.

-
- -

-override /chemin/vers/override.ini

- -

Charge le fichier override.ini spécifié pour outrepasser application.ini ({{Source("browser/app/application.ini")}}). Cette option peut être utilisée pour faire disparaître le gestionnaire de migration au démarrage en chargeant l’override.ini qui suit. Uniquement pour Firefox.

- -
[XRE]
-EnableProfileMigrator=0
- -

-ProfileManager

- -

Lance le gestionnaire de profils. Abréviation : -P sans nom de profil.

- -

-P "nom_du_profil"

- -

Outrepasse le gestionnaire de profils et lance l'application avec le compte nom_du_profil. Ceci est utile pour gérer plusieurs profils. Attention ! La chaîne nom_du_profil est sensible à la casse. Si vous ne précisez pas de nom de profil, le gestionnaire de profils sera lancé. Vous devez utiliser un P majuscule sous Linux avec les versions antérieures à la 7.x, vu que l'option p (minuscule) sert à lancer le mode Purify (test des fuites et de la mémoire). Les autres plateformes acceptent aussi bien la minuscule que la majuscule.

- -
firefox -P "Utilisateur Joel"
-
- -

-profile "chemin_du_profil"

- -

Démarre avec le profil fourni depuis le chemin spécifié. Seulement pour Firefox, Thunderbird et SeaMonkey 2.x.

- -

"chemin_du_profil" peut aussi bien être un chemin absolu ("/chemin/du/profil")  que relatif ("/chemin/du/profil").

- -
Note : sur Mac OS X, utiliser un chemin relatif n'est plus pris en charge depuis Firefox 4.0 à cause d'une régression, voir {{ bug(673955) }}.
- - - -

-browser

- -

Démarre le navigateur. Seulement pour Firefox et SeaMonkey.

- -

-url URL

- -

Ouvre l'URL dans un nouvel onglet ou une nouvelle fenêtre, dépendant de l'absence ou de la présence de l'option browser. -url peut être omis. Vous pouvez charger plusieurs URL, separées par des espaces. Pour Firefox et SeaMonkey seulement.

- -
Note : quand vous ouvrez plusieurs URL, Firefox les ouvre dans des onglets d'une seule nouvelle fenêtre.
- -
firefox www.mozilla.com
-firefox www.mozilla.com developer.mozilla.org
-
- -

-private

- -

Ouvre Firefox en « fenêtre privée » de manière permanente. Pour Firefox 3.6 et ultérieur.

- -

Pourrait ne pas fonctionner pour Firefox 20 et précédents sous Ubuntu. Fonctionnement correct confirmé sous Ubuntu 14.04.

- -

-private-window

- -

Ouvre Firefox en « fenêtre privée » dans une instance déja en cours. Pour Firefox 20 et ultérieur.

- -

-private-window URL

- -

Ouvre l'URL dans une nouvelle « fenêtre privée ». Si une fenêtre privée est déja ouverte, ouvre un nouvel onglet. Firefox 29 et ultérieur seulement. Non fonctionnel pour Firefox 31 sous Linux Mint 17 (qui ouvre l'URL dans une fenêtre normale).

- -

-new-tab URL

- -

Ouvre l'URL dans un nouvel onglet. Firefox et SeaMonkey2.x seulement.

- -

-new-window URL

- -

Ouvre l'URL dans une nouvelle fenêtre. Firefox et SeaMonkey2.x seulement.

- -

-search Mot

- -

Recherche Mot avec le moteur de recherche par défaut. Firefox et SeaMonkey 2.1 et ultérieur.

- -

-preferences

- -

Ouvre la fenêtre des Préférences/Options. Firefox et SeaMonkey2.x seulement.

- -

-setDefaultBrowser

- -

Définit l'application comme navigateur par défaut. Firefox seulement.

- -

-foreground

- -

Fait de l'instance l'application active.

- -

Courriel/Nouvelles

- -

-mail

- -

Démarre le client courriel. Thunderbird et SeaMonkey seulement.

- -

-news news_URL

- -

Démarre le client de nouvelles. Si news_URL (optionnel) est spécifié, ouvre le groupe de nouvelles spécifié. Thunderbird et SeaMonkey seulement.

- -
thunderbird -news news://server/group
-
- -

-compose options_du_message

- -

Démarre l'outil de création de courriel. Voyez les régles de syntaxe. Thunderbird et SeaMonkey seulement.

- -
thunderbird -compose "to=foo@nowhere.net"
-
- -

-addressbook

- -

Démarre le carnet d'adresses. Thunderbird et SeaMonkey seulement.

- -

-options

- -

Ouvre la fenêtre des Préférences. Thunderbird seulement.

- -

-offline

- -

Démarre le logiciel en mode déconnecté. Thunderbird et SeaMonkey seulement.

- -

-setDefaultMail

- -

Définit l'application comme client courriel par défaut. Thunderbird seulement.

- -

Calendrier

- -

-calendar

- -

Démarre le client d'agenda. Sunbird seulement.

- -

-subscribe URL or -url URL

- -

S'abonne à l'URL. Sunbird seulement.

- -

-showdate date

- -

Affiche la date dans l'agenda. Sunbird seulement.

- -
sunbird -showdate 08/04/2008
-
- -

Autres composants

- -

-editor URL or -edit URL

- -

Démarre avec l'éditeur (compositeur) pour l'URL spécifiée (URL est optionnel). SeaMonkey seulement.

- -
seamonkey -edit www.mozilla.org
-
- -

-jsdebugger

- -

Démarre l'application avec Browser Toolbox (auparavant Browser Debugger). Ce débogueur est différent du Venkman (voyez l'option -venkman).

- -

-jsconsole

- -

Démarre l'application avec la console d'erreur, ou, dans le cas de Firefox, la console du navigateur.

- -

-start-debugger-server port

- -

Firefox seulement. Démarre le serveur du débogueur avec le port. Ceci permet à une autre instance de Firefox de connecter ses outils de développement à l'instance visée. Voyez l'article sur le débogage à distance du bureau Firefox.

- -

Le paramètre port est optionnel ; par défaut, le port 6000 est utilisé.

- -

-inspector URL

- -

Démarre l'inspecteur de DOM (s'il est installé) et inspecte l'URL spécifiée (URL est optionnel).

- -

-venkman

- -

Démarre le débogueur JavaScript, Venkman, s'il est installé.

- -

-purgecaches

- -

Vide le cache JavaScript de Gecko (le moteur de mise en page). Normalement le cache survit au redémarrage.

- -

-chat

- -

Démarre le client de clavardage IRC, ChatZilla, s'il est installé.

- -

XULRunner

- -

-app /chemin/vers/application.ini

- -

Démarre un nouveau processus XULRunner pour l'application se trouvant à chemin/vers. Fonctionne aussi pour Firefox version 3 et ultérieur.

- -

--register-global

- -

Inscrit XULRunner avec le système pour tous les usagers. Exige les privilèges admin / root.

- -

--register-user

- -

Inscrit XULRunner pour l'utilisateur en cours.

- -

--unregister-user

- -

Désinscrit XULRunner pour tous les utilisateurs.

- -

--unregister-user

- -

Désinscrit XULRunner pour l'utilisateur en cours.

- -

--install-app chemin/vers/myapplication.(xpi|xulapp)

- -

Installe l'application XULRunner se trouvant à chemin/vers sur le système. Les applications sont installées à l'emplacement par défaut du système (program files|Applications|usr/lib) sous nom_du_vendeur/nom_de_l_application. Les applications peuvent être désinstallées par les méthodes habituelles du système.

- -
"C:\Program Files\Mozilla XULRunner\1.8.0.4\xulrunner\xulrunner.exe" --install-app "C:\Users\Billdo\Desktop\myapplication.xpi"
- -
/opt/xulrunner/1.8.0.4/xulrunner/xulrunner --install-app ~/Desktop/myapplication.xulapp
- -
​/Library/Frameworks/XUL.framework/xulrunner-bin --install-app ~/Desktop/myapplication.xpi
- -

Chrome

- -

-chrome chrome_URL

- -

Charge le chrome spécifié.

- -
firefox -chrome chrome://inspector/content
-
- -

-register chrome_URL

- -

Inscrit le chrome spécifié, sans démarrer l'application.

- -

Modules complémentaires

- -

{{ gecko_minversion_note("1.9.2", "-install-global-extension et -install-global-theme ont été retirés de Gecko 1.9.2 et ultérieur.") }}

- -

-install-global-extension /chemin/vers/extension

- -

Installe l'extension spécifiée dans le dossier de l'application. Le paramètre donne le chemin menant au module. Vous devez disposer des privilèges administrateur.

- -

-install-global-theme /chemin/vers/theme

- -

Installe le thème spécifié. Vous devez disposer des privilèges administratifs.

- -
-

Note : depuis Firefox 2.0.0.7, les options -install-global-extension et -install-global-theme ne peuvent installer que depuis le stockage local (incluant le stockage réseau monté localement). L'installation directe depuis un stockage réseau échouera.

-
- -

-safe-mode

- -

Démarre l'application avec toutes les extensions désactivées, cette fois-ci seulement (les extensions ne sont pas chargées, mais ne sont pas non plus désactivées de façon permanente par le gestionnaire de modules complémentaires).

- -

Locale

- -

-UILocale locale

- -

Démarre avec l'interface régionalisée en locale.

- -
firefox -UILocale en-US
-
- -

Contrôle à distance

- -

-remote remote_command {{deprecated_inline}}

- -
-

Note : cette option a été retirée de Firefox 36.0, puis restaurée avec 36.0.1 pour être retirée définitivement avec 39.0. Voyez {{ bug(1080319) }}.

-
- -

Exécute la remote_command spécifiée dans un processus déja actif (voyez contrôle à distance).

- -
firefox -remote "openURL(www.mozilla.org, new-tab)"
-
- -
-

Note : cette option n'est disponible que pour les plateformes X-windows Unix.

-
- -

Divers

- -

-tray

- -

Démarre l'application minimisée dans la zone de notification du système. Utile avec le démarrage automatique.

- -

-silent

- -

N'ouvre pas les fenêtres par défaut. Utile pour les options qui ouvrent leurs propres fenêtres sans empêcher les fenêtres par défaut de s'ouvrir. Firefox, Thunderbird3.x et SeaMonkey2.x seulement.

- -

-console

- -

Démarre l'application avec la console de débogage. Note : Windows seulement.

- -

-attach-console

- -

Détourne les messages destinés à la console de débogage vers la fenêtre qui a lancé l'application. Note : Windows seulement.

- -

-h or -help or -?

- -

Affiche la liste des options et paramètres disponibles. Sous Windows, cette option ne fonctionne qu'avec une redirection |more ({{ Bug(355889) }}). Cette option n'est disponible qu'en ligne de commande.

- -

-v or -version

- -

Affiche la version de l'application. Sous Windows, cette option ne fonctionne qu'avec une redirection |more ({{ Bug(355889) }}). Cette option n'est disponible qu'en ligne de commande.

- -

-osint

- -

Indique à l'application qu'elle est lancée par l'invite de commande du système. Cette option ne doit être spécifiée que si l'application invocatrice prend en charge toutes les fonctionnalités de l'invite de commande du système ({{ Bug(384384) }}).

- -

-requestPending

- -

Indique à l'application qu'il y aura une requête DDE (Dynamic Data Exchange, Windows seulement) pour l'ouverture du même URL que celui spécifié par la ligne de commande. Cette option ne doit être spécifiée que si l'application invocatrice prend en charge toutes les fonctionnalités de l'invite de commande du système ({{ Bug(354005) }}).

- -

options X11

- -

Ces options ne sont disponibles que pour une application roulant sous le système graphique X11 / X.org (Linux et autres systèmes Unix).

- -

--display=DISPLAY

- -

Définit l'affichage X à utiliser.

- -

--class=WM_CLASS

- -

Définit WM_CLASS comme étant la classe de ressource X11 des fenêtres créées par l'application.

- -

--sync

- -

Rend les appels X synchrones.

- -

--g-fatal-warnings

- -

Rend tous les avertissements fatals.

- -

Autre options restant à documenter

- - - -

Références

- - - -
-

Information sur le document d'origine

- - -
diff --git a/files/fr/mozilla/css/index.html b/files/fr/mozilla/css/index.html deleted file mode 100644 index a3f0d4cec1..0000000000 --- a/files/fr/mozilla/css/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Mozilla internal-only CSS -slug: Mozilla/CSS -tags: - - TopicStub -translation_of: Mozilla/Gecko/Chrome/CSS ---- -

Cet ensemble de pages détaille les fonctionnalités CSS qui ne sont disponibles qu'en interne dans le navigateur Firefox, c'est-à-dire uniquement dans la feuille de style américaine.

- -

{{SubpagesWithSummaries}}

diff --git a/files/fr/mozilla/developer_guide/utilisation_de_la_machine_virtuelle_vm/index.html b/files/fr/mozilla/developer_guide/utilisation_de_la_machine_virtuelle_vm/index.html deleted file mode 100644 index 879be80ff2..0000000000 --- a/files/fr/mozilla/developer_guide/utilisation_de_la_machine_virtuelle_vm/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Utilisation de Mozilla build VM -slug: Mozilla/Developer_guide/Utilisation_de_la_Machine_Virtuelle_VM -tags: - - Compilation firefox - - Firefox - - Guide - - Guide du Developpeur - - Machine Virtuelle Mozilla - - Mozilla - - VirtualBox -translation_of: Archive/Mozilla/Using_the_VM ---- -

Si vous vous êtes jamais demandés à quoi ressemble une contribution à Firefox mais vous n'aviez jamais le temps pour lire et poursuivre jusqu'au bout nos instructions pour configurer un environnement de devéloppement ou avez voulu éviter de faire des changements à vos outils standard et configuration, alors ceci pourrait être pour vous. Mozilla fournit une machine virtuelle (VM) qui est compatible avec le logiciel de virtualisation gratuit VirtualBox (aussi bien que d'autres, y compris VMWare/VMWare Fusion).

- -

Cet article fournit des instructions simples pour le téléchargement, l'installation et la configuration  de cet environnement de developpement; une fois que vous avez fini les étapes ci-dessous, vous aurez un VM prêt pour modifier et adapter Firefox.

- -

Esperant que ce VM aidera particulièrement des développeurs ou les développeurs potentiels qui n'ont pas un environnement de développement  C++ complet disponible pour eux

- -

Installation de VirtualBox

- -

Visitez la page de téléchargements de VirtualBox et télécharger la dernière version du logiciel pour votre système d'exploitation.

- -
-

Note: Si vous avez déjà un produit de virtualisation installé, comme VirtualBox, VMWare, ou VMWare Fusion, vous pouvez l'utiliser au lieu de télécharger une nouvelle copie de VirtualBox. Assurez-vous que vous avez la dernière version du logiciel. Notez que Parallels Desktop ne prend pas en charge le format OVF.

-
- -

Telechargement de la VM

- -

Ensuite, téléchargez l'environnement de développement de Firefox VM.

- -

TELECHARGER LA VM

- -

SHA-256: 1c84eaf97ea2a9a3c990051306a038da9541a450fd600878e7c1f984fa930f35

- -
-

Note: Ce fichier fait environ 4.4 Go, il peut prendre un certain temps à télécharger.

-
- -

Configuration de la VM

- -

Après avoir téléchargé le fichier .ova des machines virtuelles, double-cliquez sur le fichier; cela démarrera le processus d'importation de la machine virtuelle dans VirtualBox. Il est fortement recommandé de donner à la VM une mémoire vive minimum de 4096 Mo (8192 Mo ou plus si vous le pouvez), aussi configurer la afin d'avoir le même nombre de processeurs que votre ordinateur hôte. Le devéloppement de Firefox utilise beaucoup de ressources système, et que vous voulez construire le plus rapidement possible.

- -

Screen shot of the Import Virtual Appliance window

- -

Une fois que vous avez terminé d'importer la machine virtuelle, vous pouvez effectuer des personnalisations supplémentaires si vous le souhaitez, ou tout simplement démarrer la machine virtuelle et attendre que le bureau Ubuntu apparaisse. Une fenêtre du Terminal (l'equivalent de la l'invite de commande sur Windows) s'affichera automatiquement et effectuera certaines activités de configuration finale. Une fois celles-ci terminée, Sublime Text démarrera, et vous pourriez commencer à travailler !

- -

Screen shot of the Sublime Text editor running in the VM

- -
-

Note: Si jamais vous avez besoin d'informations d'identification root, utilisez "firefox-dev" comme mot de passe. Si vous souhaitez modifier vos paramètres de langue et de clavier, suivez les instructions Comment changer la langue de l'interface utilisateur dans Ubuntu.(page en Anglais)

-
- -

Compilation de Firefox

- -

Pour Compiler Firefox dans la machine virtuelle (VM), ouvrez le menu "Outils" et choisissez l'option "Compiler" . Le processus de Compilation commencera, et vous avez du temps pour boire un verre, un bon repas, ou peut-être une petite pause, tout depend de la puissance de votre ordinateur. Vous devez être patient.
-
- Une fois que la Compilation terminée (avec succès), choisissez l'option Exécuter dans le menu "Outils" pour démarrer votre version personnalisée de Firefox. Assurez-vous que tout ce que le pire comme prévu.
-
- Par défaut, la machine virtuelle est configuré pour compiler une compilation optimisée de Firefox. Vous pouvez facilement passer de la compilation au débogage. Il suffit d'ouvrir le menu "Outils", puis le sous-menu "Build System". Dans la dernière sous-menu de "Build System"
, choisissez «Firefox (Debug)". C'est tout ! Votre prochaine Compilation sera une accumulation de débogueur.

- -

Screen shot showing how to switch between debug; and optimized builds

- -

Travailler dans la VM

- -

De là, vous travaillez dans la machine virtuelle tout comme vous le feriez ailleurs. Pour recupérer le dernier code de mozilla-central, il suffit d'utiliser Mercurial comme d'habitude :

- -
hg pull
- -

Et soumettez vos patchs(page en Anglais) de la même manière que vous le feriez normalement.

- -

Et Maintenant ?

- -

Maintenant que vous avez construit avec succès Firefox dans votre VM flambant neuf, vous demandez peut-être ce qu'il faut faire ensuite. Une excellente façon de commencer est de choisir un petit bug facile à fixer et code qui applique ces patches. Imaginez comment il est génial d'avoir le code que vous avez écrit expédié à un demi-milliard d'utilisateurs partout dans le monde !

- -

Voici quelques liens pour vous aider à trouver quelque chose que vous pouvez faire pour améliorer Firefox:

- - - -

Vous pouvez également poser vos questions sur "ou commencer " {{IRCLink("introduction")}},  et des questions de développement de Firefox ici {{IRCLink("developers")}}.

diff --git a/files/fr/mozilla/enregistrement_chrome/index.html b/files/fr/mozilla/enregistrement_chrome/index.html deleted file mode 100644 index fdbe05fa9b..0000000000 --- a/files/fr/mozilla/enregistrement_chrome/index.html +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Enregistrement chrome -slug: Mozilla/Enregistrement_chrome -tags: - - API_du_toolkit -translation_of: Mozilla/Chrome_Registration ---- -

 

- -

Définition du chrome

- -

Le chrome est l'ensemble des éléments de l'interface utilisateur d'une application qui sont situés en dehors de la zone de contenu d'une fenêtre. Les barres d'outils, les barres de menus, les barres de progression, et les titres de fenêtres sont tous des exemples d'éléments qui font habituellement partie du chrome.

- -

Fournisseurs de chrome

- -

Ce qui fournit le chrome pour un type de fenêtre donnée (par exemple pour la fenêtre du navigateur) est appelé un fournisseur de chrome (Chrome Provider). Les fournisseurs collaborent pour fournir un jeu complet de chrome pour une fenêtre particulière, depuis les images des boutons de la barre d'outils jusqu'aux fichiers décrivant le texte, le contenu et l'apparence de la fenêtre elle-même.

- -

Il y trois types basiques de fournisseurs de chrome :

- -

content

- -

Le fichier principal pour la description d'une fenêtre provient du fournisseur « content », et il peut s'agir de n'importe quel type de fichier que Mozilla peut afficher. Il s'agit généralement de fichiers XUL, puisque XUL est conçu pour décrire le contenu de fenêtres et de boîtes de dialogue. Les fichiers JavaScript définissant l'interface utilisateur font également partie des paquetages content, ainsi que la plupart des fichiers de liaisons XBL.

- -

locale

- -

Les applications localisables (disponibles en plusieurs langues) ont leurs informations de localisation dans des fournisseurs « locale ». Cela permet aux traducteurs de fournir un paquetage différent pour traduire toute une application sans toucher au reste du code source. Les deux principaux types de fichiers de localisation sont les fichiers DTD et les fichiers properties de style Java.

- -

skin

- -

Un fournisseur « skin » est responsable de la fourniture complète des fichiers décrivant l'apparence visuelle du chrome. Typiquement, un thème graphique fournit des fichiers CSS et des images.

- -

Le registre chrome

- -

L'environnement d'exécution Gecko s'occupe d'un service appelé le registre chrome fournissant une cartographie complète permettant de lier les noms de paquetages chrome et leurs emplacements physiques sur le disque.

- -

Le registre chrome est configurable et persistant, un utilisateur peut donc installer des fournisseurs de chrome différents et sélectionner un thème ou une langue préférée. Tout ceci est accompli au travers d'xpinstall et du gestionnaire d'extensions.

- -

Afin d'informer le registre chrome de la présence d'un nouveau chrome, un texte de présentation appelé manifest est utilisé : il s'agit du fichier chrome.manifest à la racine d'une extension ou d'un thème, ou d'une application XULRunner.

- -

Ces fichiers sont de simples fichiers textes présentés ligne par ligne. Chaque ligne est interprétée individuellement. Si la ligne peut être interprétée, le registre chrome réalise l'action identifiée par cette ligne, autrement, le registre chrome ignorera cette ligne (et affichera un message d'alerte dans la console d'erreurs d'exécution).

- -
locale nomdupaquetage nomlocale chemin/vers/fichiers
-skin nomdupaquetage nomskin chemin/vers/fichiers
-
- -

Instructions du fichier manifest

- -

Commentaires

- -

Une ligne est un commentaire si elle commence par le caractère « #» ; tous les autres caractères sur la ligne seront ignorés.

- -
# cette ligne est un commentaire - vous pouvez mettre ce que vous voulez ici
-
- -

content

- -

Un paquetage de type content est enregistré par la ligne :

- -
content nomdupaquetage uri/vers/fichiers/ [drapeaux]
-
- -

Ceci va enregistrer un emplacement à utiliser lors de la résolution de l'URI chrome://nomdupaquetage/content/.... L'URI peut être absolue ou relative à l'emplacement du fichier manifeste. Notez qu'elle doit se terminer par une barre oblique « / ».

- -

locale

- -

Un paquetage de type locale est enregistré par la ligne :

- -
locale nomdupaquetage nomlocale uri/vers/fichiers/ [drapeaux]
-
- -

Ceci va enregistrer un paquetage locale lors de la résolution de l'URI chrome://nomdupaquetage/locale/... . La chaîne nomlocale est habituellement un identifiant de langue comme « en » ou de langue spécifique à un pays comme « en-US ». Si plus d'une localisation est enregistrée pour un paquetage, le registre chrome sélectionnera la plus appropriée en fonction des préférences de l'utilisateur.

- -

skin

- -

Un paquetage de thème est enregistré par la ligne :

- -
skin nomdupaquetage nomskin uri/vers/fichiers/ [drapeaux]
-
- -

Ceci va enregistrer un paquetage de thème lors de la résolution de l'URI chrome://nomdupaquetage/skin/... . La chaîne nomskin est une chaîne opaque identifiant le thème installé. Si plus d'un thème est enregistré pour un paquetage, le registre chrome sélectionnera le plus approprié en fonction des préférences de l'utilisateur.

- -

style

- -

Les overlays de style (CSS personnalisée qui sera appliquée à une page chrome) sont enregistrés avec la syntaxe suivante :

- -
style chrome://URI-vers-style chrome://stylesheet-URI [drapeaux]
-
- -

override

- -

Dans certains cas, une extension ou une application embarquant le moteur peut avoir envie de remplacer un fichier chrome fourni par l'application ou par XULRunner. Pour autoriser ce remplacement, le manifeste d'enregistrement chrome doit contenir des instructions « override » :

- -
override chrome://paquetage/type/uri-originelle.qqc nouvelle-URI-résolue [drapeaux]
-
- -

Note : les overrides ne sont pas récursifs (donc remplacer chrome://foo/content/bar/ par file:///home/john/blah/ ne fera généralement pas ce que vous désirez ou vous attendez à voir).

- -
-

Un bogue est actuellement présent dans les versions de Gecko antérieures à 1.8.0.13 et 1.8.1.5, ainsi que dans des compilations plus anciennes, où l'utilisation d'une URL relative pour le paramètre nouvelle-URI-résolue ne fonctionnera pas. Il est nécessaire de fournir une URL complètement qualifiée (c'est-à-dire qui peut être résolue n'importe où, pas uniquement dans le répertoire dans lequel le manifeste chrome se trouve). Étant donné que le développeur d'extension ou d'application est incapable de prédire ce que sera le chemin vers un tel fichier, il est actuellement uniquement possible d'utiliser cette directive avec une autre URL chrome:// comme paramètre nouvelle-URI-résolue. Voir le {{ Bug(323455) }}.

-
- -

Drapeaux de fichiers manifest

- -

Dans les fichiers manifest, plusieurs drapeaux séparés par des virgules peuvent être ajoutés à la fin des lignes d'enregistrement. Ces drapeaux indiquent des attributs spéciaux du chrome dans ce paquetage ou limite les conditions d'utilisation de la ligne.

- -

application

- -

Des extensions peuvent s'installer dans plusieurs applications différentes. Certaines lignes d'enregistrement chrome peuvent toutefois être réservées à une application particulière. Le drapeau

- -
application=app-ID
-
- -

indique que l'instruction ne doit être appliquée que si l'extension est installée dans une application ayant pour identifiant app-ID. Plusieurs drapeaux application peuvent être fournis sur une même ligne, auquel cas elle sera appliquée si n'importe lequel d'entre-eux correspond.

- -

appversion

- -

Des extensions peuvent s'installer dans plusieurs versions différentes d'une application. Il peut y avoir des lignes d'enregistrements chrome qui ne s'appliquent qu'à une version particulière de l'application. Le drapeau

- -
appversion=version
-appversion<version
-appversion<=version
-appversion>version
-appversion>=version
-
- -

indique que l'instruction ne doit s'appliquer que si l'extension est installée dans la version de l'application indiquée. Plusieurs drapeaux appversion peuvent figurer sur la même ligne, auquel cas la ligne sera appliquée si n'importe lequel d'entre-eux correspond. La chaîne de version doit se conformer au Format de version du toolkit.

- -

platform (paquetages propres à la plateforme)

- -

Certains paquetages sont marqués à l'aide d'un drapeau particulier indiquant qu'ils sont propres à une plateforme. Certaines parties de content, skin ou locale peuvent être différents selon la plateforme sur laquelle l'application est exécutée. Ces paquetages contiennent trois jeux de fichiers différents, pour Windows/OS2, Macintosh et les plateformes de type Unix. Par exemple, l'ordre des boutons « OK » et « Annuler » dans un dialogue n'est pas le même d'une plateforme à l'autre, de même que le nom de certains éléments.

- -

L'indicateur « platform » n'est pris en compte que dans le cas d'un enregistrement content, il n'est pas reconnu dans le cas d'un enregistrement locale ou string. Cependant, il s'applique aux parties content, locale et skin lorsque spécifié.

- -

Pour indiquer qu'un paquetage est propre à une plateforme, ajoutez l'indicateur « platform » après le chemin sur la ligne content, par exemple :

- -
content global-platform jar:toolkit.jar!/toolkit/content/global-platform/ platform
-
- -

Une fois ceci spécifié dans votre fichier manifest, assurez-vous ensuite que, sous le répertoire global-platform, les sous-répertoires win (Windows/OS2), mac (OS9/OSX), ou unix (tous les autres cas) sont présents. Tout ce qui se trouve en dehors de ces sous-répertoires sera ignoré.

- -

xpcnativewrappers

- -

Les paquetages chrome peuvent décider s'ils utilisent ou non le mécanisme de sécurité XPCNativeWrapper pour protéger leur code contre du contenu malveillant auquel ils pourraient eccéder. Consultez Accès sécurisé au contenu DOM depuis le chrome pour plus de détails.

- -

Dans les versions alpha de Firefox 1.5 alpha (les alphas Deer Park), ce drapeau est *désactivé* par défaut, et doit être activé explicitement en spécifiant xpcnativewrappers=yes.

- -

À partir de la première version beta de Firefox 1.5, ce drapeau est activé par défaut, et les extensions qui ont besoin d'accès non sécurisés aux objets du contenu devront spécifier explicitement xpcnativewrappers=no.

- -

Le drapeau xpcnativewrappers ne s'applique qu'au paquetages de type content : il n'est pas reconnu par les enregistrements locale ou skin.

- -

Exemple de fichier manifest chrome

- -
content       necko              jar:comm.jar!/content/necko/ xpcnativewrappers=yes
-locale        necko       fr     jar:fr.jar!/locale/fr/necko/
-content       xbl-marquee        jar:comm.jar!/content/xbl-marquee/
-content       pipnss             jar:pipnss.jar!/content/pipnss/
-locale        pipnss      fr     jar:fr.jar!/locale/fr/pipnss/
-content       pippki             jar:pippki.jar!/content/pippki/ xpcnativewrappers=yes
-locale        pippki      fr     jar:fr.jar!/locale/fr/pippki/
-content       global-platform    jar:toolkit.jar!/content/global-platform/ platform
-skin          global      classic/1.0 jar:classic.jar!/skin/classic/global/
-override chrome://global/content/netError.xhtml jar:embedder.jar!/global/content/netError.xhtml
-content       inspector          jar:inspector.jar!/content/inspector/ xpcnativewrappers=no
-
- -

Anciens fichiers manifest de type contents.rdf

- -

Avant que les fichiers texte de type manifest soient mis en place (avec Firefox 1.5 et la version 1.8 du toolkit), des fichiers RDF appelés « contents.rdf » étaient utilisés pour les enregistrements chrome. Ce format n'est plus recommandé, cependant la suite Mozilla (SeaMonkey) ne permet pas encore d'utiliser les fichiers texte au format manifest, et des fichiers contents.rdf sont toujours nécessaires pour les extensions qui désirent maintenir une rétrocompatibilité avec Firefox 1.0 ou la suite.

diff --git a/files/fr/mozilla/firefox/compiler_firefox_avec_rust/index.html b/files/fr/mozilla/firefox/compiler_firefox_avec_rust/index.html deleted file mode 100644 index b44152a57f..0000000000 --- a/files/fr/mozilla/firefox/compiler_firefox_avec_rust/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Compiler Firefox avec Rust -slug: Mozilla/Firefox/Compiler_Firefox_avec_Rust -tags: - - Compilation - - Gecko - - rust -translation_of: Archive/Mozilla/Firefox/Building_Firefox_with_Rust_code ---- -
{{FirefoxSidebar}}

En mai 2015 le langage de programmation Rust a atteint sa version stable 1.0 et diverses expérimentations comme la rédaction de parties de Gecko en Rust ont commencé. Cette page est un guide sommaire destiné aux personnes travaillant sur ce projet.

- -

Ajouter le code Rust

- -

Le support de base pour la compilation avec le code Rust est disponible sur la page du  bogue 1161339. Si vous disposez de rustc dans votre variable path vous pouvez ajouter les fichiers .rs à la variable SOURCES dans moz.build, puis ajouter :

- -
ac_add_options --enable-rust
- -

à votre mozconfig et ça devrait fonctionner.

- -

La bibliothèque standard de rust utilise un thread local de stockage qui n'est pas supporté sur MacOS X 10.6. Ainsi, si vous compilez le projet depuis un Mac vous devez aussi ajouter :

- -
ac_add_options --enable-macos-target=10.7
- -

Vous pouvez aussi compiler une toolchain personnalisée de Rust sans la partie relative à std::thread. Pour plus de détails, regardez le bogue 1164109.

- -

Because of limitations of cargo and the Firefox build system, currently we build a stand-alone static lib from each rust file listed in SOURCES. You must therefore list just the top-level rust file. Everything must be a single crate, like a manual unified build. The rust compiler will search for interior modules by source file name, but extern crate references won't be resolved.

- -

Allez voir le bogue 1135640 ('oxidation') pour un suivi global.

- -

Tester le code Rust

- -

Il existe un test unitaire simple de disponible dans le répertoire du projet. Vous pouvez l'utiliser pour savoir si Rust est activé et fonctionne avec votre configuration.

- -
./mach gtest rust.*
- -

Regardez si le test rust.CallFromCpp réussi ainsi que tous les autres.

diff --git a/files/fr/mozilla/firefox/deploiement_entreprise/index.html b/files/fr/mozilla/firefox/deploiement_entreprise/index.html deleted file mode 100644 index 13913c8e06..0000000000 --- a/files/fr/mozilla/firefox/deploiement_entreprise/index.html +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: Déploiement de Firefox dans un environnement d'entreprise -slug: Mozilla/Firefox/deploiement_Entreprise -tags: - - Déploiement - - Entreprise - - Firefox -translation_of: Mozilla/Firefox/Enterprise_deployment_before_60 ---- -
{{FirefoxSidebar}}
- -

Cette page documente de pied en cap le processus de gestion de Mozilla Firefox sur des ordinateurs fonctionnant sur Windows ou macOS dans le cadre d'une entreprise. Vous pouvez envoyer vos questions par courrier électronique à la liste de diffusion du groupe de travail pour les entreprises (Enterprise Working Group) via enterprise@mozilla.org (en anglais). Mieux encore, vous pouvez rejoindre les discussions en cours en vous inscrivant à la liste en anglais ou en français.

- -
-

Note : cet article couvre des versions de Firefox antérieures à Firefox 60 ESR. Pour un déploiement dans des environements d’enterprises dans Firefox 60 ou plus récent, consultez l’article Deploying Firefox in an enterprise environment.

-
- -

Choisissez une variante de Firefox

- -

RR (Version Rapide)

- -

Mozilla publie une nouvelle version majeure avec de nouvelles fonctionnalités et des corrections de bugs toutes les six semaines (et, si besoin, des mises à jour de sécurité durant cette période). Le jour où une version majeure est lancée, dans la plupart des cas (voir plus bas pour les exceptions), Mozilla arrête de fournir des correctifs de bugs pour les versions précédentes.

- -

Pour vous renseigner sur les dates de sortie des prochaines versions, vous pouvez regarder ce tableau sur le wiki Mozilla.

- -

ESR (version de support étendu)

- -

Chaque septième version majeure de Firefox est déclarée version de support étendu. Ces versions reçoivent les corrections des gros bugs issus des versions mineures pendant 54 semaines (neuf cycles de six semaines). De plus, un chevauchement de 12 semaines (deux cycles de six semaines) entre deux versions successives de type ESR est effectué, au cours de laquelle les deux versions ESR obtiennent des corrections de bugs.

- -

Les versions ESR sont les versions 10, 17, 24, 31 et 38.

- -

De nombreuses entreprises et organisations avec des environnements informatiques généralisés préfèrent utiliser des versions ESR que des versions RR car elles peuvent tester leur comptabilité sur une période de 42 semaines au lieu de la période de 6 semaines (entre chaque RR). De plus si elles ont un problème, elles disposent de 12 semaines de plus (chevauchement entre 2 versions ESR) pour trouver une solution (en plus des 6 semaines obtenues en testant la version beta).

- -

Notez que des effets indésirables peuvent se faire ressentir si vous passez d'une version RR à une version ESR antérieure. En effet, les versions RR voient parfois de nouvelles fonctionnalités non finies intégrées à leur code pour pouvoir les tester, mais désactivées par les préférences. Lors d'un retour à une version précédente, les utilisateurs gardent leurs derniers paramètres dans leur répertoire de profil. Une option peut alors être activée sans qu'elle ne soit totalement fonctionnelle sur la version ESR. Si vous souhaitez passer d'une version RR à une version ESR, vous devriez le faire lorsqu'une nouvelle version ESR voit le jour.

- -

Installation

- -
    -
  1. Téléchargez la dernière version de Firefox depuis https://www.mozilla.org/en-US/firefox/all/ (RR) ou https://www.mozilla.org/en-US/firefox/organizations/all/ (ESR).
  2. -
  3. Installez la version sur le système d'exploitation de votre choix (L'option pour une installation silencieuse est -ms).
  4. -
  5. Vous pouvez aussi créer un fichier d'initialisation. Pour plus d'informations, vous pouvez visiter cette page (en).
  6. -
- -

Configuration

- -
    -
  1. Trouvez le répertoire où l'exécutable est présent. Par exemple, sur Windows 7 (64 bits), le répertoire est souvent C:\Program Files (x86)\Mozilla Firefox; dans Mac OSX 10.8 il s'agit de /Applications/Firefox.app/Contents/MacOS. Les sous-répertoires mentionnés par la suite sont relatifs à ce dossier.
  2. -
  3. Créez un fichier javascript dans defaults/pref (généralement, autoconfig.js - d'autres noms fonctionnent, mais pour de meilleurs résultats, il faut que le nom commence par un 'a'). Le contenu de ce fichier indique à Firefox où trouver le fichier de configuration. (Pour plus d'informations : Customizing Firefox default preference files (en)).Les trois lignes dont vous avez besoin sont : -
    // Vous devez démarrer ce fichier avec un commentaire !
    -pref("general.config.filename", "mozilla.cfg");
    -pref("general.config.obscure_value", 0);
    -
  4. -
  5. Créez un fichier .cfg (généralement mozilla.cfg — le nom peut être différent, mais il faut que ça corresponde au nom entré dans les 2 lignes précédentes) dans le répertoire du programme. Passez ou commentez la première ligne, puis commencer à mettre vos préférences. Pour savoir quelles préférences mettre, rendez-vous sur la page about:config sur une copie de Firefox correctement configurée et regardez les préférences ayant pour statut "user set", ou regardez les exemples suivants. Toute préférence peut être réglée via une des fonctions suivantes : -
    -
    pref
    -
    Un utilisateur peut changer une valeur, mais elle sera effacée au prochain redémarrage. Si vous mettez une préférence de cette manière, elle sera montrée comme "user set" dans about:config
    -
    defaultPref
    -
    pour modifier la valeur par défaut. Si un utilisateur change cette valeur, il pourra la garder entre plusieurs sessions. Les préférences peuvent être réinitialisées via la GUI ou autre méthode. Elle sera montrée avec un statut "default" dans about:config
    -
    lockPref
    -
    pour bloquer les préférences. Elles ne pourront pas être changées par la GUI ou via about:config. Dans la majeure partie des cas, la GUI va enlever l'option ou la griser. Certains éléments de la configuration nécessitent un réglage via lockPref, tels que app.update.enabled (pref ne fonctionnera pas).
    -
    clearPref
    -
    pour rendre vierge certaines préférences. Peut s'avérer utile pour désactiver des fonctions se basant sur un numéro de version.
    -
    -
  6. -
- -

Vous pouvez visiter Customizing Firefox autoconfig files (en) ou Customizing Firefox autoconfig files continued (en) pour plus d'informations. Pour désactiver des éléments de l'interface utilisateur, vous pouvez utiliser l'extension CCK2.

- -

Exemple de fichier de configuration

- -

Dans l'exemple qui suit, vous pouvez voir des exemples de références nécessitant l'utilisation de lockPref.

- -
// Désactive la mise à jour automatique
-lockPref("app.update.enabled", false);
-// pour être sûr que la mise à jour automatique soit désactivée
-lockPref("app.update.auto", false);
-lockPref("app.update.mode", 0);
-lockPref("app.update.service.enabled", false);
-
-// Désactive la vérification de la comptabilité des extensions
-clearPref("extensions.lastAppVersion");
-
-// Désactive l'affichage de 'Connaître vos droits' au premier lancement
-pref("browser.rights.3.shown", true);
-
-// Ne montre pas les nouvelles fonctionnalités à chaque mise à jour
-pref("browser.startup.homepage_override.mstone","ignore");
-
-// Modifie la page d'accueil
-defaultPref("browser.startup.homepage", "http://home.example.com");
-
-// Désactive le lecteur de pdf interne
-pref("pdfjs.disabled", true);
-
-// Désactive le convertisseur flash vers javascript
-pref("shumway.disabled", true);
-
-// Ne demande pas d'installer le plugin flash
-pref("plugins.notifyMissingFlash", false);
-
-// Désactive la vérification des plugins
-lockPref("plugins.hide_infobar_for_outdated_plugin", true);
-clearPref("plugins.update.url");
-
-// Désactive le rapport de santé
-lockPref("datareporting.healthreport.service.enabled", false);
-
-// Disable all data upload (Telemetry and FHR)
-lockPref("datareporting.policy.dataSubmissionEnabled", false);
-
-// Désactive le rapport de crashs
-lockPref("toolkit.crashreporter.enabled", false);
-Components.classes["@mozilla.org/toolkit/crash-reporter;1"].getService(Components.interfaces.nsICrashReporter).submitReports = false; 
-
- -

Packaging d'extensions

- -
    -
  1. Installez l'extension sur une machine de test. Regardez la page about:support sous Extensions pour trouver le GUID
  2. -
  3. Regardez dans le répertoire des profils (ex: %APPDATA%\Mozilla\Firefox\Profiles pour Win7; pour le trouver, regardez Profile Directory sur la page about:support), puis sous "Extensions" pour l'extension souhaitée. Il s'agit soit d'un fichier .xpi (correspondant à un .zip) ou un dossier avec de multiples fichiers.
  4. -
  5. Décidez de la façon dont vous voulez la déployer. La méthode la plus simple est de copier le .xpi ou le dossier dans le dossier /distribution/extensions mais cette méthode ne fonctionne que pour les profils créés après l'ajout de l'extension. De plus, si vous réinstallez firefox, le dossier sera supprimé, assurez-vous de réinstaller les extensions par la suite. Vous pouvez vous rendre sur cette page Integrating add-ons into Firefox (en) pour trouver d'autres méthodes.
  6. -
- -

Changements au fil du temps

- -

Changement dans la structure des répertoires

- -

La structure des répertoires intégrée au programme a changé 2 fois. Si vous lisez des descriptions sorties avant la version 21, il faut probablement prendre en compte les points suivants :

- - - -

La configuration des préférences general.config.filename et general.config.obscure_value pour AutoConfiguration peut être réalisée dans le dossier defaults/pref, mais le fichier de configuration doit commencer par la lettre 'a', comme par exemple autoconfig.js.

- -

Si l'opération venait à échouer depuis defaults/pref dans une des versions suivantes de Firefox, essayez avec browser/defaults/preferences.

- -

Changement de répertoire sur Mac

- -

En raison de l'approche d'Apple plus stricte en matière de signature de logiciel, depuis environ la version 35 les fichiers de configuration doivent être placés sous /Applications/Firefox.app/Contents/Resources (c'est là que doit aller mozilla.cfg et autoconfig.js sous /Applications/Firefox.app/Contents/Resources/defaults/pref).

- -

Changements dans ESR 24.x avec les fichiers PDF Adobe

- -

Firefox RR 19.x modifie l'outil de visionnage d'Adobe pour les fichiers .pdf afin d'utiliser l'outil interne. Ce changement est présent dans la version ESR 24.x et la préférence se modifie automatiquement lors de la mise à jour depuis ESR 17.x même si un outil de visionnage externe a été configuré. Le nom du type de fichier a aussi été modifié passant de Adobe Acrobat Document à Portable Document Format (PDF), le rendant difficile à localier via les outils ou options. Pour désactiver cette fonctionnalité, modifiez pdfjs.disabled à true, comme dans le fichier d'exemple plus haut.

diff --git a/files/fr/mozilla/firefox/developer_edition/index.html b/files/fr/mozilla/firefox/developer_edition/index.html deleted file mode 100644 index 23cf232d3b..0000000000 --- a/files/fr/mozilla/firefox/developer_edition/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Édition pour les développeurs -slug: Mozilla/Firefox/Developer_Edition -tags: - - Developer Edition -translation_of: Mozilla/Firefox/Developer_Edition ---- -
{{FirefoxSidebar}}

- -

Une version de Firefox adaptée sur mesure pour les développpeurs web.

- -

Télécharger Firefox Developer Edition

- -
-
-
-

Les dernières fonctionnalités de Firefox

- -

L'édition de Firefox pour les développeurs remplace le canal de distribution Aurora dans le système de release de Firefox. De la même manière que pour Aurora, les nouvelles fonctionnalités seront intégrées à cette édition toutes les six semaines, une fois qu'elles auront été suffisamment stabilisées avec les versions Nightly.

- -

En utilisant l'édition développeur, vous pourrez avoir accès aux outils et aux fonctionnalités 12 semaines avant que ceux-ci ne soient disponibles sur le canal de release.

- -

Découvrez les nouveautés de l'édition de Firefox pour les développeurs.

-
- -
-

Des outils de développement expérimentaux

- -

Certains outils expérimentaux seront intégrés pour maturer avant d'atteindre le canal de distribution release.

- -

Ainsi, l'édition développeur intègre l'extension Valence, qui permet de connecter les outils de développement Firefox à d'autres navigateurs tels que Chrome pour Android ou Safari pour iOS.

-
-
- -
-
-

Un profil à part entière

- -

L'édition de Firefox pour les développeurs utilise un profil séparé de celui des autres versions de Firefox installées sur le même ordinateur. Cela signifie que vous pouvez facilement utiliser une version développeur en même temps qu'une version beta.

-
- -
-

Une version paramétrée pour les développeurs web

- -

Les préférences utiles au développement web sont activées et paramétrées. Le débogage du chrome et le débogage à distance sont par exemple activés par défaut.

-
-
- -
-
-

Un thème distinct

- -

Ce thème permet d'accéder plus rapidement aux outils de développement.

-
-
- -

 

diff --git a/files/fr/mozilla/firefox/developer_edition/reverting/index.html b/files/fr/mozilla/firefox/developer_edition/reverting/index.html deleted file mode 100644 index 231da0448a..0000000000 --- a/files/fr/mozilla/firefox/developer_edition/reverting/index.html +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Supprimer les fonctionnalités spéciales -slug: Mozilla/Firefox/Developer_Edition/Reverting -translation_of: Mozilla/Firefox/Developer_Edition/Reverting ---- -
{{FirefoxSidebar}}

Changer le thème de la Developer Edition

- -

Si vous souhaitez utiliser la Developer Edition, mais que vous préférez utiliser le thème Australis utilisé dans Firefox et Firefox Beta, vous pouvez utiliser le thème normal de Firefox. Ouvrez le panneau « Personnaliser » et cliquez sur le bouton « Utiliser le thème Firefox Developer Edition ».

- -

{{EmbedYouTube("oiHt8T1Liyk")}}

- -

Vous pouvez également tapper “about:addons” dans la barre d'URL, sélectionner « Apparence » et changer le thème depuis cet endroit.

- -

Revenir à Firefox Aurora

- -

Si vous souhaitez toutes les fonctionnalités pre-Beta dans Firefox Developer Edition, mais que vous ne souhaitez aucun autre changement, vous pouvez revenir à l'ancien Firefox Aurora. Cette opération restaurera votre profil et vos données de session d'avant la mise à jour. C'est un processus en deux étapes, qu'il faut suivre dans cet ordre :

- -
    -
  1. Ouvrez la page Préférences de la Developer Edition, et décochez la case "Autoriser Firefox Developer Edition et Firefox à s'exécuter en parallèle". Il vous sera demandé de redémarrer le navigateur.
  2. -
  3. Après avoir redémarré, vous pouvez restaurer le thème de la Developer Edition en suivant les instructions de la section « Changer le thème de la Developper Edition » ci-dessus.
  4. -
- -

{{EmbedYouTube("8rEJn_hATE8")}}

diff --git a/files/fr/mozilla/firefox/firefox_esr/index.html b/files/fr/mozilla/firefox/firefox_esr/index.html deleted file mode 100644 index 594d9bbaa4..0000000000 --- a/files/fr/mozilla/firefox/firefox_esr/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Firefox ESR -slug: Mozilla/Firefox/Firefox_ESR -tags: - - ESR - - Firefox pour Bureau - - LTS - - Stratégie de Groupe - - Version au Support Allongé - - gpo -translation_of: Mozilla/Firefox/Firefox_ESR ---- -
{{FirefoxSidebar}}

Firefox Extended Support Release (ESR) est basé sur une version officielle de Firefox pour ordinateur, le public visé étant les entreprises qui ont besoin d'un support étendu dans le cadre de déploiements d'envergure. Contrairement aux autres canaux de distribution, les versions ESR ne sont pas mises à jour toutes les six semaines avec de nouvelles fonctionnalités ;  par contre, elles sont supportées pendant environ un an et reçoivent des correctifs en cas de problème de stabilité ou de risque de sécurité majeur. La version ESR actuelle se base sur Firefox 60 paru le 9 mai 2018.

- -

Nous encourageons fortement les utilisateurs de Firefox ESR à s'inscrire sur la liste de diffusion Enterprise Working Group (EWG).

diff --git a/files/fr/mozilla/firefox/headless_mode/index.html b/files/fr/mozilla/firefox/headless_mode/index.html deleted file mode 100644 index e852a2c775..0000000000 --- a/files/fr/mozilla/firefox/headless_mode/index.html +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: Le mode headless -slug: Mozilla/Firefox/Headless_mode -tags: - - Automatisation - - Firefox - - Mode Headless - - QA - - node.js - - test -translation_of: Mozilla/Firefox/Headless_mode ---- -
{{FirefoxSidebar}}

Le mode « headless » permet d'utiliser Firefox mais sans afficher les éléments d'interface. Ça ne présente pas d'intérêt pour surfer sur le Web, mais cela permet de réaliser des tests automatisés. Cet article fournit les informations pertinentes pour pouvoir utiliser le mode headless de Firefox.

- -

Utiliser le mode headless

- -

Vous pouvez démarrer Firefox dans son mode headless grâce à une ligne de commande incluant le drapeau (flaTg) -headless. Par exemple :

- -
/chemin/vers/firefox -headless
- -

Pour le moment, nous n'avons pas inclus davantage d'options, mais plus seront ajoutées plus tard.

- -

Par exemple, nous travaillons à implémenter une option --screenshot, qui permettra de faire des captures d'écran depuis le mode headless de Firefox. Voir {{bug(1378010)}} pour suivre l'avancée.

- -

Prise en charge

- -

Le mode headless de Firefox fonctionne à partir de la version 55 sur Linux et à partir de la version 56+ sur Windows et Mac.

- -

Tests industrialisés à l'aide du mode headless

- -

La façon la plus utile d'utiliser ce mode headless est de faire tourner des tests industrialisés dans Firefox. Cela signifie que vous pouvez rendre votre processus de test bien plus efficace grâce à ce mode.

- -

Selenium

- -

Pour fournir un exemple d'utilisation du mode headless pour test industrialisés, nous allons créer un test recourant à Selenium via Node.js et selenium-webdriver. Pour cela, nous supposons que vous êtes déjà à l'aise avec les bases de Selenium, Webdriver et Node, puis que vous avez préparé un environnement de test. Si vous ne l'avez pas fait, rendez-vous sur le guide développant la mise en place d'un environnement de test, puis revenez lire cette documentation.

- -

Tout d'abord, soyez sûr d'avoir installé Node ainsi que selenium-webdriver sur votre machine. Ensuite, créez un nouveau fichier nommé selenium-test.js.

- -
-

Note : Vous pouvez également cloner ce dépôt : headless-examples qui contient un fichier de package. Il suffit donc de lancer npm install afin d'installer les dépendances nécessaires.

-
- -
    -
  1. -

    Ajouter quelques lignes de code. À l'intérieur de ce fichier, commencez en important le module principal selenium-webdriver, ainsi que le sous-module firefox :

    - -
    var webdriver = require('selenium-webdriver'),
    -    By = webdriver.By,
    -    until = webdriver.until;
    -
    -var firefox = require('selenium-webdriver/firefox');
    -
  2. -
  3. -

    Puis, créez un objet binary qui représente Firefox Nightly et ajouter l'argument -headless afin qu'il puisse être lancé avec ce mode :

    - -
    var binary = new firefox.Binary(firefox.Channel.NIGHTLY);
    -binary.addArguments("-headless");
    -
  4. -
  5. -

    Maintenant, créez une nouvelle instance de driver utilisant Firefox et utilisez setFirefoxOptions() afin d'inclure une option qui spécifiera que le test devra tourner sur le Nightly channel de Firefox (cette étape n'est pas nécessaire sur Linux, mais reste utile pour utiliser les fonctions avancées de la version Nightly de Firefox sur Windows/Mac tant que celle-ci n'est pas disponible en release) :

    - -
    var driver = new webdriver.Builder()
    -    .forBrowser('firefox')
    -    .setFirefoxOptions(new firefox.Options().setBinary(binary))
    -    .build();
    -
  6. -
  7. -

    Il faut maintenant ajouter la ligne de code qui initiera la navigation sur la page de recherche Google :

    - -
    driver.get('https://www.google.com');
    -driver.findElement(By.name('q')).sendKeys('webdriver');
    -
    -driver.sleep(1000).then(function() {
    -  driver.findElement(By.name('q')).sendKeys(webdriver.Key.TAB);
    -});
    -
    -driver.findElement(By.name('btnK')).click();
    -
    -driver.sleep(2000).then(function() {
    -  driver.getTitle().then(function(title) {
    -    if(title === 'webdriver - Google Search') {
    -      console.log('Test passed');
    -    } else {
    -      console.log('Test failed');
    -    }
    -  });
    -});
    -
    -driver.quit();
    -
  8. -
  9. -

    Enfin, démarrez le test en utilisant la commande suivante :

    - -
    node selenium-test
    -
  10. -
- -

Et c'est tout ! Après quelques secondes, vous devriez voir apparaître le message "Test passed" sur la console

- -

L'article Headless Firefox in Node.js with selenium-webdriver de Myk Melez continent d'autres conseils utiles pour créer un test industrialisé via Node.js et Selenium dans le mode headless.

- -

D'autres solutions de test

- -

Slimerjs supporte Firefox sur Linux et bientôt sur Mac et Windows. Voir l'article Headless SlimerJS with Firefox de Brendan Dahl pour plus détails.

- -

De plus, vous pourrez utiliser le mode headless de Firefox pour faire tourner des tests industrialisés développés dans la plupart des autres applications de tests, pour autant qu'elles permettent de définir une variable d'environnement.

- -

Dépannage et aide supplémentaire

- -

Si vous avez le moindre problème en utilisant le mode headless, ne vous inquiétez pas, nous sommes ici pour vous aider. Cette section a pour but de référencer toutes vos questions et les réponses que nous leur apportons.

- - - -

Si vous souhaitez poser une question à nos ingénieurs, le meilleur moyen est de se rendre sur le canal IRC #headless de Mozilla. Si vous êtes certain d'avoir trouvé un bug, documentez le sur la plateforme Mozilla Bugzilla.

- -

Voir aussi

- - diff --git a/files/fr/mozilla/firefox/le_protocole_about/index.html b/files/fr/mozilla/firefox/le_protocole_about/index.html deleted file mode 100644 index 0e6912b8a7..0000000000 --- a/files/fr/mozilla/firefox/le_protocole_about/index.html +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Firefox et le protocole "about" -slug: Mozilla/Firefox/Le_protocole_about -tags: - - Firefox - - Guide - - Mozilla - - Protocoles -translation_of: Mozilla/Firefox/The_about_protocol ---- -
{{FirefoxSidebar}}
- -

Il existe un grand nombre d'informations utiles à propos de Firefox cachées derrière le protocole d'URL about:. La plus utile est l'URL about:config qui affiche les préférences et les paramètres qui peuvent être consultés et modifiés. Voici la liste complète des URL du pseudo-protocole about: :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Page about:Description
about:aboutFournit un aperçu de toutes les pages about:
about:addonsGestionnaire de modules complémentaires
about:buildconfigAffiche la plate-forme et la configuration utilisées pour construire Firefox
about:cacheAffiche les informations sur les caches mémoire, disque et appcache
about:checkerboardPermet de diagnostiquer les apparitions de damiers à l'affichage
about:configFournit un moyen d'inspecter et modifier les préférences et paramètres de Firefox
about:crashesListe tous les plantages qui se sont produits pendant le fonctionnement de Firefox (dans le cas où l'utilisateur a activé les rapports de plantage)
about:creditsListe tous les contributeurs du projet Firefox
about:debuggingAffiche la page de déboguage des modules complémentaires
about:devtoolsIntroduction aux outils de développement
about:downloadsAffiche tous les téléchargements faits dans Firefox
about:homePage de démarrage de Firefox lors de l'ouverture d'une nouvelle fenêtre
about:licenseAffiche les informations de licence
about:logoLogo de Firefox
about:memoryFournit un moyen d'afficher l'utilisation de la mémoire, de l'enregistrer dans un rapport et de lancer les GC et CC
about:mozillaPage spéciale affichant un message extrait de l'ouvrage "Le Livre de Mozilla"
about:networkingAffiche des informations sur le réseau
about:newtabPage de démarrage à l'ouverture d'un nouvel onglet
about:performanceAffiche une indication de l'utilisation du processeur et de la mémoire des onglets/modules/processus
about:pluginsAffiche les informations sur les plugins installés
about:policiesListe les stratégies d'entreprise
about:preferencesParamètres de Firefox (également accessibles à partir du menu Firefox > Préférences)
about:privatebrowsingPage de démarrage lors de l'ouverture d'une fenêtre de navigation privée
about:profilesAffichages et gestion des profils
about:restartrequiredPage informant l'utilisateur de la nécessité d'un redémarage après une mise à jour
about:readerIndique qu'une page utilise le mode lecture
about:rightsAffiche des informations sur les droits
about:robotsPage spéciale affichant des remarques concernant les robots
about:serviceworkersAffiche les ServiceWorkers inscrits
about:sessionrestoreRestauration de session (affichée après un plantage de Firefox)
about:supportInformations de dépannage (également accessible à partir du menu Firefox > ? (point d'interrogation) > Informations de dépannage)
about:sync-logAffiche un protocole de synchronisation relatif à la fonctionnalité Sync
about:telemetryAffiche les données de télémétrie collectées et envoyées à Mozilla lorsque Firefox est en cours d'exécution (dans le cas où l'utilisateur a activé la télémétrie)
about:url-classifierAffiche le statut de la classification d'URL (utilisée pour les protections contre l'hameçonnage et les logiciels malveillants)
about:webrtcInformations sur l'utilisation de WebRTC
about:welcomePage affiché après l'installation de Firefox
about:welcomebackPage d'information affichée après la réinitialisation de Firefox
- -

Ces URL sont définies dans {{source("docshell/base/nsAboutRedirector.cpp")}}, à l'intérieur du tableau kRedirMap. Celui-ci couvre la plupart des URL, de config jusqu'aux URL du pseudo-protocole chrome:, comme chrome://global/content/config.xul. Les informations sur les emplacements about sont dupliquées dans {{source("docshell/build/nsDocShellModule.cpp")}}.

diff --git a/files/fr/mozilla/firefox/multiprocessus_firefox/index.html b/files/fr/mozilla/firefox/multiprocessus_firefox/index.html deleted file mode 100644 index 9a09652da6..0000000000 --- a/files/fr/mozilla/firefox/multiprocessus_firefox/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Firefox multiprocessus -slug: Mozilla/Firefox/Multiprocessus_Firefox -tags: - - multiprocessus -translation_of: Mozilla/Firefox/Multiprocess_Firefox ---- -
{{FirefoxSidebar}}

Dans les anciennes versions de Firefox pour bureau, le navigateur ne s'exécutait que dans un seul processus du système d'exploitation. En particulier, le JavaScript qui exécutait l'interface du navigateur (également connu sous le nom « code chrome ») s'exécutait habituellement dans le même processus que celui présent dans les pages web (appelé aussi « contenu » ou « contenu web »).

- -

Les dernières versions de Firefox exécutent l'interface du navigateur dans un processus différent de celui des pages web. Dans la première itération de cette architecture, tous les onglets tournent dans le même processus et l'interface du navigateur dans un processus différent. Dans les itérations suivantes, nous espérons avoir plus d'un processus pour le contenu. Le projet qui consiste à apporter le multiprocessus dans Firefox est appelé Electrolysis, qui correspond à l'abréviation e10s.

- -

Les pages web classiques ne sont pas affectées par l'apparition du multiprocessus dans Firefox. Les développeurs travaillant sur Firefox lui-même ou les extensions du navigateur seront affectés si leur code repose sur la possibilité d'accéder directement à du contenu web.

- -

Au lieu d'accéder au contenu directement, le JavaScript présent dans le code chrome devra utiliser le gestionnaire de messages pour accéder au contenu. Pour faciliter la transition, nous avons mis en place des objets (les Cross Process Object Wrappers) et vous pouvez vous référer à cette page pour découvrir les limitations des scripts chrome. Si vous développez des extensions, vous pouvez lire le guide pour travailler avec Firefox multiprocessus.

- -
-
-
-
-
Présentation technique
-
Une vision très haut niveau de comment le multiprocessus pour Firefox est mis en œuvre.
-
Guide de compatibilité du contenu web
-
Conseils et détails sur de potentiels problèmes de compatibilité des sites web qui peuvent arriver à cause de la transition. Remarque : il n'y en a pas beaucoup !
-
Glossaire
-
La définition du jargon utilisé dans le projet Electrolysis.
-
Gestionnaire de messages
-
Guide complet sur les objets utilisés pour communiquer entre le code chrome et le contenu.
-
Extensions basées sur le SDK
-
Comment migrer vos extensions en utilisant le SDK d'extensions.
-
Quelle URI se charge où
-
Un guide rapide sur quelles URI - chrome:, about:, file:, resource: - sont chargés dans chaque processus.
-
-
- -
-
-
Motivation
-
Pourquoi nous implémentons le multiprocessus dans Firefox : performance, sécurité et stabilité.
-
Guide de migration des extensions
-
Si vous êtes un développeur d'extension, apprenez si votre extension est affectée et comment mettre à jour votre code.
-
Objets CPOW
-
Les objets appelés Cross Process Object Wrappers sont une aide à la migration, permettant au code chrome d'accéder de manière synchrone au contenu.
-
Deboggage des processus du contenu
-
Comment déboguer du code fonctionnant dans le processus contenu.
-
Sélection d'onglet dans Firefox multiprocessus
-
Comment le passage entre les onglets marche dans Firefox multiprocessus.
-
-
-
- -
-
-
-
-
Limitations des scripts chrome
-
Les pratiques ne fonctionnant plus dans le code chrome et comment y remédier.
-
-
- -
-
-
Limitations des scripts avec privilèges
-
Les pratiques ne fonctionnant plus dans le code des scripts de cadre et comment y remédier.
-
-
-
- -
-

Contactez-nous

- -

Pour plus d'informations sur le projet, vous impliquer ou poser des questions :

- - diff --git a/files/fr/mozilla/firefox/multiprocessus_firefox/motivation/index.html b/files/fr/mozilla/firefox/multiprocessus_firefox/motivation/index.html deleted file mode 100644 index ed2b4828b4..0000000000 --- a/files/fr/mozilla/firefox/multiprocessus_firefox/motivation/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Motivation -slug: Mozilla/Firefox/Multiprocessus_Firefox/Motivation -translation_of: Mozilla/Firefox/Multiprocess_Firefox/Motivation ---- -
{{FirefoxSidebar}}

Il y a trois raisons qui nous poussent à faire tourner le contenu de Firefox dans un processus séparé : performance, sécurité, stabilité.

- -

Performance

- -

La plupart des travaux de Mozilla ces deux dernières années ont mis l'accent sur la réactivité du navigateur. Le but est de réduire les lenteurs de l'interface (jank) - c'est-à-dire quand le navigateur a l'air de se figer lors du chargement d'une grosse page, au remplissage d'un formulaire ou lors du défilement de la page. La réactivité devient plus importante que le débit sur le web aujourd'hui. Un gros du travail a été réalisé comme une partie du projet Snappy. En voici les principaux axes :

- - - -

Une grande partie de ces travaux a déjà été réalisée. Les points restants sont difficiles à résoudre. Par exemple, l'exécution de JavaScript se déroule dans le thread principal ce qui bloque la boucle d'évènements. Exécuter ces composants dans un thread séparé est difficile parce qu'ils accèdent à des données comme le DOM qui ne sont pas sécurisées dans le cas d'accès par différents threads. Comme alternative, nous avons envisagé de pouvoir exécuter la boucle d'évènements au milieu de l'exécution de JavaScript, mais cela briserait beaucoup d'hypothèses de différentes parties de Firefox (comme les extensions).

- -

Exécuter le contenu web dans un processus séparé est une alternative viable. Comme l'approche avec différents threads, Firefox est capable d'exécuter la boucle d'évènements pendant que le JavaScript et l'agencement s'exécutent dans un processus contenu. Mais, le code d'Interface Utilisateur n'a pas accès au contenu du DOM ou d'autres structures de données du contenu, il y a donc un besoin de verrouillage et de protection d'accès sur cette partie. L'inconvénient est que tout code présent dans le processus interface utilisateur de Firefox qui a besoin d'accéder au contenu doit le faire explicitement via un passage de messages.

- -

Nous pensons que ce compromis est logique pour plusieurs raisons :

- - - -

Sécurité

- -

Aujourd'hui, si quelqu'un découvre un bug exploitable dans Firefox, il est capable de prendre le contrôle des ordinateurs des utilisateurs. Il existe des solutions pour parer ce problème, la plus connue est la technique du bac à sable. Cette méthode ne nécessite pas une architecture multi-processus. Cependant, un bac à sable fonctionnant avec Firefox en processus unique ne serait pas très efficace. Les bacs à sable permettent seulement d'empêcher à un processus d'effectuer des actions qu'il ne devrait pas réaliser. Malheureusement, Firefox nécessite l'accès à bien plus de choses que le réseau et le système de fichiers (surtout lorsque des extensions sont installées). Ainsi, un bac à sable pour Firefox en processus unique ne pourrait pas bloquer grand-chose.

- -

Avec Firefox multi-processus, les processus contenus seront mis dans un bac à sable. Ainsi, un processus ne pourra pas accéder directement au système de fichiers, mais devra demander au processus principal. À ce moment, le processus principal pourra vérifier que la requête est sécurisée et logique. Par conséquent, le bac à sable peut être très restrictif. On espère que cette méthode rende plus difficile l'exploitation de trous de sécurité dans Firefox.

- -

Stabilité

- -

Actuellement, un plantage dans un code s'exécutant dans une page va faire tomber le navigateur en entier. Avec Firefox multi-processus, seul le processus du contenu qui s'est planté sera détruit.

- -
-

Cette page contient pas mal de contenu provenant de l'article de blog de Bill McCloskey's sur Firefox multi-processus : http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/ (en)

-
- -

 

diff --git a/files/fr/mozilla/firefox/multiprocessus_firefox/technical_overview/index.html b/files/fr/mozilla/firefox/multiprocessus_firefox/technical_overview/index.html deleted file mode 100644 index 92839d64e2..0000000000 --- a/files/fr/mozilla/firefox/multiprocessus_firefox/technical_overview/index.html +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: Vue d'ensemble technique -slug: Mozilla/Firefox/Multiprocessus_Firefox/Technical_overview -translation_of: Mozilla/Firefox/Multiprocess_Firefox/Technical_overview ---- -
{{FirefoxSidebar}}
-

Cette page est une traduction d'un extrait de l'article du blog Bill McCloskey sur Firefox et le multiprocessus: http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/

-
- -

À un haut niveau, le Firefox en multiprocessus fonctionne comme il suit. Le processus qui est démarré quand Firefox est lancé est appelé le processus parent. Initialement, ce processus fonctionne de la même manière que Firefox lorsqu'il fonctionne avec un seul processus: une fenêtre est ouverte affichant browser.xul, qui contient les éléments principaux de l'UI pour Firefox. Firefox a un toolkit pour les GUI appelé XUL qui permet aux éléments de l'interface d'être déclaré et posés de façon déclarative, de la même manière que pour du contenu web. Tout comme le contenu web, il y a un objet  window, qui a une propriété document, et celui-ci contient tout les éléments XML déclarés dans browser.xul. Tous les menus, barres d'outils, sidebars, et onglets dans Firefox sont des éléments XML dans ce document. Chaque onglet contient un élément <browser> pour afficher le contenu web.

- -

Le premier endroit où Firefox multiprocessus diverge de sa version en monoprocessus est que chaque élément <browser> a un attribut remote="true". Quand un tel élément est ajouté au document, un nouveau processus, appelé child process, pour le contenu est lancé. Un canal IPC est créé qui relie processus parent et enfant. Initialement l'enfant affiche about:blank, mais le parent peut envoyer des commandes à l'enfant pour naviguer autre part.

- -

Rendu

- -

D'une certaine manière, le contenu Web affiché doit passer du processus enfant au parent, puis à l'écran. Le multiprocessus de Firefox dépend d'une nouvelle fonctionnalité appelée off main thread compositing (OMTC). En bref chaque fenêtre de Firefox est divisée en séries de couches, en quelque sorte similaire au calque de Photoshop. Chaque fois que Firefox effectue un rendue de la page Web, ces couches sont soumises à un thread de composition qui traduit les couches et les associent en semble pour former la page qui est ensuite dessinée.

- -

Les calques sont structurés comme un arbre. La couche racine de l'arbre est responsable de l'ensemble de la fenêtre de Firefox. Cette couche contient d'autres couches, dont certaines sont responsables de l'élaboration des menus et des onglets. Une sous-couche affiche tout le contenu Web. Le contenu Web lui-même peut être divisé en plusieurs couches, mais ils sont tous enracinés dans une seule couche "content".

- -

Dans le multiprocessus de Firefox, la sous-couche de la couche de contenu est en fait une cale. La plupart du temps, il contient un noeud de substitution qui conserve simplement une référence à la liaison IPC avec le processus enfant. Le processus de contenu conserve l'arborescence de couches réelle pour le contenu Web. Il construit et dessine dans cet arbre de couche. Lorsqu'il a terminé, il envoie la structure de son arbre de couche au processus parent via IPC. Les tampons de sauvegarde sont partagés avec le parent soit par la mémoire partagée, soit par la mémoire GPU. Les références à cette mémoire sont envoyées dans une parti de l'arborescence de l'arbre. Lorsque le parent reçoit l'arborescence de la couche, il supprime son nœud de substitution et le remplace par l'arbre réel du contenu. Ensuite, il compose et dessine comme d'habitude. Lorsqu'il a terminé, il remet sont nœud de substitution.

- -

L'architecture de base de la façon dont OMTC fonctionne avec plusieurs processus existe depuis un certain temps, car il est nécessaire pour Firefox OS. Cependant, Matt Woodrow et David Anderson travail beaucoup pour que tout fonctionne correctement sur Windows, Mac et Linux. L'un des grands défis pour le multiprocessus de Firefox serait d'utiliser OMTC sur toutes les plates-formes. À l'heure actuelle, seuls la plate-forme Mac l'utilisent par défaut.

- -

User input

- -

Events in Firefox work the same way as they do on the web. Namely, there is a DOM tree for the entire window, and events are threaded through this tree in capture and bubbling phases. Imagine that the user clicks on a button on a web page. In single-process Firefox, the root DOM node of the Firefox window gets the first chance to process the event. Then, nodes lower down in the DOM tree get a chance. The event handling proceeds down through to the XUL <browser> element. At this point, nodes in the web page’s DOM tree are given a chance to handle the event, all the way down to the button. The bubble phase follows, running in the opposite order, all the way back up to the root node of the Firefox window.

- -

With multiple processes, event handling works the same way until the <browser> element is hit. At that point, if the event hasn’t been handled yet, it gets sent to the child process by IPC, where handling starts at the root of the content DOM tree. The parent process then waits to run its bubbling phase until the content process has finished handling the event.

- -

Inter-process communication

- -

All IPC happens using the Chromium IPC libraries. Each child process has its own separate IPC link with the parent. Children cannot communicate directly with each other. To prevent deadlocks and to ensure responsiveness, the parent process is not allowed to sit around waiting for messages from the child. However, the child is allowed to block on messages from the parent.

- -

Rather than directly sending packets of data over IPC as one might expect, we use code generation to make the process much nicer. The IPC protocol is defined in IPDL, which sort of stands for “inter-* protocol definition language”. A typical IPDL file is PNecko.ipdl. It defines a set messages and their parameters. Parameters are serialized and included in the message. To send a message M, C++ code just needs to call the method SendM. To receive the message, it implements the method RecvM.

- -

IPDL is used in all the low-level C++ parts of Gecko where IPC is required. In many cases, IPC is just used to forward actions from the child to the parent. This is a common pattern in Gecko:

- -
void AddHistoryEntry(param) {
-  if (XRE_GetProcessType() == GeckoProcessType_Content) {
-    // If we're in the child, ask the parent to do this for us.
-    SendAddHistoryEntry(param);
-    return;
-  }
-
-  // Actually add the history entry...
-}
-
-bool RecvAddHistoryEntry(param) {
-  // Got a message from the child. Do the work for it.
-  AddHistoryEntry(param);
-  return true;
-}
-
- -

When AddHistoryEntry is called in the child, we detect that we’re inside the child process and send an IPC message to the parent. When the parent receives that message, it calls AddHistoryEntry on its side.

- -

For a more realistic illustration, consider the Places database, which stores visited URLs for populating the awesome bar. Whenever the user visits a URL in the content process, we call this code. Notice the content process check followed by the SendVisitURI call and an immediate return. The message is received here; this code just calls VisitURI in the parent.

- -

The code for IndexedDB, the places database, and HTTP connections all runs in the parent process, and they all use roughly the same proxying mechanism in the child.

- -

Frame scripts

- -

IPDL takes care of passing messages in C++, but much of Firefox is actually written in JavaScript. Instead of using IPDL directly, JavaScript code relies on the message manager to communicate between processes. To use the message manager in JS, you need to get hold of a message manager object. There is a global message manager, message managers for each Firefox window, and message managers for each <browser> element. A message manager can be used to load JS code into the child process and to exchange messages with it.

- -

As a simple example, imagine that we want to be informed every time a load event triggers in web content. We’re not interested in any particular browser or window, so we use the global message manager. The basic process is as follows:

- -
// Get the global message manager.
-let mm = Cc["@mozilla.org/globalmessagemanager;1"].
-         getService(Ci.nsIMessageListenerManager);
-
-// Wait for load event.
-mm.addMessageListener("GotLoadEvent", function (msg) {
-  dump("Received load event: " + msg.data.url + "\n");
-});
-
-// Load code into the child process to listen for the event.
-mm.loadFrameScript("chrome://content/content-script.js", true);
-
- -

For this to work, we also need to have a file content-script.js:

- -
// Listen for the load event.
-addEventListener("load", function (e) {
-  // Inform the parent process.
-  let docURL = content.document.documentURI;
-  sendAsyncMessage("GotLoadEvent", {url: docURL});
-}, false);
-
- -

This file is called a frame script. When the loadFrameScript function call runs, the code for the script is run once for each <browser> element. This includes both remote browsers and regular ones. If we had used a per-window message manager, the code would only be run for the browser elements in that window. Any time a new browser element is added, the script is run automatically (this is the purpose of the true parameter to loadFrameScript). Since the script is run once per browser, it can access the browser’s window object and docshell via the content and docShell globals.

- -

The great thing about frame scripts is that they work in both single-process and multiprocess Firefox. To learn more about the message manager, see the message manager guide.

- -

Cross-process APIs

- -

There are a lot of APIs in Firefox that cross between the parent and child processes. An example is the webNavigation property of XUL <browser> elements. The webNavigation property is an object that provides methods like loadURI, goBack, and goForward. These methods are called in the parent process, but the actions need to happen in the child. First I’ll cover how these methods work in single-process Firefox, and then I’ll describe how we adapted them for multiple processes.

- -

The webNavigation property is defined using the XML Binding Language (XBL). XBL is a declarative language for customizing how XML elements work. Its syntax is a combination of XML and JavaScript. Firefox uses XBL extensively to customize XUL elements like <browser> and <tabbrowser>. The <browser> customizations reside in browser.xml. Here is how browser.webNavigation is defined:

- -
<field name="_webNavigation">null</field>
-
-<property name="webNavigation" readonly="true">
-   <getter>
-   <![CDATA[
-     if (!this._webNavigation)
-       this._webNavigation = this.docShell.QueryInterface(Components.interfaces.nsIWebNavigation);
-     return this._webNavigation;
-   ]]>
-   </getter>
-</property>
-
- -

This code is invoked whenever JavaScript code in Firefox accesses browser.webNavigation, where browser is some <browser> element. It checks if the result has already been cached in the browser._webNavigation field. If it hasn’t been cached, then it fetches the navigation object based off the browser’s docshell. The docshell is a Firefox-specific object that encapsulates a lot of functionality for loading new pages, navigating back and forth, and saving page history. In multiprocess Firefox, the docshell lives in the child process. Since the webNavigation accessor runs in the parent process, this.docShell above will just return null. As a consequence, this code will fail completely.

- -

One way to fix this problem would be to create a fake docshell in C++ that could be returned. It would operate by sending IPDL messages to the real docshell in the child to get work done. We may eventually take this route in the future. We decided to do the message passing in JavaScript instead, since it’s easier and faster to prototype things there. Rather than change every docshell-using accessor to test if we’re using multiprocess browsing, we decided to create a new XBL binding that applies only to remote <browser> elements. It is called remote-browser.xml, and it extends the existing browser.xml binding.

- -

The remote-browser.xml binding returns a JavaScript shim object whenever anyone uses browser.webNavigation or other similar objects. The shim object is implemented in its own JavaScript module. It uses the message manager to send messages like "WebNavigation:LoadURI" to a content script loaded by remote-browser.xml. The content script performs the actual action.

- -

The shims we provide emulate their real counterparts imperfectly. They offer enough functionality to make Firefox work, but add-ons that use them may find them insufficient. I’ll discuss strategies for making add-ons work in more detail later.

- -

Cross-process object wrappers

- -

The message manager API does not allow the parent process to call sendSyncMessage; that is, the parent is not allowed to wait for a response from the child. It’s detrimental for the parent to wait on the child, since we don’t want the browser UI to be unresponsive because of slow content. However, converting Firefox code to be asynchronous (i.e., to use sendAsyncMessage instead) can sometimes be onerous. As an expedient, we’ve introduced a new primitive that allows code in the parent process to access objects in the child process synchronously.

- -

These objects are called cross-process object wrappers, frequently abbreviated to CPOWs. They’re created using the message manager. Consider this example content script:

- -
addEventListener("load", function (e) {
-  let doc = content.document;
-  sendAsyncMessage("GotLoadEvent", {}, {document: doc});
-}, false);
-
- -

In this code, we want to be able to send a reference to the document to the parent process. We can’t use the second parameter to sendAsyncMessage to do this: that argument is converted to JSON before it is sent up. The optional third parameter allows us to send object references. Each property of this argument becomes accessible in the parent process as a CPOW. Here’s what the parent code might look like:

- -
let mm = Cc["@mozilla.org/globalmessagemanager;1"].
-         getService(Ci.nsIMessageListenerManager);
-
-mm.addMessageListener("GotLoadEvent", function (msg) {
-  let uri = msg.objects.document.documentURI;
-  dump("Received load event: " + uri + "\n");
-});
-mm.loadFrameScript("chrome://content/content-script.js", true);
-
- -

It’s important to realize that we’re send object references. The msg.objects.document object is only a wrapper. The access to its documentURI property sends a synchronous message down to the child asking for the value. The dump statement only happens after a reply has come back from the child.

- -

Because every property access sends a message, CPOWs can be slow to use. There is no caching, so 1,000 accesses to the same property will send 1,000 messages.

- -

Another problem with CPOWs is that they violate some assumptions people might have about message ordering. Consider this code:

- -
mm.addMessageListener("GotLoadEvent", function (msg) {
-  mm.sendAsyncMessage("ChangeDocumentURI", {newURI: "hello.com"});
-  let uri = msg.objects.document.documentURI;
-  dump("Received load event: " + uri + "\n");
-});
-
- -

This code sends a message asking the child to change the current document URI. Then it accesses the current document URI via a CPOW. You might expect the value of uri to come back as "hello.com". But it might not. In order to avoid deadlocks, CPOW messages can bypass normal messages and be processed first. It’s possible that the request for the documentURI property will be processed before the "ChangeDocumentURI" message, in which case uri will have some other value.

- -

For this reason, it’s best not to mix CPOWs with normal message manager messages. It’s also a bad idea to use CPOWs for anything security-related, since you may not get results that are consistent with surrounding code that might use the message manager.

- -

Despite these problems, we’ve found CPOWs to be useful for converting certain parts of Firefox to be multiprocess-compatible. It’s best to use them in cases where users are less likely to notice poor responsiveness. As an example, we use CPOWs to implement the context menu that pops up when users right-click on content elements. Whether this code is asynchronous or synchronous, the menu cannot be displayed until content has responded with data about the element that has been clicked. The user is unlikely to notice if, for example, tab animations don’t run while waiting for the menu to pop up. Their only concern is for the menu to come up as quickly as possible, which is entirely gated on the response time of the content process. For this reason, we chose to use CPOWs, since they’re easier than converting the code to be asynchronous.

- -

It’s possible that CPOWs will be phased out in the future. Asynchronous messaging using the message manager gives a user experience that is at least as good as, and often strictly better than, CPOWs. We strongly recommend that people use the message manager over CPOWs when possible. Nevertheless, CPOWs are sometimes useful.

diff --git a/files/fr/mozilla/firefox/privacy/index.html b/files/fr/mozilla/firefox/privacy/index.html deleted file mode 100644 index 3b51c404fe..0000000000 --- a/files/fr/mozilla/firefox/privacy/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Privacy -slug: Mozilla/Firefox/Privacy -tags: - - Privacy - - Security -translation_of: Mozilla/Firefox/Privacy ---- -
{{FirefoxSidebar}}
- -
Ce document liste la documentation relative à la confidentialité.
- -
 
- -

{{ ListSubpages () }}

diff --git a/files/fr/mozilla/firefox/privacy/protection_contre_le_pistage/index.html b/files/fr/mozilla/firefox/privacy/protection_contre_le_pistage/index.html deleted file mode 100644 index f466aef11f..0000000000 --- a/files/fr/mozilla/firefox/privacy/protection_contre_le_pistage/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Protection contre le pistage -slug: Mozilla/Firefox/Privacy/protection_contre_le_pistage -tags: - - Bloquage - - Pistage - - Privé - - Vie privée -translation_of: Mozilla/Firefox/Privacy/Tracking_Protection ---- -
{{FirefoxSidebar}}

Qu'est-ce que la protection contre le pistage ?

- -

Depuis la version 42, Firefox pour bureau et Firefox pour Android incluent une protection contre le pistage. En navigation privée, Firefox bloque le contenu chargé depuis des domaines qui pistent les utilisateurs à travers les sites.

- -

Certains contenus bloqués font partie de la mise en page, et les utilisateurs pourraient constater des problèmes de mise en page lorsque Firefox bloque ces chargements. Parfois, lorsque la page fonctionne de telle manière que d'autres éléments remplissent les espaces laissés par les éléments bloqués, les utilisateurs ne remarqueront rien.

- -

Quand Firefox bloque un contenu, il écrit un message dans la console web comme ceci :

- -
The resource at "http://some/url" was blocked because tracking protection is enabled.
- -

Notez qu'avec Firefox pour Android, vous pouvez accéder à la sortie de la console en utilisant le debogueur distant.

- -

L'interface utilisateur de Firefox indiquera aux utilisateurs quand un contenu a été bloqué et leur permet de le débloquer pour la session en cours s'ils le souhaitent. Les utilisateurs pourront aussi  désactiver complêtement les protections contre le pistage s'ils le souhaitent.

- -

Comment Firefox choisit quoi bloquer ?

- -

Le contenu est bloqué selon le domaine à partir duquel il est chargé.

- -

Firefox contient une liste de sites qui ont été identifiés comme étant engagés dans une politique de suivi des utilisateurs au travers des différents sites visités. Quand la protection anti-tracking est activée, Firefox bloque le contenu provenant des sites de cette listes.

- -

Les sites surveillant les utilisateurs sont, le plus souvent, des sites tiers de publicité et d'analyse.

- -

Ce que cela signifie pour votre site

- -

Bien évidemment, cela signifie que quand la protection anti-pistage est activée:

- - - -

Plus subtilement, si d'autres parties de votre site dependent de pisteurs pour être chargés, alors ces parties ne seront pas fonctionnelles quand la protection anti-pistage est activées. Par exemple, si votre site inclus un rappel qui se lance quand le contenu d'un site de pistage est chargé, alors le rappel ne sera pas utilisé.

- -

Par exemple, vous ne devez pas utiliser Google Analytics de cette façon :

- -
<a href="http://www.example.com" onclick="trackLink('http://www.example.com', event);">Visit example.com</a>
-<script>
-function trackLink(url,event) {
-    event.preventDefault();
-    ga('send', 'event', 'outbound', 'click', url, {
-     'transport': 'beacon',
-     'hitCallback': function() {
-       document.location = url;
-     }
-   });
-}
-</script>
- -

A la place, vous devez prendre en compte le cas où Google Analytics est manquant vérifiant si l'objet `ga` est initialisé :

- -
<a href="http://www.example.com" onclick="trackLink('http://www.example.com', event);">Visit example.com</a>
-<script>
-function trackLink(url,event) {
-    event.preventDefault();
-    if (window.ga && ga.loaded) {
-         ga('send', 'event', 'outbound', 'click', url, {
-         'transport': 'beacon',
-         'hitCallback': function() { document.location = url; }
-       });
-    } else {
-        document.location = url;
-    }
-}
-</script>
-
- -

Pour plus d'information sur cette technique : Google Analytics, Privacy, and Event Tracking.

- -

A noter qu'être dependant de l'utilisation de l'outil tiers de cette manière n'est pas une bonne pratique, car cela veut dire que votre site peut être cassé si l'outil tiers est lent ou inaccessible, ou si le tracker est bloqué par un add-on.

diff --git a/files/fr/mozilla/firefox/privacy/protection_du_pistage_par_rebond/index.html b/files/fr/mozilla/firefox/privacy/protection_du_pistage_par_rebond/index.html deleted file mode 100644 index 1e93b3b26b..0000000000 --- a/files/fr/mozilla/firefox/privacy/protection_du_pistage_par_rebond/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Protection contre le pistage par redirection -slug: Mozilla/Firefox/Privacy/protection_du_pistage_par_rebond -tags: - - Firefox - - Mozilla - - Vie privée - - bounce tracking - - protection contre le pistage par redirection - - redirect tracking -translation_of: Mozilla/Firefox/Privacy/Redirect_tracking_protection ---- -
{{FirefoxSidebar}}
- -

Firefox 79 inclut une protection contre le pistage par redirection. Ce document décrit le fonctionnement de ces protections.

- -

Définition du pistage par redirection

- -

Le pistage par redirection est un abus de la navigation intersite dans lequel un traqueur redirige momentanément un utilisateur ou une utilisatrice vers son site web dans le but d’utiliser le stockage de première partie (first-party) pour suivre cet utilisateur ou cette utilisatrice à travers les sites web.

- -

Les navigations intersites sont une caractéristique essentielle du web. Une personne peut rechercher les « meilleures chaussures de course » sur un moteur de recherche, cliquer sur un résultat de recherche pour lire des critiques et enfin cliquer sur un lien pour acheter une paire de chaussures dans un magasin en ligne. Dans le passé, chacun de ces sites web pouvait intégrer des ressources provenant du même traqueur, et le traqueur pouvait utiliser ses cookies pour relier toutes ces visites de page à la même personne. Afin de protéger la vie privée des utilisateurs et utilisatrices de Firefox, la Protection renforcée contre le pistage (ETP pour Enhanced Tracking Protection) empêche déjà les traqueurs d’utiliser des cookies lorsqu’ils sont intégrés dans un contexte tiers, mais leur permet toujours d’utiliser des cookies en tant que première partie, car le blocage des cookies de première partie provoque le dysfonctionnement de sites web. Le pistage par redirection en profite pour contourner le blocage des cookies de tiers.

- -

Les traqueurs de redirection fonctionnent en vous obligeant à faire une escale imperceptible et momentanée sur leur site web dans le cadre de ce voyage. Ainsi, au lieu de naviguer directement du site web de comparaison au détaillant, vous finirez par naviguer d’abord vers le traqueur de redirection plutôt que vers le commerçant. Cela signifie que le traqueur est chargé en tant que première partie. Le traqueur de redirection associe les données de pistage aux identifiants qu’il a stockés dans ses cookies de première partie et vous achemine ensuite vers le commerçant.

- -

La protection contre le pistage par redirection expliquée

- -

Pour protéger contre le pistage par redirection, Firefox supprime périodiquement les cookies et données de site provenant des traqueurs. Nous effaçons uniquement ces données du stockage si l’utilisateur ou l’utilisatrice bloque les cookies traqueurs (c.-à-d. que la préférence network.cookie.cookieBehavior est réglée sur 4). La prise en charge d’autres politiques de cookies est suivie dans le bug 1643045.

- -

Quelles origines sont supprimées ?

- -

Une origine sera supprimée si elle remplit les conditions suivantes :

- -
    -
  1. Elle a stocké des cookies ou a accédé à un autre stockage de site (comme localStorage, IndexedDB ou Cache API) dans les dernières 72 heures. Comme les cookies sont assignés par hôte, nous supprimerons les variantes d’origine http et https d’un hôte de cookies.
  2. -
  3. L’origine est répertoriée en tant que traqueur dans la liste de notre protection contre le pistage.
  4. -
  5. Aucune origine disposant du même domaine de base (eTLD+1) n’a de permission d’interaction avec l’utilisateur ou l’utilisatrice. -
      -
    • Cette permission est accordée à une origine pour 45 jours dès qu’un utilisateur ou une utilisatrice interagit avec un document de premier niveau de cette origine. Une « interaction » peut être un défilement.
    • -
    • Bien que cette autorisation soit stockée à un niveau par origine, nous vérifierons si une origine ayant le même domaine de base l’a, pour éviter de casser les sites avec des sous-domaines et une configuration de cookies correspondante.
    • -
    -
  6. -
- -

Quelles données sont supprimées ?

- -

Firefox supprimera les données suivantes :

- - - -
-

Note : même si nous effaçons toutes ces données, nous ne marquons actuellement les origines pour suppression que lorsqu’elles utilisent des cookies ou d’autres moyens de stockage du site.

-
- -

La suppression du stockage ignore les attributs d’origine. Cela signifie que le stockage sera supprimé dans les containers et le stockage isolé (comme celui de lisolement de la première partie (First-Party)).

- -

À quelle fréquence les données sont-elles supprimées ?

- -

Firefox efface le stockage en fonction du déclenchement d’un événement interne appelé idle-daily, qui est défini par les conditions suivantes :

- - - -

Cela signifie qu’il y a au moins 24 heures entre chaque effacement de stockage et que le stockage sera uniquement effacé quand le navigateur est inactif. Lorsque nous supprimons des cookies, nous classons les cookies par date de création et nous les regroupons par lots de 100 (contrôlés par la préférence privacy.purge_trackers.max_purge_count) pour des raisons de performance.

- -

Débogage

- -

Le pistage par redirection peut être activé et désactivé en inversant la préférence privacy.purge_trackers.enabled dans about:config. En outre, il ne fonctionnera que si la préférence network.cookie.cookieBehavior est réglée sur 4 ou 5 dans Firefox 79+ (1, 3, 4, ou 5 à partir de Firefox 80).

- -

Différents niveaux de journalisation peuvent être déterminés grâce à la préférence privacy.purge_trackers.logging.level.

- -

Pour le débogage, il est plus facile de déclencher l’effacement du stockage en déclenchant le service directement par la ligne de commande de la console du navigateur. Remarquez que c’est différent de la console web que vous pouvez utiliser pour déboguer un site web et cela nécessite que la préférence devtools.chrome.enabled soit réglée sur true pour l’utiliser interactivement. Une que vous avez activé la console du navigateur, vous pouvez déclencher la suppression du stockage en exécutant la commande suivante :

- -
await Components.classes["@mozilla.org/purge-tracker-service;1"].getService(Components.interfaces.nsIPurgeTrackerService).purgeTrackingCookieJars()
- -

L’intervalle de temps jusqu’à ce que les permissions d’interaction avec l’utilisateur ou l’utilisatrice expirent peut être réglé à un niveau inférieur grâce à la préférence privacy.userInteraction.expiration. Notez que vous aurez à régler cette préférence avant de consulter les sites que vous désirez tester –  elle ne s’appliquera pas rétroactivement.

- -

Autres mises en œuvre

- -

WebKit a livré en premier la protection contre le pistage par redirection dans ITP 2.0 (ils se réfèrent à la même attaque en l’appelant pistage par rebond (bounce tracking)). À compter de juillet 2020, il y a plusieurs différences importantes entre la mise en œuvre dans WebKit et dans Firefox :

- - diff --git a/files/fr/mozilla/firefox/versions/14/index.html b/files/fr/mozilla/firefox/versions/14/index.html deleted file mode 100644 index 95e45a7a02..0000000000 --- a/files/fr/mozilla/firefox/versions/14/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Firefox 14 pour les développeurs -slug: Mozilla/Firefox/Versions/14 -tags: - - Firefox - - Firefox 14 -translation_of: Mozilla/Firefox/Releases/14 ---- -
{{FirefoxSidebar}}

Firefox 14, basé sur Gecko 14.0, est sorti le 17 juillet 2012. Cette page résume les principaux changements dans Firefox 14 qui sont utiles aux développeurs.

- -

Changements pour les développeurs Web

- -

HTML

- - - -

DOM

- - - -

CSS

- - - -

MathML

- - - -

HTTP

- - - -

Changements pour les développeurs de Mozilla et de modules complémentaires

- -

Modules de code JavaScript

- -

source-editor.jsm

- - - -

XUL

- - - -

Interfaces

- - - -

Vérification orthographique

- - - -

Voir également

- -

{{Firefox_for_developers('13')}}

diff --git a/files/fr/mozilla/firefox_pour_android/index.html b/files/fr/mozilla/firefox_pour_android/index.html deleted file mode 100644 index 089098ad99..0000000000 --- a/files/fr/mozilla/firefox_pour_android/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Firefox pour Android -slug: Mozilla/Firefox_pour_Android -tags: - - Firefox - - Mobile - - NeedsContent - - NeedsUpdate -translation_of: Mozilla/Firefox_for_Android ---- -

Pour de plus en plus de gens, les appareils mobiles sont le premier, voire le seul moyen d'accéder au Web. Firefox pour Android (nom de code Fennec) est un navigateur ouvert, modifiable, basé sur les standards, comme la version de Firefox pour les ordinateurs.

- -

Firefox pour Android construit son interface graphique avec des widgets Android natifs plutôt qu'avec XUL : cela améliore largement les performances, particulièrement le temps de démarrage et la consommation mémoire.

- -

Contribuer à Firefox pour Android

- -

Le point de départ pour obtenir des informations à propos du projet Firefox pour Android est la page Wiki du projet.

- -

Vous pouvez nous aider à créer et améliorer Firefox pour Android :

- - - -

Développer pour le web mobile

- -

Nous avons démarré un guide pour concevoir des sites web pour les appareils mobiles.

- -

Avec Firefox pour Android, vous avez accès à des APIs qui exploitent toutes les capacités de l'appareil, réduisant les différences entre les applications Web et natives :

- - - -

Pour tester votre site web sur Firefox pour Android, vous pouvez l'installer sur un appareil Android ou l'exécuter sur votre ordinateur en utilisant l'émulateur Android.

- -

Construire des add-ons pour mobile

- -

Firefox pour Android supporte les add-ons et utilise exactement le même système d'extension que celui utilisé par toutes les autres applications basées sur Gecko. Nous n'avons pas inventé un nouveau système d'add-on. Cela signifie que construire un add-on pour Firefox pour Android est le même procédé que celui qui serait utilisé sur ordinateur. Les add-ons qui fonctionnent sur Firefox pour ordinateur ne fonctionnent pas automatiquement sur Firefox pour Android. Les interfaces graphiques y sont vraiment trop différentes.

- -
Firefox pour Android a un identifiant unique d'application qui doit être utilisé dans install.rdf. L'identifiant est {aa3c5121-dab2-40e2-81ca-7ea25febc110}
- -

Les deux approches d'add-ons, avec redémarrage ou sans redémarrage requis sont supportés. Il est préférable d'utiliser l'approche sans redémarrage dès que possible, puisque l'expérience utilisateur est largement meilleure que de forcer le redémarrage de l'application lorsqu'on installe ou supprime un add-on.

- -

Aperçu rapide

- - - -

Obtenir de l'aide avec Firefox pour Android

- -

La documentation et les tutoriels pour utiliser Firefox pour Android et résoudre vos problèmes sont disponibles sur le site de support de Mozilla.

diff --git a/files/fr/mozilla/firefox_pour_android/test_compatibilite/index.html b/files/fr/mozilla/firefox_pour_android/test_compatibilite/index.html deleted file mode 100644 index 680e19bed5..0000000000 --- a/files/fr/mozilla/firefox_pour_android/test_compatibilite/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Tester la compatibilité des sites avec Firefox pour Android -slug: Mozilla/Firefox_pour_Android/Test_Compatibilite -tags: - - AQ - - Compatibilité - - Firefox - - Guide - - Mobile -translation_of: Mozilla/Firefox_for_Android/Compatibility_Testing ---- -

Résumé

-

Notre objectif est d'ouvrir le Web mobile à tous les navigateurs mobiles à travers la promotion des standards et des bonnes pratiques.

-

Cependant, de nombreux sites servent à Firefox pour Android un contenu qui ne fonctionne pas bien ou qui est différent de celui pour les autres navigateurs mobiles. Ce contenu peut être :

- -

Nous désignons cette catégorie de problèmes, comme des problèmes de compatibilité Web. Les problèmes de compatibilité Web sont principalement issus d'une ou plusieurs des causes suivantes :

-
-
- Détection de l'agent utilisateur (UA-sniffing)
-
- Identifier le navigateur par sa chaîne d'agent utilisateur (user-agent) et envoyer un contenu différent.
-
- Utiliser des propriétés CSS non standards (principalement Webkit)
-
- Utiliser des propriétés CSS non standard que le navigateur ne reconnaît pas, causant des problèmes de mise en page et de style
-
- Utiliser des propriétés DOM non standard (principalement Webkit)
-
- Utiliser des propriétés DOM non standards en JavaScript que le navigateur ne reconnaît pas, causant des problèmes fonctionnels
-
- Limitation navigateur
-
- Utiliser des propriétés standards CSS et DOM que le navigateur ne reconnaît pas actuellement, ou qui posent des problèmes fonctionnels ou de performance.
-
-

Pour Firefox en particulier, nous avons besoin de votre aide pour identifier les sites qui ne fonctionnent pas bien, en signalant les problèmes spécifiques que vous avez trouvés lors de votre enquête. D'autres fabricants de navigateurs ont leurs propres systèmes d'alertes, dans lesquels vous pouvez signaler tout problème survenant aussi avec leur navigateur.

-

Ci-dessous sont détaillées les étapes que vous pouvez suivre pour identifier et signaler les sites problématiques.

-

Préparation

-

Pour démarrer, préparons notre matériel et nos logiciels pour des tests de compatibilité.

-
    -
  1. Un téléphone Android est un pré-requis pour tester Firefox pour Android. Assurez-vous que votre téléphone est supporté en consultant la liste des appareils supportés par Firefox pour Android.
  2. -
  3. Installer Firefox pour Android depuis Google Play.
  4. -
  5. Installer l'add-on Phony pour Firefox pour Android. Cet add-on permet de faire passer Firefox pour Android pour un autre navigateur en remplaçant sa chaîne agent utilisateur par celle d'un autre navigateur pour chaque requête HTTP.
  6. -
  7. Créer un compte sur Bugzilla pour que vous puissiez signaler les problèmes rencontrés.
  8. -
-

Étapes facultatives :

- -
-

Note : Voir l'article Détection du navigateur par l'agent-utilisateur pour une explication détaillée sur les agents-utilisateurs des navigateurs.

-
-

Tester la compatibilité

-

Les étapes suivantes vous guideront selon la méthodologie utilisée par Mozilla AQ (Assurance Qualité) lors des tests de compatibilité :

-
    -
  1. Choisissez un site à tester. -
      -
    • Il peut s'agir d'un site que vous avez déjà visité et sur lequel vous avez constaté un problème lors de vos navigations quotidiennes.
    • -
    • Sinon, vous pouvez choisir un des principaux sites listés dans le rapport Are We Compatible Yet. Les sites qui n'ont pas été analysés sont affichés en blanc.
    • -
    -
  2. -
  3. Ouvrez le site que vous avez choisi avec Firefox pour Android. Testez son fonctionnement en explorant les différentes parties du site. Par exemple, si le site affiche des articles, des photos, et des vidéos, vous pouvez explorer ces trois parties du site. Cliquez sur les liens, utilisez les formulaires, créez des comptes, identifiez-vous, et posez les questions : -
      -
    1. Est-ce que ce site est pour ordinateur de bureau ? Si oui, sautez directement au point 3 ou 4 pour déterminer si Safari sur iPhone et le navigateur d'Android reçoivent le même contenu.
    2. -
    3. Est-ce que le site a de flagrants problèmes de mise en page ? Est-ce que les éléments sont positionnées les uns sur les autres ? Est-ce qu'il manque du contenu ? Est-ce que les menus sont correctement affichés ? Est-ce que les couleurs de fonds de l'en-tête sont correctes ? Est-ce que certaines zones de la page sont affichées correctement ? Est-ce que le site apparaît tout simplement cassé, ou mal ? 
    4. -
    -
  4. -
  5. Visitez le même site web en utilisant le navigateur de votre appareil Android, et en utilisant la même méthode d'exploration que pour le point 2, et posez les questions : -
      -
    1. Est ce que ce site est pour ordinateur de bureau ? Est-ce que le contenu change fortement avec ce que vous avez vu sur Firefox pour Android ? Si oui, comment était-ce différent ? S'agit'il d'un site optimisé pour mobile ?
    2. -
    3. Y-a t'il les mêmes problèmes de mise en page que ceux constatés sur Firefox pour Android ? Si oui, quels problèmes avez-vous vu sous Firefox pour Android qui ne sont plus là avec le navigateur d'Android ?
    4. -
    -
  6. -
  7. Faîtes apparaître Firefox pour Android aux yeux du site, comme s'il s'agissait de Safari sur iPhone, en cliquant sur Menu -> Phony et en choisissant iPhone. Après avoir sélectionné iPhone, cliquez sur Menu -> Recharger. Visitez le même site une nouvelle fois et continuez la même méthode d'exploration que pour le point 2, et posez les questions : -
      -
    1. Est ce que ce site est pour ordinateur de bureau ? Est-ce que le contenu change fortement avec ce que vous avez vu sur Firefox pour Android ? Si oui, s'agit'il d'un site optimisé pour mobile ?
    2. -
    3. Y a-t'il des problèmes de mise en page ? Si oui, quels sont ces problèmes ?
    4. -
    -
  8. -
-

Signaler les résultats

-

Pour tout site qui apparaît ou fonctionne différement dans Firefox pour Android, le navigateur d'Android, ou Safari sur iPhone, vous devez signaler le problème sur Bugzilla. Pour signaler un problème, soumettez un bug dans le module Firefox for Android Evangelism et fournissez autant d'informations sur le problème que vous pouvez. Voici certaines informations souvent utiles, à renseigner dans votre signalement :

-
-
- Résumé
-
- Résumez le problème que vous avez identifié avec le site. Il est utile d'inclure le nom de domaine, par exemple mozilla.org, dans le résumé.
-
- Description
-
- Décrivez le problème du mieux que vous pouvez. Mettez des détails sur la façon dont le contenu diffère entre Firefox pour Android, le navigateur Android et Safari sur iPhone, les endroits précis (titres, liste d'articles, menus) où le site ne s'affiche pas correctement, et quelles parties du site (articles illisibles, vidéos injouables, impossible de cliquer sur les liens) qui ne fonctionnent pas comme elles le devraient.
-
- Si vous avez quelques connaissances en HTML, CSS et JavaScript, il est très utile d'indiquer les lignes de code qui sont à l'origine du problème.
-
- Pièces jointes
-
- Il est aussi utile d'attacher une capture d'écran montrant le problème dans Firefox pour Android. La méthode pour prendre une capture d'écran sur Android diffère selon la version du système d'exploitation.
-
-

Information de contact

-

Si vous avez des questions sur les tests de compatibilité ou si vous voulez vous impliquer dans l'effort de compatibilité Web mobile de Mozilla, s'il vous plaît, inscrivez-vous sur la liste de diffusion compatibility@lists.mozilla.org.

diff --git a/files/fr/mozilla/gecko/chrome/css/-moz-window-dragging/index.html b/files/fr/mozilla/gecko/chrome/css/-moz-window-dragging/index.html deleted file mode 100644 index 55ddef129a..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/-moz-window-dragging/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: '-moz-window-dragging' -slug: Mozilla/Gecko/Chrome/CSS/-moz-window-dragging -tags: - - CSS - - Non-standard - - Propriété - - Reference - - XUL -translation_of: Mozilla/Gecko/Chrome/CSS/-moz-window-dragging ---- -
{{Non-standard_header}}{{CSSRef}}
- -

La propriété -moz-window-dragging indique si une fenêtre peut être déplacée. Elle ne peut être utilisée qu'à partir de code appelé pour l'interface utilisateur du navigateur et uniquement sur macOS X.

- -

Cette propriété a été ajoutée à Firefox 35 afin de résoudre certains problèmes liés à la fenêtre de Firefox qui ne pouvait pas être déplacé lorsque celui-ci était occupé ({{bug(944836)}}).

- -

{{cssinfo}}

- -

Syntaxe

- -

La propriété -moz-window-dragging s'utilise avec un des mots-clés parmi ceux de la liste suivante.

- -

Valeurs

- -
-
drag
-
La fenêtre peut être déplacée.
-
no-drag
-
La fenêtre ne peut pas être déplacée.
-
- -

Syntaxe formelle

- -
{{csssyntax}}
- -

Exemple

- -
toolbarpaletteitem {
-  -moz-window-dragging: no-drag;
-}
- -

Spécifications

- -

Cette propriété ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -
{{CompatibilityTable}}
- -
- - - - - - - - - - - - - - - - - - - - - -
FonctionnalitéChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Support simple{{CompatNo}}{{CompatNo}} -

{{CompatGeckoDesktop(35)}}

-
{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - -
FonctionnalitéAndroidWebview AndroidEdgeFirefox Mobile (Gecko)IE PhoneOpera MobileSafari MobileChrome pour Android
Support simple{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile(35)}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -

 

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text(hover)/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text(hover)/index.html deleted file mode 100644 index 37bcb675cd..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text(hover)/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: ':-moz-tree-cell-text(hover)' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell-text(hover)' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell-text(hover)' ---- -
{{Non-standard_header}}{{CSSRef}}{{Fx_minversion_header(1.9)}}
- -

La pseudo-classe :-moz-tree-cell-text(hover) correspond à un élément si le curseur de la souris est en train de survoler une cellule d'un arbre.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text/index.html deleted file mode 100644 index c20c552b1f..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell-text/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: ':-moz-tree-cell-text' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell-text' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell-text' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell/index.html deleted file mode 100644 index 5397076180..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-cell/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: ':-moz-tree-cell' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-cell' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

- -

Voir aussi

- - diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-column/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-column/index.html deleted file mode 100644 index 8e0bcb2932..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-column/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: ':-moz-tree-column' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-column' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-column' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-drop-feedback/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-drop-feedback/index.html deleted file mode 100644 index 2b81402253..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-drop-feedback/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: ':-moz-tree-drop-feedback' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-drop-feedback' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-drop-feedback' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-image/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-image/index.html deleted file mode 100644 index 2305bb1423..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-image/index.html +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: ':-moz-tree-image' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-image' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/:-moz-tree-image' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Exemples

- -

Bookmark icons in the Places window - Mozillazine Forum (en anglais)

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-indentation/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-indentation/index.html deleted file mode 100644 index 83d93fe084..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-indentation/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: ':-moz-tree-indentation' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-indentation' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-indentation' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-line/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-line/index.html deleted file mode 100644 index b3306ea046..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-line/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: ':-moz-tree-line' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-line' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-line' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée avec l'attribut properties.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-progressmeter/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-progressmeter/index.html deleted file mode 100644 index 09f8ce7451..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-progressmeter/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: ':-moz-tree-progressmeter' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-progressmeter' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-progressmeter' ---- -
{{Non-standard_header}}{{CSSRef}}
- -

Cette pseudo-classe est activée lorsque l'attribut type est défini sur progressmeter.

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row(hover)/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row(hover)/index.html deleted file mode 100644 index bfc3bed3de..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row(hover)/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: ':-moz-tree-row(hover)' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-row(hover)' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-row(hover)' ---- -
{{Non-standard_header}}{{CSSRef}}{{Fx_minversion_header(3)}}
- -

La pseudo-classe :-moz-tree-row(hover) correspond à un élément si le curseur de la souris est en train de survoler une ligne d'un arbre.

- -

Ce sélecteur est principalement destiné aux développeurs de thèmes.

- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row/index.html deleted file mode 100644 index 6fd4596d0b..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-row/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: ':-moz-tree-row' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-row' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-row' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

La pseudo-classe -moz-tree-row est utilisée afin de sélectionner des lignes d'un arbre pour leur appliquer des styles

- -

Éléments XUL associés

- - - -

Syntaxe

- -
treechildren::-moz-tree-row { propriétés de style }
-
- -

Propriétés associées

- - - -

Exemples

- -

CSS

- -
treechildren::-moz-tree-row( toto bar )
-{
-  margin: 2%;
-}
-
- -

XUL

- -
<treerow properties="toto">…</treerow>
-
- -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-separator/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-separator/index.html deleted file mode 100644 index 2f0f6e1769..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-separator/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: ':-moz-tree-separator' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-separator' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-separator' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Cette pseudo-classe est activée via l'attribut properties .

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-twisty/index.html b/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-twisty/index.html deleted file mode 100644 index b863bca3ff..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/_doublecolon_-moz-tree-twisty/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: ':-moz-tree-twisty' -slug: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-twisty' -tags: - - CSS - - Non-standard - - Pseudo-classe - - Reference -translation_of: 'Mozilla/Gecko/Chrome/CSS/::-moz-tree-twisty' ---- -
{{CSSRef}}{{Non-standard_header}}
- -

Cette pseudo-classe est activée via l'attribut properties .

- -

Éléments XUL associés

- - - -

Propriétés associées

- - - -

Spécifications

- -

Cette pseudo-classe est une pseudo-classe propriétaire liée à Gecko/Mozilla et ne fait partie d'aucune spécification.

diff --git a/files/fr/mozilla/gecko/chrome/css/index.html b/files/fr/mozilla/gecko/chrome/css/index.html deleted file mode 100644 index 1edf837046..0000000000 --- a/files/fr/mozilla/gecko/chrome/css/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Chrome-only CSS reference -slug: Mozilla/Gecko/Chrome/CSS -tags: - - Aperçu - - CSS - - Gecko - - Mozilla - - Non-standard - - Reference -translation_of: Mozilla/Gecko/Chrome/CSS ---- -
{{CSSRef}}
- -

Cette page liste les propriétés CSS uniquement accessible depuis le code du chrome de Gecko.

- -

{{SubpagesWithSummaries}}

- -

Voir aussi

- - diff --git a/files/fr/mozilla/gecko/chrome/index.html b/files/fr/mozilla/gecko/chrome/index.html deleted file mode 100644 index 6f5de4f5ea..0000000000 --- a/files/fr/mozilla/gecko/chrome/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Gecko Chrome -slug: Mozilla/Gecko/Chrome -tags: - - Aperçu - - Chrome - - Gecko - - Mozilla -translation_of: Mozilla/Gecko/Chrome ---- -
{{FirefoxSidebar}}
- -
Cette page contient des informations spécifiques au code de Gecko responsable du "chrome" (les éléments de l'interface utilisateur).
- -

{{SubpagesWithSummaries}}

diff --git a/files/fr/mozilla/gecko/faq/index.html b/files/fr/mozilla/gecko/faq/index.html deleted file mode 100644 index be9fbe5bd8..0000000000 --- a/files/fr/mozilla/gecko/faq/index.html +++ /dev/null @@ -1,201 +0,0 @@ ---- -title: Gecko FAQ -slug: Mozilla/Gecko/FAQ -translation_of: Gecko/FAQ ---- -

Qu'est-ce que Gecko?

- -

Gecko est un moteur open source de rendu web supportant différents standards d'internet comme le HTML, le CSS, le DOM, XML, javascript et d'autres standards encore.

- -

Gecko est utilisé par de nombreux navigateurs internet, avec bien entendu Mozilla Firefox, mais aussi SeaMonkey, Camino. Gecko est en développement constant par les développeurs de Mozilla. Gecko est le nom final du moteur, il s'appelait aussi "Raptor" et "NGLayout"; mais le nom final du moteur a été choisi suite à un litige.

- -

Pour plus d'informations, visitez l'article Gecko (moteur de rendu) sur Wikipedia.

- -

Qu'est-ce qu'un moteur de rendu?

- -

Un moteur de rendu va aller traduire le contenu des fichiers (les fichiers pouvant être une page internet en HTML, XML, des images...) et s'occupe de formater les informations contenus dans les fichiers, généralement le HTML, qui décrivent l'emplacement des textes, des images etc... afin de faire affiché l'information comme le voulait le webmaster. Il dessine la page web dans la zone de rendu de la fenêtre du navigateur.

- -

Ainsi officiellement, un moteur de rendu définie la politique de placement pour un docuement et fait la mise en page. Gecko est un moteur de rendu trés rapide. Il offre la possibilité de parser de nombreux types de docuements (HTML, XML, SVG, etc...). Il est capable de donné un rendu avancé en incluant les compositions et les transformations. Il supporte aussi le javascript et les plugins.

- -

Gecko est si rapide et puissant qu'il peut être utiliser pour créer des interfaces utilisateurs pour certaines applications ("chrome").  En d'autres termes, Gecko ne fait pas seulement que affiché le contenu d'un document, il peut aussi être utiliser pour dessiner des barres de défilement, des menus à l'écran. Pour plus d'information, reportez-vous à la documentation sur XUL.

- -

How is a layout engine like Gecko different from a Web browser?

- -

Gecko fournit la base nécessaire pour afficher l'information à l'écran, en incluant un moteur de rendu ainsi qu'un ensemble complémentaire de composants du navigateur. Cependant, Gecko ne supporte pas tous les composants aux côtés d'autres modules d'interface dans une application cohérente (y compris les menus, les barres d'outils, etc...) tel que Firefox.

- -

La fondation Mozilla assemble les composants nécessaires dans ses logiciels, comme Firefox, Thunderbird, SeaMonkey, Camino, qui sont disponibles au téléchargement sur le site mozilla.org. Netscape a publié sa propre version du navigateur sous la marque Netscape Navigator. D'autres compagnies crée aussi leur propre logiciel et matériel qui utilisent Gecko. Voir la page recensant une liste de logiciel dans lequel Gecko est utilisé via XULRunner.

- -

Les éditeurs tiers comme les éditeurs de logiciels et fournisseurs de matériels vont choisir les composants qu'ils souhaitent utiliser dans leurs logiciels ou matériels. Certains composants du navigateur ne sont pas fournis dans les fonctionnalités de Gecko, comme les marque page, l'historique de navigation, les faboris.... Cependant, la source de tous ces composants sont disponibles au téléchargement sur le portail mozilla.org.

- -

Why was Gecko built?

- -

The original Mozilla browser, first released as Navigator 1.0, was developed rapidly by a small team that was passionate about creating the next killer app, and they succeeded. Now that the web has evolved, a new generation layout engine was needed upon which future products could be built. Gecko enables a pioneering new class of dynamic content that is more interactive and offers greater presentation control to Web developers, using open and recommended Internet standards instead of proprietary APIs. You are encouraged to join this team by getting involved.

- -

How is mozilla.org using Gecko?

- -

mozilla.org will assemble the Gecko layout engine and other browser components into the Mozilla browser application.

- -

How does Mozilla use Gecko?

- -

Gecko lies at the heart of Mozilla and Firefox browsers, as well as others, powering all of the individual components. Gecko technologies will also power the display of the mozilla.com portal site, speedily delivering more exciting content and services. Gecko's architecture will serve Mozilla well into the future, enabling faster time to market, more innovation, less costly development, easier distribution and updating, and better cross platform support.

- -

How can other companies and organizations use Gecko?

- -

Because Gecko is small, lightweight, and open source, other companies and organizations can easily reuse it. Many hardware vendors are creating devices with network access and wish to include web browsing functionality. Likewise, many software developers want to include Web browsing capability in their applications, but don't want to independently develop browser software. These developers can pick and choose the browser components they want from among those that Gecko offers, and package these components alongside their own within their finished products.

- -

Which open standards is the Gecko development project working to support, and to what extent does it support them?

- -

By the end of calendar year 2000, Gecko is expected to support the following recommended open Internet standards fully except for the areas noted below and open bugs documented in Bugzilla:

- - - -

Does "full support" mean that Gecko has zero bugs today or will have zero bugs at some point in the future?

- -

Of course not. As Robert O'Callahan notes in {{ Bug(25707) }}, "Full HTML4/CSS1 compliance can't mean '100% bug free'. If it does, no-one will ever ship a fully compliant browser."

- -

Because web pages can be arbitrarily long and complex and have arbitrarily deeply nested markup, it will always be possible to construct web pages that do not display in a given browser the way the specifications would recommend. So long as QA testing and test case development continues, there will always be known bugs at any given point in time in the open-source Gecko codebase, and it follows that every commercial product that has ever shipped and ever will ship based on Gecko will have known bugs at the time of its release. (The same principle of course applies to other browser engine development projects and products based upon them as well.)

- -

Known bugs in the open-source Gecko codebase are documented in Bugzilla. Here are some links to lists of reported bugs related to the standards mentioned above; be aware that these raw lists of open in-process bugs will inevitably include some duplicate, out of date, unreproducible, invalid, and incorrectly tagged reports:

- -
The links themselves are probably outdated too.
- - - -

For information about the known bugs of a specific commercial product based on Gecko, see that product's release notes.

- -

How does Gecko format XML documents?

- -

Gecko supports the use of CSS and XSLT to format XML documents.

- -

For XML documents without associated CSS or XSLT, Gecko displays the pretty-printed source of the document.

- -

How does Gecko help content developers?

- -

Content developers are sick and tired of developing and testing every single web page multiple times in order to support the different, incompatible, proprietary DOMs of browsers from different vendors. They have been demanding that all vendors fully support the open standards listed above so that they can

- -
    -
  1. have a rich, powerful formatting system and object model at their disposal, and
  2. -
  3. "write once, view anywhere."
  4. -
- -

Gecko's robust support for these standards makes Gecko the platform of choice for web content and web application developers worldwide.

- -

Are Gecko's APIs based on ActiveX? COM? JavaBeans?

- -

Gecko is reusable on all platforms thanks to XPCOM, a subset of COM that works across platforms. COM, developed by Digital and later adopted by Microsoft, is the de facto standard for modular interfaces on Windows platforms.

- -

Additionally, on the Windows platform, Gecko's XPCOM interfaces are wrapped in an ActiveX control that VB developers can utilize (ActiveX wrappers are not available on other platforms because ActiveX is a Windows-only technology).

- -

A JavaBean wrapper is not currently under development, but there is nothing in Gecko's architecture that precludes such development in the future. Source code and documentation for these interfaces are available through mozilla.org.

- -

For future embedding API plans, see {{ interwiki('wikimo', 'Mozilla_2:Embedding_APIs', 'wikimo:Mozilla 2:Embedding APIs') }}.

- -

Are Gecko's APIs compatible with Microsoft's Trident APIs?

- -

Gecko's XPCOM interfaces are different than Microsoft's. The most important differences between the two models involve reflection of the Document Object Model (DOM) in the interfaces.

- -

Microsoft's Trident interfaces reflect the DOM in a proprietary API, whereas Gecko exposes the DOM according to the W3C's recommended standard. Other incompatibilities exist. Adam Lock created a partial compatibility layer that may enable developers to more easily migrate from Microsoft's engine to the Gecko engine.

- -

Which platforms does Gecko run on?

- -

Gecko runs today on Win32 (Windows XP Service Pack 2, Windows Vista, Windows 7, Windows 8, Windows 8.1), Mac OS X 10.5 and later, and Linux. OEMs and contributors from the Net participating in mozilla.org are porting Gecko to other platforms. Such porting efforts are underway for Solaris, HP/UX, AIX, Irix, OS/2, OpenVMS, BeOS, and Amiga, among others.

- -

Older versions of Gecko supported earlier versions of Win32 and Mac OS X.

- -

What are the components of Gecko?

- -

Gecko includes the following components:

- - - -
-

Original Document Information

- - -
- -

{{ languages( { "ja": "ja/Gecko_FAQ", "zh-cn": "cn/Gecko_FAQ" } ) }}

diff --git a/files/fr/mozilla/gecko/gecko_embedding_basics/index.html b/files/fr/mozilla/gecko/gecko_embedding_basics/index.html deleted file mode 100644 index 2a116f5d88..0000000000 --- a/files/fr/mozilla/gecko/gecko_embedding_basics/index.html +++ /dev/null @@ -1,403 +0,0 @@ ---- -title: Les bases de Gecko embarqués -slug: Mozilla/Gecko/Gecko_Embedding_Basics -translation_of: Mozilla/Gecko/Gecko_Embedding_Basics ---- -

{{ Outdated("It was last updated a very long time ago.") }}

- -
-
Compte tenu de l'importance croissante du Web comme source d'information, de divertissement, et la connectivité individuelle, la possibilité d'accéder et d'afficher des données enregistrées au format HTML devient de plus en plus important pour une grande variété d'applications logicielles par ailleurs très diverses. Que ce soit pour un simple visualiseur HTML ou pour créer un navigateur web à part entière, la capacité d'analyser et d'afficher des documents de type HTML est une fonction de plus en plus importante dans de nombreuses situations. Pour le développeur d'applications, le problème est de savoir comment mettre en œuvre cette fonctionnalité cruciale d'une manière qui minimise encore le temps de développement qui va permettre de créer un produit agile et robuste. Intégrer Gecko, le moteur de rendu au cœur des navigateurs Netscape et Mozilla, est une solution pour ce problème.
- -
 
-
- -

Pourquoi Gecko

- -

Intégrer Gecko est un choix pertinent. Il est rapide, robuste, et respecte les standards du web. Chez Mozilla et Netscape, il a été largement diffusé et abondamment testé.

- -

Il est Open-Source. Contrairement à d'autres choix d'intégration, tout le code source de Gecko est librement disponible et personnalisable. Vous pouvez le bricoler autant que vous le voulez sans limite. Pourtant, selon la licence choisie, il est possible d'utiliser Gecko comme un composant dans un produit commercial et propriétaire.

- -

Comme Gecko est associé avec le projet Mozilla, il y a beaucoup de ressources disponibles pour aider à son intégration. Le site officiel de Mozilla a un espace dédié aux projets d'intégration. Il y a un groupe de discussion, mozilla.dev.embedding, qui met l'accent sur l'échange d'informations entre les intégrateurs, ainsi qu'à un certain nombre d'autres groupes de discussion connexes. On peut accéder à un index croisé complet de la base de code et il est simple d'ajouter du code, de suivre ses progrès ou d'aider à corriger des bogues via la base de données de bugs Bugzilla.

- -

De plus, Gecko a été architecturé dès le commencement pour être multi-plateforme. La version de mozilla.org, tourne aussi bien sur  Wintel, Mac OS 9.0, OS X et Linux et il existe des portages faits par des tiers sur nombre d'autres plateformes.

- -

Enfin, la license Gecko is gratuite, même si l'application finale est un produit commercial propriétaire. La plupart du temps, toute modification apportée au code originellement fourni par Mozilla (mais pas le code dans lequel il est intégré) doit revenir à la communauté, ce même code originel doit être rendu disponible aux utilisateurs de l'application (souvent via un lien sur le site web de mozilla.org), et l'application doit indiquer de manière évidente (Par exemple un logo sur la boîte ou sur la page APropos) que le produit intègre Gecko. La description exacte des licenses possibles est visible sur Mozilla & Netscape Public Licenses, qui est la seule source légale des information de license.

- -

Ce dont vous avez besoin pour embarquer

- -

Une fois que vous avez décidé d'intégrer, il y a trois étapes à suivre. Premierement, vous devez vous procurer le code. Ensuite, vous devez comprendre les quelques technologies spécifiques qui sont utilisées pour manipuler le code de base de Gecko. Enfin, vous devez décider quelles fonctionalités vous pouriez ajouter. Cette section vous guidera dans ces étapes.

- -

Vous procurer le code

- -

Actuellement, le meilleur moyen d'obtenir les fichiers dont vous avez besoin pour intégrer Gecko consiste à télécharcher et compiler les source de Mozilla dans leur totalité. C'est en fait un processu assez simple. Les liens vers les instructions completes sont disponibles dans la section Télécharger le Code source de Mozilla. Une seconde méthode, composant par composant, est en cours de développement, mais est encore au niveau béta. Vous pouvez trouver des informations sur ce projet dans la section Compilation. De plus, nous développons un Environnement d'exécution Gecko (Gecko Runtime Environment ou GRE), de maniere à supporter plusieurs outils batis sur des composants Mozilla tout en n'utilisant qu'un seul ensemble de bibliotheque. (Si vous avez l'intention de travailler composant par composant, soyez particulierement attentifs aux probleme de versions et de compatibilité des binaires. Pour vous aidez sur ce point, regardez la section Réutilisation des composants XPCOM.)

- -

Déjà, vous devz vous procurer quelques outils (en bref, un compilateur, une distribution Perl, et quelaues utilitaires génériques). Ensuite, vous devez les installer sur votre ordinateur. Apres quoi, vous devez télécharger la source. En supposant que vous allez télécharger l'ensemble de l'arborescence, il y a deux manieres de procéder: vous pouvez télécharger en FTP une archive contenant l'ensemble de l'arborescence (c'est la maniere la plus simple, et la plus sure de compiler, mais elle peut contenir une version dépourvue des modifications les plus récentes) ou vous pouvez utiliser CVS pour etre certain que vous téléchargezla version la plus récente. Une fois que vous avez l'arborescence et les outils, et que votre environement est corectement installé, il ne vous reste qu'à exécuter le makefile. Vous pouvew trouver des instructions détaillées pour chacune des plateformes supportées. 

- -

Une fois la source compilée, rendez-vous dans le dossier mozilla/embedding/config. Vous y trouverez des fichiers de démonstration (chacun d'entre eux porte un nom commencant par "basebrowser") intégrables sur chacune des plateformes. Ce sont uniquement des exemples, peut-etre inadaptés à votre besoin particulier, mais ce sont un bon moyen de débuter. Il y a aussi des exemples de projets d'intégration pour chacune des plateforme que vous pouvez utiliser en tant que modele. Voir Intégration : Exemples de Mozilla et projets externes. 

- -

Understanding the Coding Environment

- -

Mozilla was set up from the beginning to support design and development across multiple platforms and programming languages. To this end, a number of in-house programming technologies were developed, all based around an ideal of object encapsulation. Embedding Gecko necessarily implies acquiring a working knowledge of these technologies, including XPCOM, XPIDL, XPConnect, special string classes, and, optionally, XUL. The following provides a brief introduction to them. More information can be found at the mozilla.org site.

- -

XPCOM

- -

The most important of the Mozilla technologies is XPCOM, the Cross-Platform Component Object Model. XPCOM provides a framework which manages the creation, ownership, and deletion of objects and other data throughout Mozilla. If you have used MSCOM, you will recognize certain basic similarities. But there are also significant differences -- XPCOM is cross-platform and designed to run largely in a single thread -- and the two are not at this time compatible.

- -
The interface
- -

At the core of XPCOM is the concept of the interface. An interface is simply a description of a set of methods, attributes, and related constants all associated with a particular functionality: it is completely distinct from the class that implements those things. The interface serves as a kind of contract: any object that supports a particular interface guarantees that it will perform the services described in it. To keep the interface as language neutral as possible, it is written in a special language, the Interface Definition Language, or IDL. Interface files are often referred to as .idl files. In addition to specifying the functionality of the interface, these files also carry the interface's IID, its globally unique identifying number.

- -

Much of the communication within Gecko takes place in terms of these abstract structures (by convention, their names follow the form nsISomething).

- -
//this
-void ProcessSample(nsISample* aSample) {
-	aSample->Poke("Hello");
-//not this
-void ProcessSample(nsSampleImpl* aSample) {
-	aSample->Poke("hello");
-
- -
@status FROZEN
- -

XPCOM's level of abstraction produces great flexibility in the system. Implementations are free to change as needed. But, to work, the interfaces themselves must remain fixed. Throughout Mozilla's initial design and development period, interfaces have been somewhat fluid, but as the project has matured, more and more of the interfaces have been marked FROZEN. Any interface so marked is guaranteed not to change in the future.

- -

Most of the main interfaces key to the embedding effort are now frozen, but it's always a good idea to check before using any interface. An interface's status is listed in the .idl file's comments. A frozen interface is marked @status FROZEN. You can search for frozen interfaces by using the Mozilla cross referencing tool. Until it is frozen, an interface may change at any time. For more information on the freezing process, see the embedding project page.

- -

Once an interface has been frozen, it is added to the Gecko Embedding API Reference.

- -
nsISupports
- -

A single object can support more than one interface. In fact, essentially all objects support at least two interfaces -- a minimum of one that does something specifically useful and one, nsISupports, that serves a more general purpose. In a sense, nsISupports is the progenitor of all XPCOM interfaces. All interfaces inherit from it, most directly so. It serves two main functions: runtime type discovery and object lifetime management. It is functionally identical to IUnknown in MSCOM.

- -

Since an object can support multiple interfaces, it's possible to have a pointer to one interface and want to know whether that same object also supports a different interface whose functionality you might also need. The first nsISupports method, QueryInterface(), does exactly that: it asks, in effect, "I know that this object is of type A (supports interface A) but is it also of type B (supports interface B)?"

- -

If it is (or does), QueryInterface() returns to the caller a pointer bound to the newly requested interface.

- -
void ProcessSample(nsISample* aSample) {
-	nsIExample *example;
-	nsresult rv;
-	rv = aSample->QueryInterface(NS_GET_IID(nsIExample),(void **)&example);
-	if (NS_SUCCEEDED(rv)) {
-		example->DoSomeOperation();
-		NS_RELEASE(example); // using a macro to call Release
-	}
-}
-
- -

Because XPCOM uses an indirect method, the Component Manager, to actually instantiate objects, and because multiple pointers to the same object -- often bound to different interfaces -- can exist, it can quickly become very difficult for callers to keep accurate track of all of the objects to which those pointers point. Objects could be kept around in memory longer than they need to be, causing leaks, or objects could be deleted prematurely, causing dangling pointers. The other two methods in nsISupports, AddRef() and Release(), are designed to deal with this issue. Every time a pointer is given out AddRef() must be called on the object, incrementing an internal counter. Every time a pointer is released, Release() must be called, which decrements that same counter. When the counter reaches zero, there are no pointers to the object remaining and the object can safely delete itself. Control of the object's lifetime stays within the object itself. See below for information on XPCOM's "smart" pointer, nsCOMPtr, a utility which helps automate this process.

- -
Object creation
- -

The instantiation of objects is also an indirect process in XPCOM. Just as interfaces have a globally unique ID number (the IID), XPCOM classes are assigned their own GUIDs, the CID. In addition, they are also often given a text-based ID, called a contract ID. One or the other of these IDs is passed to a method on a persistent XPCOM component, the Component Manager, which actually creates the object. When a new library of classes (called a module in XPCOM) is first introduced into the system, it must register itself with the Component Manager, which maintains a registry that maps classes (with their IDs) to the libraries in which they reside.

- -

A limited number of persistent services, supplied by singleton objects, are created and controlled by a companion to the Component Manager, the Service Manager. The Component Manager itself is an example of such a persistent service.

- -
Summing up
- -

Functionality in XPCOM is described by abstract interfaces, and most communication among parts of the system takes place in terms of those interfaces. The underlying objects that implement the interfaces, on the other hand, are created indirectly by the Component Manager based on a cross-indexed registry that it maintains.

- -

One functionality shared by all interfaces is the ability to query the underlying object at runtime to see if also implements other interfaces. In theory an interface is fixed and unchangeable, but at this stage in the Mozilla codebase, only interfaces that have been declared FROZEN are guaranteed not to change significantly. Object lifetime management takes place inside the object itself through an internal counter that keeps track of the number of pointers to the object that have been added or released. The client's only responsibility is to increment and decrement the counter. When the internal counter reaches zero, the object deletes itself.

- -
nsCOMPtr
- -

Sometimes, however, even remembering to call AddRef() and Release() at the right times can be difficult. To make this process easier and more reliable, XPCOM has a built-in "smart" pointer, nsCOMPtr. This pointer takes care of calling AddRef() and Release() for you. Using nsCOMPtr whenever possible will make your code cleaner and more efficient. For more information on the smart pointer, see "The Complete nsCOMPtr User's Manual".

- -

Mozilla actually provides a large number of built-in macros (by convention, written in all caps in the code) and utilities like nsCOMPtr that can make the entire process of coding with XPCOM easier. Many of these can be found in the following files: nsCom.h, nsDebug.h, nsError.h, nsIServiceManager.h, and nsISupportsUtils.h. Mozilla also supplies other development tools for tracking memory usage and the like. More information on these can be found at http://www.mozilla.org/performance/

- -
For more information
- -

More information on XPCOM in general can be found at XPCOM. For an overview of creating XPCOM components, see Chapter 8 of O'Reilly's Creating Applications with Mozilla. There is also a new book completely devoted to this topic, Creating XPCOM Components. A fuller explanation of some of the underlying logic to COM systems can be found in the early chapters of Essential COM by Don Box. While it focuses on MSCOM in particular, the book does provide an excellent background on some of the core rationales for using such an object model.

- -

XPIDL

- -

Interfaces are abstract classes written in XPIDL, the Cross Platform Interface Definition Language. Yet to be useful the functionality promised in those interfaces must be implemented in some regular programming language. Facilitating this is the job of the XPIDL compiler. Once an interface is defined in an .idl file, it can be processed by the XPIDL compiler.

- -

The compiler can be set to output a number of things, but generally the output is two-fold: a C++ .h file that includes a commented out template for a full C++ implementation of the interface and an XPT file that contains type library information which works with XPConnect to make the interface available to JavaScript. More information on the syntax of XPIDL (a simple C-like language) and the use of the compiler is available.

- -

XPConnect and XPT files

- -

XPConnect is an XPCOM module that allows code written in JavaScript to access and manipulate XPCOM components written in C++ and vice versa. By means of XPConnect, components on either side of an XPCOM interface do not, in general, need to know or care about which of these languages the object on the other side is implemented in.

- -

When an interface is run through the XPIDL compiler, it produces an XPT or type library file. Because XPconnect uses the information in this file to implement transparent communication between C++ objects and JavaScript objects across XPCOM interfaces, it is important to make sure they are generated and included with your code even if you are developing exclusively in C++. Not only is a substantial part of the browser, in fact, implemented in JS, it is possible that in the future someone may wish to use JS-based code to interact with whatever components you create .

- -

As is from Mozilla, XPConnect currently facilitates interoperability between C++ and JS. Modules to extend it to allow access from other languages (including Python) are under independent development.

- -

String classes

- -

Web browsing typically involves a large amount of string manipulation. Mozilla has developed a hierarchy of C++ classes to facilitate such manipulation and to render it efficient and quick. To make communication among objects simpler and more error free, Mozilla uses interfaces, which are, in essence, abstract classes. The string hierarchy is also headed up by a set of abstract classes, nsAString, nsASingleFragmentString, and nsAFlatString, and for the same reasons. (These refer to double-byte strings. There is a parallel hierarchy topped with nsACString, etc., that refers to single-byte strings.) nsAString guarantees only a string of characters. nsASingleFragmentString guarantees that the characters will be stored in a single buffer. nsAFlatString guarantees that the characters will be stored in a single null-terminated buffer. While there are underlying concrete classes, in general it is best to use the most abstract type possible in a given situation. For example, concantenation can be done virtually, through the use of pointers, resulting in an nsAString that can be used like any other string. This saves the allocating and copying that would otherwise have to be done. For more information, see "XPCOM string guide".

- -

XUL/XBL

- -

Use of this final Mozilla technology is optional, depending on how you decide to create the user interface for your application. XUL is Mozilla's highly flexible XML UI Language. It provides a number of largely platform independent widgets from which to construct a UI. Netscape and Mozilla both use XUL for their interfaces, but not all embedders choose to use it. XBL or the eXtensible Binding Language allows you to attach behaviors to XUL's XML elements. More information on XUL can be found at XUL Programmer's Reference and on XBL at XBL:XBL_1.0_Reference. There is also a wealth of good information on XUL at XULPlanet.

- -

Choosing Additional Functionalities

- -

As of this writing (8/19/02), Gecko is a partially modularized rendering engine. Some functionalities beyond basic browsing are always embedded with Gecko, and, as a result of certain architectural decisions, always will be; some are at present always embedded with Gecko, but may, at some point in the future, be separable; and some are now available purely as options. The following table describes the present status of these additional functionalities:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FunctionsStatus NowStatus in Future
FTP supportOptional 
HTTPS supportOptional 
International character supportOptional 
XUL supportRequiredProbably optional
Network supportRequiredMaybe optional
JavaScript supportRequiredMaybe optional
CSS supportRequiredAlways required
DOM supportRequiredProbably always
XML supportRequiredProbably always
- -

At this time embedding Mozilla's editor along with the rendering engine Gecko is an uncertain proposion, although the situation continues to improve. For more information on the status of the embeddable editor, see http://www.mozilla.org/editor/Editor...ing_Guide.html.

- -

What Gecko Provides

- -

The following is a description of some of the interfaces most commonly used in embedding Gecko. It is by no means an exhaustive list of the available interfaces. The interfaces in this section are on classes provided by Mozilla. There is also a set of interfaces for which Gecko expects the embedder to provide the implementation. A sample of those are covered in the next section.

- -

Initialization and Teardown

- -

There are two C++ only functions which serve to initalize and terminate Gecko. The initialization function (NS_InitEmbedding) must be called before attempting to use Gecko. It ensures XPCOM is started, creates the component registry if necessary, and starts global services. The shutdown function (NS_TermEmbedding) terminates the Gecko embedding layer, ensuring that global services are unloaded, files are closed and XPCOM is shut down.

- -

nsIWebBrowser

- -

Use of this interface during initialization allows embedders to associate a new nsWebBrowser instance (an object representing the "client-area" of a typical browser window) with the embedder's chrome and to register any listeners. The interface may also be used at runtime to obtain the content DOM window and from that the rest of the DOM.

- -

The XULPlanet nsWebBrowser reference also has a lot of useful information on this class.

- -

nsIWebBrowserSetup

- -

This interface is used to set basic properties (like whether image loading will be allowed) before the browser window is open.

- -

nsIWebNavigation

- -

The nsIWebNavigation interface is used to load URIs into the web browser instance and provide access to session history capabilities - such as back and forward. As of June 6, 2006, this interface is not yet frozen.

- -

nsIWebBrowserPersist

- -

The nsIWebBrowserPersist interface allows a URI to be saved to file. As of June 6, 2006, this interface is not yet frozen.

- -

nsIBaseWindow

- -

The nsIBaseWindow interface describes a generic window and basic operations (size, position, window title retrieval, etc.) that can be performed on it. As of June 6, 2006, this interface is not yet frozen.

- -

nsISHistory

- -

The nsISHistory interface provides access to session history information and allows that information to be purged.

- -

nsIWebBrowserFind

- -

The nsIWebBrowserFind interface controls the setup and execution of text searches in the browser window.

- -

What You Provide

- -

The following is a description of some of the more common embedder-provided interfaces used in embedding Gecko. It is by no means an exhaustive list of the available interfaces.

- -

nsIWebBrowserChrome

- -

The nsIWebBrowserChrome interface corresponds to the top-level, outermost window containing an embedded Gecko web browser. You associate it with the WebBrowser through the nsIWebBrowser interface. It provides control over window setup and whether or not the window is modal. It must be implemented.

- -

nsIEmbeddingSiteWindow

- -

The nsIEmbeddingSiteWindow interface provides Gecko with the means to call up to the host to resize the window, hide or show it and set/get its title. It must be implemented.

- -

nsIWebProgressListener

- -

The nsIWebProgressListener interface provides information on the progress of loading documents. It is added to the WebBrowser through the nsIWebBrowser interface. It must be implemented. As of this writing (8/19/02), it is not frozen.

- -

nsISHistoryListener

- -

The nsISHistoryListener interface is implemented by embedders who wish to receive notifications about activities in session history. A history listener is notified when pages are added, removed and loaded from session history. It is associated with Gecko through the nsIWebBrowser interface. Implementation is optional.

- -

nsIContextMenuListener

- -

The nsIContextMenuListener interface is implemented by embedders who wish to receive notifications for context menu events, i.e. generated by a user right-mouse clicking on a link. It should be implemented on the web browser chrome object associated with the window for which notifications are required. When a context menu event occurs, the browser will call this interface if present. Implementation is optional.

- -

nsIPromptService

- -

The nsIPromptServices interface allows the embedder to override Mozilla's standard prompts: alerts, dialog boxes, and check boxes and so forth. The class that implements these embedder specific prompts must be registered with the Component Manager using the same CID and contract ID that the Mozilla standard prompt service normally uses. Implementation is optional. As of this writing (8/19/02), this interface is not frozen.

- -

Common Embedding Tasks

- -

The following is a series of code snippets (taken from MFCEmbed, the Windows based embedding Gecko sample) which demonstrate very briefly implementation associated with common embedding tasks. MFCEmbed code was deleted from the current repository as the code quality was not very high and it did not use good embedding APIs. If you need a MFC embedding example, maybe take a look at the K-Meleon source. There are also Linux- and Mac OS-based examples, see http://mxr.mozilla.org/mozilla-central/source/embedding/tests/ for a list of examples.

- -

Gecko setup

- -

The Gecko embedding layer must be initialized before you can use Gecko. This ensures XPCOM is started, creates the component registry if necessary, and starts global services. There is an equivalent shutdown procedure.

- -

Note that the embedding layer is started up by passing it two parameters. The first indicates where the executable is stored on the file system (nsnull indicates the working directory). The second indicates the file location object "provider" that specifies to Gecko where to find profiles, the component registry preferences, and so on.

- -
nsresult rv;
-rv = NS_InitEmbedding(nsnull, provider);
-if(NS_FAILED(rv))
-{
-ASSERT(FALSE);
-return FALSE;
-}
-
- -

Creating a browser instance

- -

The embedder-provided BrowserView object calls its method CreateBrowser(). Each browser object (a webbrowser) represents a single browser window. Notice the utility directive do_CreateInstance() and the use of macros.

- -
//Create an instance of the Mozilla embeddable browser
-
-HRESULT CBrowserView::CreateBrowser()
-{
-// Create a web shell
-nsresult rv;
-mWebBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
-if(NS_FAILED(rv))
-return rv;
-
- -

Once the nsWebBrowser object is created the application uses do_QueryInterface() to load a pointer to the nsIWebNavigation interface into the mWebNav member variable. This will be used later for web page navigation.

- -
rv = NS_OK;
-mWebNav = do_QueryInterface(mWebBrowser, &rv);
-if(NS_FAILED(rv))
-return rv;
-
- -

Next the embedder-provided CBrowserImpl object is created. Gecko requires that some interfaces be implemented by the embedder so that Gecko can communicate with the embedding application. See the What You Provide Section. In the sample, CBrowserImpl is the object that implements those required interfaces. It will be passed into the SetContainerWindow() call below.

- -
mpBrowserImpl = new CBrowserImpl();
-if(mpBrowserImpl == nsnull)
-return NS_ERROR_OUT_OF_MEMORY;
-
- -

The mWebBrowser interface pointer is then passed to the CBrowserImpl object via its Init() method. A second pointer to the platform specific BrowserFrameGlue interface is also passed in and saved. The BrowserFrameGlue pointer allows CBrowserImpl to call methods to update status bars, progress bars, and so forth.

- -
mpBrowserImpl->Init(mpBrowserFrameGlue, mWebBrowser);
-mpBrowserImpl->AddRef();
-
- -

Next the embedder-supplied chrome object is associated with the webbrowser. Note the use of an nsCOMPtr.

- -
mWebBrowser->SetContainerWindow
-	(NS_STATIC_CAST(nsIWebBrowserChrome*, mpBrowserImpl));
-nsCOMPtr<nsIWebBrowserSetup>setup(do_QueryInterface(mWebBrowser));
-if (setup)
-	setup->SetProperty(nsIWebBrowserSetup::SETUP_IS_CHROME_WRAPPER,PR_TRUE);
-
- -

Then, the real webbrowser window is created.

- -
rv = NS_OK;
-mBaseWindow = do_QueryInterface(mWebBrowser, &rv);
-if(NS_FAILED(rv))
-return rv;
-
- -

Binding a window

- -

Basic location information is passed in.

- -
RECT rcLocation;
-GetClientRect(&rcLocation);
-if(IsRectEmpty(&rcLocation))
-{
-	rcLocation.bottom++;
-	rcLocation.top++;
-}
-rv = mBaseWindow->InitWindow(nsNativeWidget(m_hWnd),
-		nsnull,0, 0, rcLocation.right - rcLocation.left,
-		rcLocation.bottom - rcLocation.top);
-rv = mBaseWindow->Create();
-
- -

Note the m_hWnd passed into the call above to InitWindow(). (CBrowserView inherits the m_hWnd from CWnd). This m_hWnd will be used as the parent window by the embeddable browser.

- -

Adding a listener

- -

The BrowserImpl object is added as an nsIWebProgressListener. It will now receive progress messages. These callbacks will be used to update the status/progress bars.

- -
nsWeakPtr weakling
-	(dont_AddRef(NS_GetWeakReference(NS_STATIC_CAST(nsIWebProgressListener*,
-			mpBrowserImpl))));
-void mWebBrowser->AddWebBrowserListener(weakling, NS_GET_IID(nsIWebProgressListener));
-
- -

Finally the webbrowser window is shown.

- -
mBaseWindow->SetVisibility(PR_TRUE);
-
- -

Using session history to navigate

- -

The pointer to nsIWebNavigation saved above is used to move back through session history.

- -
void CBrowserView::OnNavBack()
-{
-if(mWebNav)
-	mWebNav->GoBack();
-}
-
- -

Appendix: Data Flow Inside Gecko

- -

While it isn't strictly necessary for embedders to understand how Gecko does what it does, a brief overview of the main structures involved as Gecko puts bits on a display may be helpful.

- -

Image:EmbeddingBasicsa.gif

- -

HTML data comes into Gecko either from the network or a local source. The first thing that happens is that it is parsed, using Gecko's own HTML parser. Then the Content Model arranges this parsed data into a large tree. The tree is also known as the "Document" and its structure is based on the W3C Document Object Model. Any use of DOM APIs manipulates the data in the Content Model.

- -

Next the data is put into frames using CSS and the Frame Constructor. A frame in this sense (which is not the same thing as an HTML frame) is basically an abstract box within which a DOM element will be displayed. This process produces a Frame Tree, which, like the Content Model, is a tree of data, but this time focused not on the logical relationship among the elements but on the underlying calculations needed to display the data. In the beginning a frame has no size. Using CSS rules specifying how the elements of the DOM should look when they are displayed, including information like font type or image size, the eventual size of each frame is calculated. Because the same data may need to be displayed in different ways -- to a monitor and to a printer, for example -- a particular Content Model may have more than one Frame Tree associated with it. In such a case, each individual Frame Tree would belong to a different "presentation" mode.

- -

Calculations continue as new information flows into the system using a process called reflow. As information in the Frame Tree changes, the section of the Frame Tree involved is marked "dirty" by the Frame Constructor. Reflow repeatedly steps through the tree, processing every "dirty" item it encounters until all the items it encounters are "clean". Every item in the Frame Tree has a pointer back to its corresponding item in the Content Model. A change in the Content Model, say through using the DOM APIs to change an element from hidden to visible, produces an equivalent change in the Frame Tree. It's important to note that all of these operations are purely data manipulations. Painting to the display itself is not yet involved at this point.

- -

The next stage is the View Manager. With a few small exceptions that have to do with prompting the Frame Constructor to load graphics, the View Manager is the first place in the process that accesses the native OS. Delaying OS access until this point both helps Gecko to run more quickly and makes cross-platform issues easier to deal with. The View Manger is the place where Gecko figures out where on the display the data will need to be drawn. It then tells the system that that area is "invalid" and needs to be repainted. The actual painting is managed by the gfx submodule, while other low-level system operations are run through the widget submodule, which handles things like platform specific event (mouse clicks and so forth) processing loops and accessing system defaults (colors, fonts, etc.) Both gfx and widget are system specific.

- -

If you want to take a look at the code underlying these structures, the code for the Content Model can be found in /mozilla/content, for the Frame Constructor, CSS, and Reflow in /mozilla/layout, for the View Manager in /mozilla/view, and for the DOM APIs in /mozilla/dom.

- -
-

Original Document Information

- - -
- -

{{ languages( { "ja": "ja/Gecko_Embedding_Basics" } ) }}

diff --git a/files/fr/mozilla/gecko/index.html b/files/fr/mozilla/gecko/index.html deleted file mode 100644 index fcd4a8e202..0000000000 --- a/files/fr/mozilla/gecko/index.html +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Gecko -slug: Mozilla/Gecko -translation_of: Mozilla/Gecko ---- -

Gecko est le nom du moteur de rendu développé par la fondation Mozilla. Il s'appelait à l'origine NGLayout.

- -

La fonction de Gecko est de lire le contenu Web tel que HTML, CSS, XUL et JavaScript, puis de le représenter sur l'écran de l'utilisateur ou à l'impression. Dans les applications basées sur XUL, Gecko est également utilisé pour afficher l'interface utilisateur de l'application.

- -

Gecko est utilisé dans de nombreuses applications dont quelques navigateurs comme Firefox, la Suite Mozilla, Camino, etc. (Pour obtenir la liste complète, référez-vous à cet article de Wikipedia sur Gecko). Les produits utilisant la même version de Gecko ont un support identique des standards.

- -

Le nom et le logo Gecko sont des marques de Netscape Communications Corporation, utilisés sous licence.

- -

Les versions de Gecko

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Version de GeckoApplications basées sur cette version
Gecko 17.0 (en cours de développement)Firefox 17, SeaMonkey 2.14, Thunderbird 17
Gecko 16.0 (en cours de développement)Firefox 16, SeaMonkey 2.13, Thunderbird 16
Gecko 15.0 (en cours de développement)Firefox 15, SeaMonkey 2.12, Thunderbird 15
Gecko 14.0Firefox 14, SeaMonkey 2.11, Thunderbird 14
Gecko 13.0Firefox 13, SeaMonkey 2.10, Thunderbird 13
Gecko 12.0Firefox 12, SeaMonkey 2.9, Thunderbird 12
Gecko 11.0Firefox 11, SeaMonkey 2.8, Thunderbird 11
Gecko 10.0Firefox 10, SeaMonkey 2.7, Thunderbird 10
Gecko 9.0Firefox 9, SeaMonkey 2.6, Thunderbird 9
Gecko 8.0Firefox 8, SeaMonkey 2.5, Thunderbird 8
Gecko 7.0Firefox 7, SeaMonkey 2.4, Thunderbird 7
Gecko 6.0Firefox 6, SeaMonkey 2.3, Thunderbird 6
Gecko 5.0Firefox 5, SeaMonkey 2.2, Thunderbird 5
Gecko 2.0Firefox 4, SeaMonkey 2.1
Gecko 1.9.2Firefox 3.6, Thunderbird 3.1
Gecko 1.9.1Firefox 3.5, SeaMonkey 2.0, Thunderbird 3.0
Gecko 1.9.0Firefox 3
Gecko 1.8.1Firefox 2, SeaMonkey 1.1, Thunderbird 2.0
Gecko 1.8.0Firefox 1.5, SeaMonkey 1.0, Thunderbird 1.5
Gecko 1.7Firefox 1.0, Mozilla Suite 1.7, Nvu 1.0, Thunderbird 1.0
Les versions plus anciennes de Gecko correspondent aux versions de la Suite Mozilla
- -
-

Ressources

- - - -

{{ languages( { "de": "de/Gecko", "en": "en/Gecko", "es": "es/Gecko", "it": "it/Gecko", "ja": "ja/Gecko", "ko": "ko/Gecko", "pl": "pl/Gecko", "pt": "pt/Gecko", "zh-cn": "cn/Gecko" } ) }}

diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/api_overview/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/api_overview/index.html" deleted file mode 100644 index bf0dbc85cf..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/api_overview/index.html" +++ /dev/null @@ -1,422 +0,0 @@ ---- -title: Vue d'ensemble des APIS embarquées de Mozilla -slug: Mozilla/Gecko/Mozilla_embarqué/API_overview -translation_of: Mozilla/Gecko/Embedding_Mozilla/API_overview ---- -

Introduction

-

The Mozilla Public API consists of a collection of services and components which are accessed via XPCOM interfaces. Mozilla's XPCOM layer consists of a component model (called XPCOM) and the infrastructure necessary to support dynamic registration, instantiation and manipulation of XPCOM components.

-

At the heart of XPCOM's implementation is the Service Manager and the Component Manager. Together, these two services provide a centralized point for gaining access to all of the public Mozilla interfaces.

-

The Service Manager exposes all of the available XPCOM services - each service represents a global object which provides some piece of functionality. The Component Manager allows new instances of registered XPCOM components to be instantiated.

-

Image:public-apis-image2.gif

-

The embedding layer consists of several components built on top of XPCOM and its services. Much of the Gecko functionality is exposed through a component called the nsWebBrowser. Embedding applications can leverage this component to easily access many of Gecko's features. Each WebBrowser instance represents the "client-area" of a typical browser window. The WebBrowser exposes a set of interfaces which allow the embedding application to control activity and respond to changes within this client area. Using these interfaces an embedding application can build up its own user interface around a WebBrowser instance.

-

Image:public-apis-image1.gif

-

Public Classes

-

The following utility classes are available from the XPCOM DLL. They provide some basic functionality which should be leveraged when building new XPCOM components.

- -

These are templatized smart pointers which transparently deal with XPCOM reference counting issues. See the nsCOMPtr User's Manual for more information.

- -

There are a collection of string classes which support both unicode and ASCII strings. These classes provide a variety of string operations as well as dealing with the memory management issues of storing the underlying data. See the String Guide for more details.

- -

This is an nsCOMPtr which encapsulates XPCOM weak reference support. See the nsIWeakReference document for more information.

-

Public Return Codes

- -

Public Functions

-

The following functions are available from the XPCOM DLL.

- -

This function initializes the Gecko embedding support. This must be the first function call made into Gecko.

- -

This function shuts down Gecko and cleans up any remaining resources... Currently, once Gecko has been shutdown, it cannot be restarted in the same process space... This should change in the future.

- -

This helper class provides static accessors to the global nsMemory Service.

- -

This function returns an instance of the Component Manager service.

- -

This is a helper class which converts an ASCII string into a UCS2 string. Typically, instances of this class are stack allocated, and wrap ASCII arguments which must be converted into UCS2.

- -

This is a helper class which works in conjunction with nsCOMPtr to perform a simplified call to nsISupports::QueryInterface(...) with a typesafe assignment.

- -

This function simplfies retrieving interfaces via the nsIInterfaceRequestor::GetInterface(...) method. Using this function, one can use nsISupports instances and still easily access other interfaces via nsIInterfaceRequestor.

-

Internally, this function tries to convert the nsISupports argument into an nsIInterfaceRequestor and then calls GetInterface(...) to retrieve the requested interface.

- -

This function is the equivilent of do_QueryInterface except that it performs the QI through a weak reference.

- -

This function simplifies accessing services from the Service Manager.

- -

This function simplifies creating new component instances.

- -

This template helper class allows easy access to an interface's nsIID. Typically the NS_GET_IID(...) macro is used instead of using the nsCOMTypeInfo template directly.

- -

This function creates a weak reference to a component which implements the nsIWeakReference interface.

-

Global Services

-

nsServiceManager

-

The Service Manager is the central repository for accessing instances of the various XPCOM services. Each service is represented by a singleton object which is instantiated the first time it is requested and remains alive until the Service Manager is shut down, or the service is explicitly unloaded.

-

Through the Service Manager, individual services can be loaded, unloaded and accessed.

-

Implemented Interfaces:

- -

Related Interfaces:

- -

nsMemory

-

The nsMemory service provides the global memory manager implementation for XPCOM. In addition to memory allocation and release, this service provides low memory notifications, called a memory pressure observers, which are notified when memory is low - thus allowing cached resources to be freed.

-

All heap access should be done via the nsMemory service. To facilitate this, a set of global functions are available to access the nsMemory methods without requiring an instance of the nsMemory service (see nsMemory.h).

-

Contract-id: NS_MEMORY_CONTRACTID

-

Implemented Interfaces:

- -

Related Interfaces:

- -

nsComponentManager

-

The nsComponentManager service is responsible for creating new instances of XPCOM components. The Component Manager is also responsible for registering and managing the class factories used for component creation...

-

Contract-id: NS_COMPONENTMANAGER_CONTRACTID

-

Implemented Interfaces:

- -

Requestor Interfaces:

- -

Related Interfaces:

- -

nsURILoader

-

The nsURILoader service is responsible for targeting a URI at an appropriate content handler. A content handler may be an existing or new window, a helper application or the Unknown Content Handler - if no other handler can be found for the content-type.

-

Contract-id: NS_URI_LOADER_CONTRACTID

-

Implemented Interfaces:

- -

Related Interfaces:

- -

nsUnknownContentTypeHandler

-

The UnknownContentTypeHandler service is the last resort of the URILoader when no other content handler can be located. If no registered content handlers are available, the UnknownContentTypeHandler is notified.

-

The default implementation of this service displays a dialog box asking the user if the content should be saved to disk...

-

Contract-id: NS_IUNKNOWNCONTENTTYPEHANDLER_CONTRACTID

-

Implemented Interfaces:

- -

HelperApp Launch Dialog

-

Contract-id: NS_EXTERNALHELPERAPPSERVICE_CONTRACTID

-

Implemented Interfaces:

- -

Preferences Service

-

The Preferences service provides access to persistent data stored within a user's profile directory.

-

Contract-id: NS_PREF_CONTRACTID

-

Implemented Interfaces:

- -

Related Interfaces:

- -

Profile Manager Service

-

Contract-id:

-

Implemented Interfaces:

-

Document Loader Service (WebProgress)

-

Eventually, this service will be replaced by theWebProgress service...

-

Contract-id: NS_DOCUMENT_LOADER_SERVICE_CONTRACTID

-

Implemented Interfaces:

- -

Related Interfaces:

- -

Public Components

-

nsWebBrowser

-

The nsWebBrowser is the main embedding component which Gecko exposes. Conceptually, each nsWebBrowser instance represents a HTML content area.

-

Conceptually, for each document being rendered, Gecko creates a container called a DOMWindow. Each WebBrowser exposes a tree of DOMWindows - representing the frame hierarchy for the current document. As such, access to individual document frames is done via the DOMWindow interfaces. Manipulation of the entire document structure is done via the various WebBrowser interfaces.

-

Contract-id: NS_WEBBROWSER_CONTRACTID

-

Implemented Interfaces:

- -

Requestor Interfaces:

- -

Related Interfaces:

- -

Overview:

-

Most of Gecko's functionality is exposed through the nsWebBrowser component. The WebBrowser provides a simple mechanism for other applications to leverage Gecko functionality. Each instance of a WebBrowser encapsulates a full featured HTML content area.

-

The embedding application receives notifications from Gecko through a set of callback interfaces it may choose to implement.

-

Image:public-apis-image3.gif

-

Below is a code snippet which an embedding application can use to create and initialize a WebBrowser:

-
      nsresult rv;
-      nsCOMPtr<nsIBaseWindow> baseWindow;
-      nsCOMPtr<nsIWebBrowser> webBrowser;
-
-      // Create a nsWebBrowser instance...
-      webBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
-      if (NS_FAILED(rv)) return rv;
-
-      // Give the WebBrowser a pointer to the embedding component which
-      // implements the callback interfaces.  Replace 'this' with
-      // an appropriate object...
-      rv = webBrowser->SetContainerWindow((nsIWebBrowserChrome*)this);
-      if (NS_FAILED(rv)) return rv;
-
-      baseWindow = do_QueryInterface(webBrowser);
-
-      // Initialize the WebBrowser with a native parent window
-      // (ie. HWND on Win32).  Replace 'nativeWindow' with a
-      // reference to an appropriate native resource...
-      rv = baseWindow->InitWindow(nativeWindow,   // Native window
-                                  nsnull,         // Always nsnull.
-                                  x, y, cx, cy);  // Initial dimensions...
-      if (NS_FAILED(rv)) return rv;
-
-      // Create the child window for the WebBrowser.
-      rv = baseWindow->Create();
-      if (NS_FAILED(rv)) return rv;
-
-      // At this point webBrowser contains the new initialized instance
-      // of the nsWebBrowser component...
-      // Save webBrowser before it goes out of scope :-)
-
-
-

Web Navigation

-

The nsIWebNavigation interface is used to load URIs into the WebBrowser and provide access to session history capabilities - such as back and forward.

-

Clipboard

-

The WebBrowser exposes access to the system clipboard via the nsIClipboardCommands interface. This interface supports cut/copy/paste operations on the current selection within the WebBrowser window.

-

Printing (not yet implemented)

-

Printing the contents of a DOMWindow within a WebBrowser is a two step process. First, the printer and page options are collected via the nsIPrintOptions interface. On most platforms this involves displaying a native Print dialog box. Once all of the options have been set, the nsIWebBrowserPrint interface is used to print the contents of the desired DOMWindow.

-

Searching

-

Searching within a nsWebBrowser is controlled via the nsIWebBrowserFind interface. The search is always performed within the DOMWindow which currently has the focus.

-

Focus Management

-

Focus managment within the WebBrowser is accessed via the nsIWebBrowserFocus interface.

-

This interface serves two purposes. First, it provides methods for the embedding application to notify a WebBrowser of activation/deactivation and to control tabbing order... This interface also allows access to the currently focused DOMWindow and DOMElement.

-

Context Menu notifications

-

Right-click context menu notifications are passed up to the embedding application through the nsIContextMenuListener interface. These notifications allow the embedding application to display context menus based on user activity within the WebBrowser (such as a right-click on a hypertext link).

-

Saving Documents

-

Notification Interfaces which the embedding application should implement

-

nsFile

-

Public Interfaces

-

nsISupports

-

Base Component Object Model interface. This interface provides runtime interface discovery and a reference counted memory model fashioned after the Microsoft COM IUnknown interface.

-

Interface status... none

-

Interface definition: nsISupportsUtils.h

-


- nsIInterfaceRequestor

-

This Interface provides an interface discovery mechanism which does not imply aggregation. Interface status... none

-

Interface definition: nsIInterfaceRequestor.idl

-

nsIWeakReference

-

This interface is used to retern a proxy reference to a component.

-

Interface status... being reviewed

-

Interface definition: nsIWeakReference.idl

-

nsISimpleEmunerator

-

This interface provides a simple enumeration abstraction.

-

Interface status... being reviewed

-

Interface definition: nsISimpleEnumerator.idl

-

nsIServiceManager

-

This interface allows access to global services within mozilla.

-

Interface status... none

-

Interface definition: nsIServiceManager.h

-


- nsIShutdownListener

-

This interface is used to receive notifications when the Service Manager is being shutdown.

-

Interface status... none

-

Interface definition: nsIServiceManager.h

-


- nsIComponentManager

-

This interface allows new instances of registered XPCOM components to be instantiated.

-

Interface status... none

-

Interface definition: nsIComponentManager.idl

-


- nsIFactory

-

This interface is used by the Component Manager to create new instances of a particular XPCOM component. Each component must provide a factory implementation for creating new instances.

-

Interface status... none

-

Interface definition: nsIFactory.idl

-


- nsIMemory

-

This interface provides access to the global memory management functionality.

-

Interface status... being reviewed

-

Interface definition: nsIMemory.idl

-


- nsIDOMWindow

-

This interface is used to represent the window containing a specific document.

-

Interface status... being reviewed

-

Interface definition: nsIDOMWindow.idl

-


- nsIBaseWindow

-

This interface provides access to various window operations.

-

Interface status... being reviewed

-

Interface definition: nsIBaseWindow.idl

-


- nsIRequest

-

This interface provides a means to control various operations.

-

Interface status... being reviewed

-

Interface definition: nsIRequest.idl

-


- nsIWebBrowser

-

This is the primary interface to the WebBrowser component.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowser.idl

-


- nsIWebBrowserSetup

-

This interface is used to enable or disable various capabilities of a nsWebBrowser instance.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserSetup.idl

-


- nsIWebBrowserChrome

-

This interface provides access to the window containing an nsWebBrowser instance.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserChrome.idl

-


- nsIWebNavigation

-

This interface exposes the web navigation functionality of the nsWebBrowser component.

-

Interface status... being reviewed

-

Interface definition: nsIWebNavigation.idl

-


- nsIWebBrowserPersist

-

This interface exposes the save-as functionality of the nsWebBrowser component.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserPersist.idl

-


- nsIWebBrowserPrint

-

This interface allows printing of individual (or a collection of) DOM Windows within a nsWebBrowser component.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserPrint.idl

-


- nsIWebBrowserFind

-

This interface exposes the searching capabilities of the nsWebBrowser component.

-

Interface status... none

-

Interface definition: nsIWebBrowserFind.idl

-


- nsIWebBrowserFocus

-

This interface provides access to the focus information of a nsWebBrowser instance.

-

Interface status... being reviewed

-

Interface definition: nsIWebBrowserFocus.idl

-


- nsIWebProgress

-

Interface status...

-

Interface definition:

-


- nsIWebProgressListener

-

Interface status...

-

Interface definition:

-


- nsIPrompt

-

Interface status...

-

Interface definition:

-


- nsIPrefs

-

Interface status...

-

Interface definition:

-


- {{ interface("nsIProfile") }}

-

The Profile Manager creates and manages user profiles; each profile is essentially a complete configuration of the application, including preferences, installed extensions, and so forth.

-


- nsIDirectoryServiceProvider

-

Interface status...

-

Interface definition:

-


- nsILocalFile

-

Interface status...

-

Interface definition:

-


- nsIFile

-

Interface status...

-

Interface definition:

-


- nsIClipboardCommands

-

Interface status...

-

Interface definition:

-


- nsISelection

-

Interface status...

-

Interface definition:

-


- nsIURILoader

-

Interface status...

-

Interface definition:

-


- nsIURIContentListener

-

Interface status...

-

Interface definition:

-

 

-

Defining New XPCOM Components

-
-

Original Document Information

- -
-

 

diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/embarquer_gecko/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/embarquer_gecko/index.html" deleted file mode 100644 index e35036fbf4..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/embarquer_gecko/index.html" +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Embarquer Gecko -slug: Mozilla/Gecko/Mozilla_embarqué/FAQ_de_Mozilla_embarqué/Embarquer_Gecko -tags: - - FAQ_de_Mozilla_embarqué -translation_of: Mozilla/Gecko/Embedding_Mozilla/FAQ/Embedding_Gecko ---- -

Obsolète
Cette fonctionnalité est obsolète. Bien qu'encore supportée par des navigateurs, son utilisation est découragée pour tout nouveau projet. Évitez de l'utiliser.

- -
Embedding of Gecko is no longer supported. If you currently embed Gecko, you should use an alternate solution, because you will not be able to pick up new security improvements. Do not use the techniques covered on this page; this material is retained for historical purposes only.
- -

Section 2 : Embarquer Gecko

- -

De quels fichiers ai-je besoin pour embarquer ?

- -

Actuellement, vous devez télécharger et compiler toute l'arborescence des sources du navigateur Mozilla puis choisir les fichiers binaires que vous souhaitez embarquer dans votre application.
- Lesnightly builds sont créées automatiquement depuis les manifests donc vous pouvez commencer à chercher de ce coté.

- -

Comment puis-je compiler les sources à embarquer ?

- -

Premièrement compilez Mozilla, puis saisissez :

- -
cd mozilla/embedding/config
-make
-
- -

Note : Si vous utilisez un objdir, placez-vous plutôt dans le répertoire mozilla/<objdir>/embedding/config puis lancez la compilation avec make.

- -

Un répertoire appelé mozilla/dist/Embed est créé, il contient les fichiers spécifiés par les manifests par défaut et chrome. Vous pouvez tester les compilations par défaut en exécutant les applications de test TestGtkEmbed sous Unix ou MFCEmbed sous Win32. Pour exécuter TestGtlEmbed sous Unix saisissez :

- -
cd mozilla/dist/Embed
-./run-mozilla.sh ./TestGtkEmbed
-
- -

Comment est faite la distribution embarquée ?

- -

Look in embedding/config/ to see a the embedding build process. The basebrowser-win (or basebrowser-unix etc.) file determines which files need to be copied. The embed-jar.mn specifies what chrome is required.

- -

Note that this sample only contains atypical subset of files. You may wish to add or remove files from basebrowser-foo (where foo is win, unix or mach as appropriate) depending on the capabilities you need in your product, or supplement these files by writing your own client-foo file which will be read in addition to basebrowser-foo.

- -

For instance, you can remove the "necko2" library if you do not need FTP, but you will need to add the "appcomps" and "mork" libraries in order to use the Mozilla browser's global history implementation.

- -

The embedding distribution readme file provides more information.

- -

Todo: provide a more complete map of features <-> files

- -

Pourquoi ai-je besoin de distribuer des fichiers XPT avec mon application ?

- -

XPT files are XPCOM type libraries and contain binary definitions of interfaces used by cross-thread marshalling routines and JavaScript to call objects. In other words they are as vital as DLLs to ensure Gecko functions properly.

- -

XPT files can be concatenated together using the xpt_link tool to reduce clutter and improve startup performance. There is a special perl script for this purpose, that you can see here.

- -

Comment me prémunir des changements de Gecko ?

- -

If you want to be protected against changes in the Gecko, you should only use interfaces and API that are clearly marked FROZEN in their idl description. This query will find most of the frozen interfaces: Frozen Interface and APIs. Interfaces are being reviewed and frozen all the time and cover most things embedders will want to do.

- -

You can still use unfrozen interfaces (hey it's open source and we can't stop you!) and even reach into the guts of the code but you do so at your own risk. Subsequent releases of Mozilla may well change these interfaces and your source and binary will break as a result.

- -

See the Embedding API Reference for more information

- -

Cela veut-il dire que mon application fonctionnera avec toutes les futures versions de GRE/Gecko/Mozilla ?

- -

As long as you use frozen interfaces, the answer is: "Almost." Unfortunately vtable layout can vary from compiler to compiler. This mostly affects Linux compilers such as gcc which have changed their vtable layout more than once in the past few years. See the document on binary compatibility. when ported too, this should be an internal link

- -

Quelles plate-formes sont supportées ?

- -

Short answer is anything Mozilla can run on, then Gecko can too. However, the embedding is concentrating on three primary platforms:

- - - -

L'embarquement supporte-t-il des protocoles sécurisés comme HTTPS ?

- -

Yes, psm is supported in embedding.

- -

Comment mes applications communiquent-elles avec Gecko ?

- -

The Embedding API provides a set of interfaces and to control the embedded application, and another set of interfaces that the containing application must implement in order to receive asynchronous notifications from the embedded browser.

- -

Todo: insert jud's picture here?

- -

Puis-je embarquer sans...

- -

(Some of the more common questions)

- - - -

Puis-je embarquer l'éditeur HTML de Mozilla ?

- -

Sort of. The latest word is that you can embed an editor in a native app, and do command handling and updating via the command handling APIs. There is some lacking functionality (e.g. controlling editor types, inserting and extracting HTML). In addition, the command handling APIs are soon going to change, when Mike Judge lands a long-standing patch (which missed the 1.0 change, and bas been delayed way too long).

- -

Documentation is lacking, mostly because of pending API changes. Check out the Embedding Editor page for more info.

- -

Quel toolkit de widget peut utiliser Mozilla ?

- -

Mozilla makes its own cross-platform widgets for HTML forms, and does not use a 3rd-party cross platform toolkit, nor the native widgets that a platform provides. The widgets are drawn using GFX, Mozilla's abstraction of a drawing toolkit. They are styled with CSS, including minor per-platform tweaks to allow them to look like the native platform's native widgets. This allows full CSS and DOM support of all HTML widgets across all platforms, without requiring each platform to separately support every part of CSS and DOM.

- -

There have been a number of requests for native widget support but at this time there are no plans to support a second widget set beyond the cross-platform widgets.

- -

In the future, widgets may be defined with XBL.

- -

Mozilla embarqué supporte-t-il Java ?

- -

We provide Java support through the OJI plugin API. The Java plugin from Sun takes ~7Mb of disk space (Linux). If you want Java support you should edit the basebrowser-win / basebrowser-unix etc. file and uncomment the OJI section or copy those files manually after an embedding dist has been created.

- -

Puis-je embarquer Mozilla dans n'importe quel autre cas ?

- -

Aside from programming direct to the embedding API you may also embed Mozilla:

- - - -

Interwiki Language Links

- -
 
diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/introduction_\303\240_gecko_et_\303\240_l'embarqu\303\251/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/introduction_\303\240_gecko_et_\303\240_l'embarqu\303\251/index.html" deleted file mode 100644 index 1836cab0bb..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/faq_de_mozilla_embarqu\303\251/introduction_\303\240_gecko_et_\303\240_l'embarqu\303\251/index.html" +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Introduction à Gecko et à l'embarqué -slug: >- - Mozilla/Gecko/Mozilla_embarqué/FAQ_de_Mozilla_embarqué/Introduction_à_Gecko_et_à_l'embarqué -tags: - - FAQ_de_Mozilla_embarqué -translation_of: Mozilla/Gecko/Embedding_Mozilla/FAQ/How_do_I... ---- -

 

-

Introduction à Gecko et à l'embarquement

-

Qu'est-ce que Gecko ?

-

Gecko est le moteur interne du navigateur, ce qui inclut networking, un parser, un modèle de contenu, chrome et les autres technologies sur lesquelles Mozilla et les autres applications sont basées. En d'autres termes, tout ce qui n'est pas spécifique à une application.

-

La FAQ de Gecko est légèrement obsolète FAQ.

-

Qu'est-ce que Mozilla ?

-

Mozilla est un navigateur web open-source multi plates-formes, un éditeur et une application de messagerie / newsgroup créé sur Gecko.

-

Qu'est-ce que le GRE ?

-

Le GRE (formellement le MRE) qui est l'acronime de Gecko Runtime Environment, est un support d'exécution partagé que toutes les applications peuvent utiliser. Il est maintenant développé comme un projet indépendant connu sous le nom de XULRunner.

-

Qu'est-ce que XPCOM ?

-

XPCOM est un - - modèle objet de composants - (semblable à COM/DCOM de MS Windows mais conçut pour être portable sur plusieurs plates-formes) utilisé pour unifier la création, le contrôle, et la suppression d'objets et d'autres données à travers Mozilla. Le coeur de XPCOM est l'interface - - nsISupports - , qui offre des services de comptage des références et d'introspection (possibilité d'interroger les objets afin de se renseigner sur leurs capacités). Tout les objets XPCOM implémentent l'interface - - nsISupports - , en plus de toutes les interfaces spécifiques qui lui sont nécessaire. En fin de compte, XPCOM fournit une couche de services indépendante du language appelé - - XPConnect - qui permet l'implémentation d'objets dans tout language supporté. Grâce à - - XPConnect - , ces objets peuvent aussi être appelés à partir de n'importe lequel de ces languages.

-

On peut trouver plus d'informations ici.

-

Que signifie embarquer Gecko ?

-

Gecko autorise des developpeurs tiers à utiliser la même technologie que Mozilla. Cela signifie que vous pouvez tirer partie, dans une application tierce, des services d'un navigateur web, ouvrir des canaux de communications et faire transiter des flux de données à travers le service réseau, le - - Modèle Objet de Document - (NdT: en anglais DOM, - - Document Object Model - ) et plus encore. Vous pouvez même bâtir entièrement une nouvelle application en utilisant Gecko.

-

Quels sont les termes de licence pour embarquer Gecko ?

-

Les mêmes que pour le reste de Mozilla. Voir la page du MPL pour plus d'informations.

-

Existe-t'il un SDK ?

-

Nous travaillons lentement sur une SDK, gelant et documentant les interfaces et retouchant le processus de construction. Pour le moment nous vous recommandons de télécharger le code source puis de le compiler.

-

Des compilations nocturnes du SDK pour la plateforme Windows 32bits peuvent être disponibles ici.

-

Quelle est la dernière version ? Quelle version utiliser ?

-

Les compilations embarquées et les source tarballs sont produites la nuit et peuvent être obtenues ici. Si vous privilégiez la stabilité, les compilations de la branche 1.7.x de Mozilla sont vivement recommendées.

-

Qui utilise déjà gecko ?

-

Voir ici la liste des logiciels embarquant Gecko.

-

Interwiki Language Links

diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/index.html" deleted file mode 100644 index b8a2b5bb4c..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/index.html" +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Mozilla embarqué -slug: Mozilla/Gecko/Mozilla_embarqué -tags: - - Mozilla_embarqué -translation_of: Mozilla/Gecko/Embedding_Mozilla ---- -
-

Gecko permet aux développeurs d'applications tierces de pouvoir bénéficier de la même technologie que celle présente dans Mozilla. Il est possible d'intégrer un navigateur Web à l'intérieur d'une autre application, d'ouvrir des canaux et de parcourir des flux de données à travers le réseau, de manipuler le DOM et ainsi de suite. Des applications entières peuvent être crées en s'appuyant sur Gecko.

-
- - - - - - - - -
-

Documentation

- -
-
FAQ de Mozilla embarqué
-
Une Foire Aux Questions très complète concernant Mozilla embarqué.
-
- -
-
Les bases de Gecko embarqué
-
Une introduction à l'incorporation du moteur de rendu Gecko dans une application (à traduire de en:Gecko Embedding Basics).
-
- -
-
Intégration de l'éditeur
-
Ce document détaille la situation actuelle de l'éditeur dans ce domaine, les problèmes dans l'implémentation existante, certains scénarios possibles d'intégration de l'éditeur qui doivent être pris en compte, et une solution embarquée qui les intègrera.
-
- -
-
Construisez votre propre navigateur - Comment embarquer Mozilla
-
Une introduction rapide à Mozilla embarqué (à traduire de en:Roll your own browser - An embedding HowTo.
-
- -

Tous les articles…

-
-

Communauté

- -
    -
  • Voir les forums de Mozilla…
  • -
- -

{{ DiscussionList("dev-embedding", "mozilla.dev.embedding") }}

- - - -
-
Gecko, XPCOM
-
-
- -

 

diff --git "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/int\303\251gration_\303\251diteur/index.html" "b/files/fr/mozilla/gecko/mozilla_embarqu\303\251/int\303\251gration_\303\251diteur/index.html" deleted file mode 100644 index 4e6e8c8281..0000000000 --- "a/files/fr/mozilla/gecko/mozilla_embarqu\303\251/int\303\251gration_\303\251diteur/index.html" +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Intégration de l'éditeur -slug: Mozilla/Gecko/Mozilla_embarqué/Intégration_éditeur -tags: - - Midas - - Mozilla_embarqué -translation_of: Mozilla/Gecko/Embedding_Mozilla/Embedding_the_editor ---- -

Introduction

- -

Ce document présente les possibilités actuelles d'intégration d'un éditeur, les problèmes causés par l'intégration existante, quelques scénarios d'intégration possibles pour s'en sortir, et une solution d'intégration pour les réaliser. Pour finir, la solution retenue sera décrite étape par étape.

- -

Mises en œuvre possibles de l'intégration

- -

Ici sont décrits des scénarios d'intégration nécessaires pour faire fonctionner un éditeur. Notez que j'utilise le terme de « Compositeur » pour désigner une interface de composition au format HTML qui fait de l'édition de texte enrichi et « Éditeur » pour un éditeur en texte brut (aussi bien que pour la technologie sous-jacente du compositeur). <htmlarea> est vu comme une formule pour désigner un objet texte contenant du texte enrichi, cela ne veut pas dire pour autant que cette balise sera supportée dans les versions suivantes de Mozilla.

- -

Compositeur intégré dans une application XUL

- -

Les développeurs ont besoin d'intégrer des compositeurs dans leurs applications XUL en utilisant la balise <editor>, comme cela se fait aujourd'hui. Ils devraient avoir le moins possible de travail à faire pour obtenir les fonctions basiques d'édition, avoir autant d'<editor>s par fenêtre qu'ils le souhaitent et pouvoir contrôler si ces <editor>s sont en mode HTML ou en mode texte.

- -

Compositeur intégré dans une application native

- -

Dans ce cas de figure, l'<iframe> dans laquelle fonctionne l'éditeur est directement intégrée dans l'application native. Cela revient à intégrer un navigateur via nsIWebBrowser, mais en obtenant, à la place, un document éditable. L'interface du compositeur (barres d'outils, etc.) doit être implémentée à partir des éléments d'interface graphique présents dans le conteneur ou en utilisant du XUL. Cette interface doit être configurable, avec notamment des barres d'outils flottantes déplaçables (dockable ?), une même barre d'outils pour plusieurs objets compositeur, ou une pour chaque.

- -

Ce type d'intégration requiert que le code du compositeur fonctionne quelle que soit l'interface utilisateur (IU). La communication entre le noyau de l'éditeur et l'interface utilisateur doit pouvoir passer par une ou plusieurs interfaces qui isolent l'éditeur de l'application hôte. (L'nsEditorShell existant fait des suppositions sur l'hébergement de document XUL, qui doivent être contredites.)

- -

Compositeur intégré dans une page web (<htmlarea>)

- -

IE 5 supporte l'élément <HTMLArea> ; si Mozilla travaille à supporter quelque chose de similaire, l'éditeur devra être intégrable dans la mesure du possible. Il est probable qu'on utilise XBL pour implémenter ce type d'objet, comme c'est prévu pour d'autres types de contrôles.

- -

Dans le cas de l'intégration du compositeur dans une application native, il est donc ici nécessaire de rendre l'interface utilisateur configurable, de façon que l'on puisse aussi bien l'afficher comme une barre d'outils au dessus de <htmlarea>, comme une fenêtre flottante, ou comme une barre d'outil de haut-niveau (top-level).

- -

Problèmes connus

- -

L'architecture du compositeur existant a été créée alors que d'autres parties de Mozilla étaient encore en cours de développement. Il en résulte de nombreux points faibles et anachronismes. Cette section décrit ses défauts majeurs.

- -

Problème d'appartenance de l'éditeur

- -

L'éditeur d'une fenêtre compositrice appartient au nsEditorShell, qui à son tour est créé, dirigé et détruit par nsEditorBoxObject. L'objet box est une structure de présentation qui appartient aux noeuds de contenu et survit à la destruction/reconstitution de la frame. L'objet box a également une référence vers le docShell de la frame éditrice. XBL créé un nsEditorBoxObject pour chaque balise <editor>, et permet à Javascript d'accéder aux propriétés de cet objet box (tel que le nsIEditorShell). La balise <editor> est tout simplement une <iframe> dans laquelle l'éditeur est créé. Dans les autres aspects, il se comporte comme une <iframe> XUL.

- -

Le problème avec ce modèle d'appartenance est qu'il ne peut y avoir qu'un éditeur par balise <editor>, alors que le document chargé dans l'<iframe> peut très bien contenir de multiples <iframe>s (dans le cas d'un document frameset ou dans un document contenant lui-même un <html:iframe>). Aujourd'hui, le compositeur ne fonctionne pas très bien avec ce types de document.

- -

Limitation d'un éditeur par fenêtre

- -

Le compositeur construit sur une architecture XUL/C++ s'est développé sur le présupposé qu'une seule balise <editor> par fenêtre suffirait. Lors de la construction de la fenêtre, nous prenons l'editorShell de l'élément <editor> que l'on met dans window.editorShell. A partir de là, beaucoup de Javascript dans editor.js, ComposerCommands.js et les différents fichiés JS de dialogue s'assurent de pouvoir atteindre le seul bon éditeur via window.editorShell. Ce présupposé manquait de clairevoyance et doit être corrigé.

- -

L'éditeur suppose une structure de document XUL

- -

Du code C++ et JS présent dans l'éditeur suppose que celui-ci se trouve dans un document XUL et qu'il y ait des nœuds du document XUL en dehors, dont les attributs peuvent être récupérés pour changer l'état de l'interface utilisateur (par exemple le style des boutons). Cela doit être changé pour permettre aux conteneurs d'utiliser leurs propres apparences, probablement natives. L'éditeur doit pouvoir faire des appels à travers une ou plusieurs interfaces quand il communique avec l'interface utilisateur.

- -

Objectifs de l'intégration

- -

L'éditeur requiert des changements de conception de façon à ce que les applications intégrées soient fonctionnelles. Ces changements doivent nécessairement prendre en compte les problèmes existants. Brièvement, les objectifs de l'intégration sont :

- - - -

Atteindre ces objectifs doit également permettre de résoudre les problèmes suivants, liés au compositeur :

- - - -

Solutions proposées

- -

Régler les problèmes d'appartenance de l'éditeur

- -

Comme décrit plus haut, les liens d'appartenance (racines) de l'éditeur doivent être changés de façon à ce qu'un éditeur se trouve au plus haut niveau du nsDocShell, plutôt que d'être accroché à l'objet nsEditorBoxObject. Il doit y avoir un docShell par <iframe> éditable. Cela implique :

- - - - - -

Plus d'un éditeur par fenêtre

- -

Les clients compositeurs basés sur Mozilla supposent tous qu'il n'y a qu'une balise <editor> par fenêtre. Ils ont tous besoin de fonctionner avec plusieurs éditeurs. Corriger cela nécessite des modifications JS de cette ordre :

- - - -

Isoler l'éditeur de l'interface

- -

Le compositeur doit ne rien connaitre de l'IU qui le contrôle. Le plan est d'isoler le compositeur de l'IU via une nouvelle interface que le conteneur implémente. N'importe quel IU qui est aujourd'hui créée par le compositeur doit passer par cette interface.

- - - -

Les étapes de l'intégration

- -

Cette section tente de préparer un plan d'implémentation, dans le but de garder tout en état de marche étape après étape (? as the various steps are taken). Certaines de ces tâches peuvent être faite simultanément.

- -
    -
  1. Décider comment implémenter le support d'une session édition muti-éditeur
  2. -
  3. Éliminer les interdépendances spécifiques entre le compositeur et le document XUL, via nsIEditorUserInterface
  4. -
  5. Créer un goulet d'étranglement pour communiquer avec l'éditeur qui a le focus; s'assurer que les changements de focus mettent bien à jour l'état
  6. -
  7. Faire du docShell,le propriétaire de l'éditeur, créant nsIEditorFrame
  8. -
  9. Créer l'API de la session d'édition qui s'occupera des collections d'éditeurs (ou rendre l'éditeur refocusable)
  10. -
- -

Questions ouvertes

- -

Ou doit se trouver la logique d'ouverture et enregistrement de fichier ?

- -

Il semble que certains conteneurs voudront composer leur logique d'ouverture et enregistrement de fichier, d'autres non. Ou devrait se trouver cette logique ? Peut-elle être en JavaScript ? Bien sur, un conteneur doit pouvoir utiliser ses propres boîtes de dialogue Ouvrir et Enregistrer et communiquer avec le compositeur pour coordonner le processus d'ouverture et enregistrement.

- -
Réponse possible
- -

Le conteneur fournit les boîtes de dialogue Ouvrir et Enregistrer s'il le veut. Dans le compositeur, on peut adopter (? pose) ces boîtes de dialogue à partir de JS (? certains problèmes liés à nsIFile ont été résolu - once some nsIFile problems have been solved).

- -

Toute l'IU du compositeur doit-elle être remplaçable ?

- -

Une immense partie de l'IU du compositeur se trouve dans les différentes boîtes de dialogue pour l'édition des tableaux, liens, images etc. Doit-on donner la possibilité à un conteneur de remplacer tout cela par une IU native ?

- -
Réponse possible
- -

Les boîtes de dialogue utilisent les API de l'éditeur disponible pour obtenir et affecter les données, donc elles peuvent faire tout leur travail en passant par les API existantes. Si un intégrateur veut une IU entièrement native, il aura à coder ses propres boîtes de dialogue et logiques associées, mais les API devraient toujours leurs être accessibles. Il semble que ce ne soit pas une bonne solution.

diff --git a/files/fr/mozilla/gecko/sdk_gecko/index.html b/files/fr/mozilla/gecko/sdk_gecko/index.html deleted file mode 100644 index 306fb0590f..0000000000 --- a/files/fr/mozilla/gecko/sdk_gecko/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: SDK Gecko -slug: Mozilla/Gecko/SDK_Gecko -tags: - - Développement_de_Mozilla - - Extensions - - Gecko -translation_of: Mozilla/Gecko/Gecko_SDK ---- -

-

-

Aperçu

-

Le SDK Gecko est un ensemble de fichiers XPIDL, d'entêtes et d'outils pour développer des composants XPCOM pouvant à leur tour être accéder depuis XUL grâce à JavaScript. -

Notez que le développement de tels composants ne nécessite pas que vous possédiez la totalité des sources, par exemple de Firefox, puisque vous n'accédez pas à l'interface utilisateur depuis un composant. Comme le composant contient des fonctions basiques, il doit pouvoir fonctionner avec chaque application de la plateforme Mozilla. Il n'y a donc aucune raison de se baser sur une application particulière pour créer une fonctionnalité générique. C'est la raison pour laquelle a été conçu le SDK Gecko. -

Il ne faut pas confondre le SDK Gecko avec XULRunner. Le SDK Gecko est une collection de fichiers d'entêtes et d'outils utilisée pour développer des composants XPCOM généraux afin d'ajouter des fonctionnalités à une plateforme existante, alors que XULRunner peut servir de support à l'éxécution d'applications autonomes ou embarquées basées sur la technologie Mozilla. -

-

Obtenir le SDK

-

Notez qu'il n'est pas nécessaire de re-télécharger ou de re-compiler le SDK Gecko à chaque mise à jour de sécurité de Mozilla puisque le SDK Gecko ne subit pas de modifications lors de ces mises à jour. -

-

Téléchargement

-

Lorsque vous téléchargez le SDK Gecko, vous devez choisir la version correspondant à la plus ancienne version de Mozilla que vous ciblez. Autrement dit, vous ne devez pas télécharger le SDK Gecko 1.7 si vous souhaitez utiliser votre composant avec Mozilla 1.6. C'est un point important car la compatibilité binaire n'est assurée qu'avec les versions futures du moteur de rendu Gecko. Pour ce tutoriel, nous utiliserons la version 1.7 du SDK Gecko, ainsi notre composant sera compatible avec Mozilla 1.7 (et ses produits dérivés tels que Firefox 1.0 ou Netscape 7.2). -

- - - - - -
Lien de téléchargement -Gecko 1.7 (Firefox 1.0) -Gecko 1.8 (Firefox 1.5 et 2.0) -
Windows -Download -Download -
Mac -N/A -Download -
Linux i686 -Download -Download -
-

Le SDK n'est pas officiellement disponible pour d'autres plateformes ; si vous en avez besoin, vous devrez probablement le compiler vous même. -

Décompressez le fichier dans un répertoire de votre disque. -

-

Compiler le SDK

-

Pour compiler le SDK, vous devez compiler XULRunner (le SDK Gecko est compilé en même temps que XULRunner). Consultez la documentation sur la compilation pour plus de précisions. -

Le SDK Gecko est généré dans dist/sdk dans votre répertoire objet. Vous pouvez ensuite copier ce répertoire vers un autre emplacement et supprimer l'arborescence XULRunner. -

-

Contenu du SDK

-

Le SDK contient les éléments suivants : -

- -

Pour plus d'informations sur la manière de lier des composants XPCOM en utilisant la bibliothèque "glue" XPCOM, consultez XPCOM Glue. -

-
-
-{{ languages( { "en": "en/Gecko_SDK", "ja": "ja/Gecko_SDK", "zh-cn": "cn/Gecko_SDK" } ) }} diff --git a/files/fr/mozilla/implementer_pontoon_sur_un_projet_mozilla/index.html b/files/fr/mozilla/implementer_pontoon_sur_un_projet_mozilla/index.html deleted file mode 100644 index 8fd8b5daa7..0000000000 --- a/files/fr/mozilla/implementer_pontoon_sur_un_projet_mozilla/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Implémenter Pontoon sur un projet Mozilla -slug: Mozilla/Implementer_Pontoon_sur_un_projet_Mozilla -tags: - - Localisation -translation_of: Mozilla/Implementing_Pontoon_in_a_Mozilla_website ---- -

Pontoon est un outil What-You-See-Is-What-You-Get (WYSIWYG) web pour la localisation (l10n). Chez Mozilla, nous utilisons actuellement Pontoon pour la localisation de plusieurs projets Mozilla et pour l'interface de l'app de Firefox OS app, connue comme Gaia. Pontoon est un outil simple et intuitif qui demande très peu de compétences techniques de la part des localisateurs, ce qui réduira le temps de publication des versions localisées de votre projet. Nous discutons ci-dessous de la manière d'ajouter Pontoon à votre projet Mozilla.

- -
-

Vous voulez participer à l'amélioration de Pontoon? Apprenez comment participer su GitHub.

-
- -
-

Vous venez de démarrer votre projet de localisation? Jetez un oeil sur la page Localisez votre projet de notre wiki.

-
- -

A. Rendre votre projet localisable

- -

Nous comprenons que les éléments suivants puissent être considérés des meilleures pratiques standards pour la localisation de projets chez Mozilla, mais nous ne perdons rien à faire un petit rappel:

- -
    -
  1. Assurez-vous que votre projet supporte l'un des frameworks l10n (gettext, XLIFF, L20n, lang, properties, etc.).
  2. -
  3. Extrayez les strings localisables dans des fichiers de ressources.
  4. -
  5. Envoyez (push) les ressources vers un repository (SVN, HG, Git). -
      -
    • Les répertoires locaux individuels doivent être situés au même niveau d'indentation de l'arbre des répertoires. La locale d'origine doit être nommée templates, en-US, en-us ou en. Si plusieurs répertoires avec de tels noms existent dans le repository et contiennent des fichiers dans un format de fichier supporté, le premier sera utilisé. Vous pourriez vouloir mettre tous les dossiers dans un répertoire locales dédié à cet objectif. Le code des locales ne doit pas faire partie du nom du fichier.
    • -
    • Forme correcte: -
      /locales/{locale_code}/path/to/file.extension
      -
    • -
    • Forme incorrecte: -
      /locales/{locale_code}/path/to/file.{locale_code}.extension
      -
    • -
    -
  6. -
  7. Assurez-vous que Pontoon a les droits en écriture sur votre repository. - -
  8. -
- -

B. (optionnel) Activer la localisation en-page de votre projet web

- -
    -
  1. Liez un script depuis l'élément <body> de votre code HTML, pour que Pontoon puisse parler à votre site, détecter le contenu et le rendre localisable en-place. Vous devez seulement faire ça sur l'environnement qui sera utilisé pour la localisation en-page. En gros, votre serveur de validation: - - -
  2. -
  3. Si votre site utilise CSP,  assurez-vous que les actions suivantes sont autorisées pour le domaine pontoon.mozilla.org: -
      -
    1. charger dans une iframe
    2. -
    3. charger des CSS distants
    4. -
    5. chargez des images distantes
    6. -
    -
  4. -
  5. Si votre site utilise le header X-Frame-Options, assurez-vous que le chargement dans des iframes est autorisé pour le domaine pontoon.mozilla.org.
  6. -
  7. Assurez-vous que votre site supporte HTTPS. C'est gratuit, automatisé et libre. Let's encrypt!
  8. -
- -

C. Ajoutez votre projet à Pontoon

- -

Votre projet est maintenant prêt à être configuré sur Pontoon. Enregistrez un bug sur Localization Infrastructure and Tools :: Administration / Setup et fournissez-nous l'information suivante:

- - - -

Pour plus de détails, contactez l'Équipe de gestion du projet.

diff --git a/files/fr/mozilla/instantbird/index.html b/files/fr/mozilla/instantbird/index.html deleted file mode 100644 index d73135fead..0000000000 --- a/files/fr/mozilla/instantbird/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Instantbird -slug: Mozilla/Instantbird -translation_of: Mozilla/Instantbird ---- -

Instantbird est une application de messagerie instantanée avec liens étroits à Mozilla. Ces pages documentent Instantbird et fournissent également des liens vers de la documentation sur le Chat Core backend, qui est également utilisée dans Thunderbird.

- -

Instantbird est construit sur le même plate-form technique que Firefox. Initialement proposé comme projet Google Summer of Code pour créer une interface d'XML autour libpurple (le backend de Pidgin). Instantbird n'a pas été accepté, mais a débuté en 2007, depuis il a grandis au-delà d'une frontend simple pour que libpurple à dispose de ses propres protocales.

- - - - - - - - -
-

Documentation

- -
-
Constuction d'Instantbird
-
Information sur la création d'Instantbird à partir du dépôt comm-central.
-
Chat Core
-
Le code backend, y compris documentation rugueux sur chat protocols ({{ Interface("prplIProtocol") }} and ami.e.s.).
-
Affichage des Messages
-
Information sur le thème de l'affichage des messages.
-
Raccourcis Clavier
-
Liste des raccourcis clavier.
-
-

Liens Utils

-
-
Dernier nightly builds
-
Ceux-ci sont généralement stables, mais attendent à des problèmes de temps à autreet déposer des bugs.
-
- -

Voir Tout...

-
-

Communauté

- -
    -
  • #instantbird sur irc.mozilla.org (pour des utilisateurs et développeurs)
  • -
  • Assistance est géré sur la liste de diffusion pour support-instantbird ou sur IRC: {{ DiscussionList("support-instantbird", "mozilla.support.instantbird") }}
  • -
  • Questions d'extensions peut-être discuté sur le dev-chat groupe ou sur IRC: {{ DiscussionList("dev-chat", "mozilla.dev.chat") }}
  • -
  • une liste de tout Instantbird canaux de communication
  • -
- -

Outils

- - - - - - -
diff --git a/files/fr/mozilla/internal_css_attributes/index.html b/files/fr/mozilla/internal_css_attributes/index.html deleted file mode 100644 index cd449f72a5..0000000000 --- a/files/fr/mozilla/internal_css_attributes/index.html +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Chrome-only CSS attributes -slug: Mozilla/Internal_CSS_attributes -tags: - - TopicStub -translation_of: Mozilla/Gecko/Chrome/CSS ---- -
{{CSSRef}}
- -

Les attributs CSS suivants ne sont disponibles qu'à partir du code privilégié (chrome) et sont spécifiques à Mozilla.

- -

{{LandingPageListSubpages}}

- -

Voir aussi

- - diff --git a/files/fr/mozilla/javascript_astuces/index.html b/files/fr/mozilla/javascript_astuces/index.html deleted file mode 100644 index f2bbb7b567..0000000000 --- a/files/fr/mozilla/javascript_astuces/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Astuces JavaScript -slug: Mozilla/JavaScript_Astuces -tags: - - Developper avec Mozilla - - JavaScript -translation_of: Mozilla/JavaScript_Tips ---- -

XUL Tips

- - - -
var UniqueName = {
-  _privateMember: 3,
-  publicMember: "A string",
-
-  init: function() {
-    this.doSomething(this.anotherMember);
-  },
-
-  doSomething: function(aParam) {
-    alert(aParam);
-  }
-};
-
- -

XPConnect

- - - -
if (target instanceof Components.interfaces.nsIRDFResource)
-  return target.Value;
-if (target instanceof Components.interfaces.nsIRDFLiteral)
-  return target.Value;
-return null;
-
- - - -
var weakObserver = {
-  QueryInterface: function QueryInterface(aIID) {
-    if (aIID.equals(Components.interfaces.nsIObserver) ||
-        aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
-        aIID.equals(Components.interfaces.nsISupports))
-       return this;
-    throw Components.results.NS_NOINTERFACE;
-  },
-  observe: function observe(aSubject, aTopic, aState) {
-  }
-}
-
- - - -

DOM elements

- - - -

References

- - - -

{{ languages( { "ja": "ja/JavaScript_style_guide" } ) }}

diff --git a/files/fr/mozilla/javascript_code_modules/index.html b/files/fr/mozilla/javascript_code_modules/index.html deleted file mode 100644 index b982031dd1..0000000000 --- a/files/fr/mozilla/javascript_code_modules/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: JavaScript code modules -slug: Mozilla/JavaScript_code_modules -tags: - - Add-ons - - Extensions - - JavaScript - - Modules - - TopicStub - - XPCOM -translation_of: Mozilla/JavaScript_code_modules ---- -
{{gecko_minversion_header("1.9")}}
- -

Modules de code javaScript permettent de multiples priviléges de code partagé étendues. Par exemple, un module peut être utilisé par Firefox, ainsi que par des extensions, afin d'éviter la duplication de code.

- - - - - - - - -
-

Sujets généraux

- -
-
Utilisation de modules de code JavaScript
-
Une introduction à la façon d'utiliser les modules de code JavaScript.
-
Component.utils.import
-
Comment importer un module de code JavaScript.
-
Component.utils.unload {{gecko_minversion_inline("7.0")}}
-
Comment décharger un module de code JavaScript.
-
Code snippets: Modules
-
Des exemples de la façon d'utiliser des modules de code.
-
Mozilla Labs JS Modules
-
Cette page propose une liste de modules JS, ainsi que des liens de téléchargement et de la documentation, que les développeurs d'extensions peuvent utiliser dans leur code.
-
- -
-
-
-

Modules de code standard

- -
-
AddonManager.jsm {{gecko_minversion_inline("2.0")}}
-
Interface pour installer, gérer et désinstaller des add-ons.
-
AddonRepository.jsm {{gecko_minversion_inline("2.0")}}
-
Permet de rechercher des addons référentiel.
-
ctypes.jsm {{fx_minversion_inline("3.6")}}
-
Fournit une interface qui permet au code JavaScript d'appeler les bibliothèques natives sans nécessiter le développement d'un composant XPCOM.
-
DeferredTask.jsm {{gecko_minversion_inline("18.0")}}
-
Exécuter une tâche après un délai.
-
Dict.jsm {{gecko_minversion_inline("5.0")}}
-
Fournit une API pour les dictionnaires de paires clé/valeur.
-
DownloadLastDir.jsm {{gecko_minversion_inline("2.0")}}
-
Fournit le chemin d'accès au répertoire dans lequel le dernier téléchargement a eu lieu.
-
Downloads.jsm {{gecko_minversion_inline("23.0")}}
-
Fournit un point d'entrée unique pour interagir avec les capacités de téléchargement de la plate-forme.
-
FileUtils.jsm {{gecko_minversion_inline("1.9.2")}}
-
Fournit des aides pour le traitement des fichiers.
-
Geometry.jsm {{gecko_minversion_inline("2.0")}}
-
Fournit des routines pour effectuer des opérations géométriques de base sur des points et des rectangles.
-
ISO8601DateUtils.jsm
-
Fournit des routines pour convertion entre des objets Date JavaScript et des chaînes de date ISO 8601.
-
NetUtil.jsm
-
Fournit des fonctions utilitaires de mise en réseau utiles, notamment la possibilité de copier facilement des données d'un flux d'entrée vers un flux de sortie de manière asynchrone.
-
openLocationLastURL.jsm {{gecko_minversion_inline("1.9.1.4")}}
-
Donne accès à la dernière URL ouverte à l'aide de l'option "Ouvrir l'emplacement" dans le menu Fichier.
-
osfile.jsm {{gecko_minversion_inline("16.0")}}
-
Le module JavaScript OS.File contient des primitives de manipulation de fichiers
-
PerfMeasurement.jsm {{fx_minversion_inline("4.0")}}
-
Permet d'accéder au hardware de bas niveau et aux outils OS de mesure de performance.
-
PluralForm.jsm
-
Fournit un moyen simple d'obtenir les formes plurielles correctes pour la locale actuelle, ainsi que des moyens de localiser vers une règle plurielle spécifique.
-
PopupNotifications.jsm {{gecko_minversion_inline("2.0")}}
-
Fournit un moyen facile de présenter des notifications non-modales aux utilisateurs.
-
Promise.jsm {{gecko_minversion_inline("25.0")}}
-
Met en oeuvre la proposition Promises/A+ telle que connue en avril 2013
-
Services.jsm {{gecko_minversion_inline("2.0")}}
-
Fournit getters pour obtenir facilement l'accès aux services couramment utilisés.
-
source-editor.jsm {{fx_minversion_inline("11.0")}}
-
Est utilisé par les outils de développement tels que l'éditeur de style; cette interface implémente l'éditeur et vous permet d'interagir avec lui.
-
Sqlite.jsm {{gecko_minversion_inline("20.0")}}
-
Une API basée sur promise de {{ interface("mozIStorage") }}/SQLite.
-
Task.jsm {{gecko_minversion_inline("17.0")}}
-
Met en œuvre un sous-ensemble d'opérations asynchrones séquentielles simple Task.js , en utilisant la puissance de l'opérateur JavaScript yield.
-
Timer.jsm {{gecko_minversion_inline("22.0")}}
-
Une mise en œuvre pur JS de window.setTimeout.
-
XPCOMUtils.jsm
-
Contient des utilitaires pour les composants JavaScript chargés par le chargeur composant JS.
-
-
diff --git a/files/fr/mozilla/javascript_code_modules/osfile.jsm/index.html b/files/fr/mozilla/javascript_code_modules/osfile.jsm/index.html deleted file mode 100644 index b2ed155f4f..0000000000 --- a/files/fr/mozilla/javascript_code_modules/osfile.jsm/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: OSFile.jsm -slug: Mozilla/JavaScript_code_modules/OSFile.jsm -tags: - - File - - IO - - JavaScript - - NeedsTranslation - - OS - - TopicStub - - Unix - - Windows - - add-on - - platform -translation_of: Mozilla/JavaScript_code_modules/OSFile.jsm ---- -

Le module JavaScript OS.File contient des primitives pour manipuler des fichiers hors du thread principal.

- -

F.A.Q.

- -
-
Qu'est-ce que OS.File?
-
OS.File est une nouvelle API conçue pour une manipulation efficace et hors-fil des fichiers par du code JavaScript privilégié. Cette API est destinée à remplacer, à terme, la plupart des manipulations de fichiers basées sur XPCOM (nsIFile, sous-ensembles de nsIIOService, etc.) par du code JavaScript.
-
Quelles sont les relations avec l'API de fichier HTML5?
-
Aucun, vraiment. L'API de fichier est conçue pour une manipulation de haut niveau et très restreinte de fichiers par des applications Web. OS.File est conçu pour une manipulation efficace et sans restriction des fichiers par Firefox lui-même et par des modules complémentaires.
-
Why is Off Main Thread File I/O important?
-
One thing that all developers need to remember is that the duration of a File I/O operation is unbounded. Depending on the current load of the kernel, the current disk activity, the current load of the bus, the current rotation speed of the disk, the amount of battery power, etc. operations can take an arbitrary amount of time. We are talking about several seconds to execute operations that look trivial, such as closing a file, or checking when it was last modified.
- If the operation is called on the main thread, this means that the whole user experience is stuck for several seconds, which is quite bad.
-
Why is I/O Efficiency important?
-
I/O efficiency is all about minimizing the number of actual I/O calls. This is critical because some platforms have extremely slow storage (e.g. smartphones, tablets) and because, regardless of the platforms, doing too much I/O penalizes not just your application but potentially all the applications running on the system, which is quite bad for the user experience. Finally, I/O is often expensive in terms of energy, so wasting I/O is wasting battery. -

Consequently, one of the key design choices of OS.File is to provide operations that are low-level enough that they do not hide any I/O from the developer (which could cause the developer to perform more I/O than they think) and, since not all platforms have the same features, offer system-specific information that the developer can use to optimize his algorithms for a platform.

-
-
- -

Using OS.File

- -

... from the main thread

- -

Most uses of OS.File are from the main thread. In this mode, main thread clients use the API to request off main thread file I/O.

- -
-
Calling OS.File from the main thread
-
Asynchronous, off-main thread file I/O, main thread API.
-
Calling OS.File.DirectoryIterator from the main thread
-
Asynchronous, off-main thread file directory access, main thread API.
-
- -

... from a worker thread

- -

In some cases, the main thread API for OS.File is not appropriate as it would require too much message passing, or because the code that requires file I/O is already executed on a worker thread. For this reason, API clients can also spawn their own worker threads and make use of OS.File directly from these threads.

- -
-
OS.File for workers
-
Synchronous file I/O for worker threads
-
OS.File.DirectoryIterator for workers
-
Visiting directories synchronously from a worker thread
-
- -

... composants partagés

- -
-
OS.Path et OS.Constants.Path
-
Manipulation des chemins
-
OS.File.Error
-
Représentation des erreurs liées aux fichiers
-
OS.File.Info
-
Représentation des informations du fichier (taille, date de création, etc.)
-
OS.File.DirectoryIterator.Entry
-
Informations sur les fichiers obtenues lors de la visite d'un répertoire
-
diff --git a/files/fr/mozilla/javascript_code_modules/osfile.jsm/os.file_for_the_main_thread/index.html b/files/fr/mozilla/javascript_code_modules/osfile.jsm/os.file_for_the_main_thread/index.html deleted file mode 100644 index e21a10ac20..0000000000 --- a/files/fr/mozilla/javascript_code_modules/osfile.jsm/os.file_for_the_main_thread/index.html +++ /dev/null @@ -1,1159 +0,0 @@ ---- -title: OS.File pour le thread principal -slug: Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_the_main_thread -translation_of: Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_the_main_thread ---- -

Cette page explique comment utiliser File I/O depuis le thread principal. Pour d'autres utilisations de OS.File, voir OS.File.

- -

Utilisation d'OS.File depuis le thread principal

- -

Pour importer OS.File dans votre code chrome, ajoutez les ligne suivante au début de votre script:

- -
Components.utils.import("resource://gre/modules/osfile.jsm");
- -

Pour importer OS.File dans votre code main.js, ajoutez les lignes suivantes au début de votre script:

- -
const {Cu} = require("chrome");
-
-// To read content from file
-const {TextDecoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
-
-// To read & write content to file
-const {TextDecoder, TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
- -

Promises

- -

Avant d'utiliser OS.File depuis le thread principal, vous avez besoin d'une certaine compréhension de la bibliothèque Promise.

- -

Voir la documentation object Promise pour plus de détails.

- -

OS.File fonctionne très bien avec Task.jsm.

- -

Exemple: Lire le contenu d'un fichier sous forme de texte

- -

L'extrait suivant ouvre un fichier "file.txt" et lit son contenu sous forme de chaîne, en utilisant l'encodage par défaut (utf-8).

- -

Le contenu est lu de manière asynchrone. Le résultat est une Promise.

- -
let decoder = new TextDecoder();        // This decoder can be reused for several reads
-let promise = OS.File.read("file.txt"); // Read the complete file as an array
-promise = promise.then(
-  function onSuccess(array) {
-    return decoder.decode(array);        // Convert this array to a text
-  }
-);
-
- -
Cet exemple nécessite Firefox 18 ou une version plus récente.
- -

Exemple: Ecrire une chaîne dans un fichier

- -

L'extrait suivant écrit le texte "Ceci est un texte" sous forme de chaîne dans "file.txt", en utilisant l'encodage par défaut (utf-8). Il utilise une écriture atomique pour veiller à ce que le fichier ne soit pas modifiée si, pour une raison quelconque, l'écriture ne peut pas se réaliser complètement (généralement parce que l'ordinateur est éteint, la batterie est épuisée, ou l'application est arrêtée.)

- -
let encoder = new TextEncoder();                                   // This encoder can be reused for several writes
-let array = encoder.encode("This is some text");                   // Convert the text to an array
-let promise = OS.File.writeAtomic("file.txt", array,               // Write the array atomically to "file.txt", using as temporary
-    {tmpPath: "file.txt.tmp"});                                    // buffer "file.txt.tmp".
-
-
- -

La variante suivante fait la même chose, mais échouera si "file.txt" existe déjà:

- -
let encoder = new TextEncoder();                                   // This encoder can be reused for several writes
-let array = encoder.encode("This is some text");                   // Convert the text to an array
-let promise = OS.File.writeAtomic("file.txt", array,               // Write the array atomically to "file.txt", using as temporary
-    {tmpPath: "file.txt.tmp", noOverwrite: true});                 // buffer "file.txt.tmp".
-
-
- -
Ces exemples nécessitent Firefox 19 ou une version plus récente.
- -

Exemple: Renommer un fichier

- -

Vous pouvez utiliser OS.File.move pour renommer un fichier:

- -
let promise = OS.File.move("oldname.txt", "newname.txt", {noOverwrite:true});
- -

Voici un exemple qui a rebaptise test.txt en testRenamed.txt si le fichier se trouve dans le répertoire C:\Jean\

- -
var promise = OS.File.move(OS.Path.join('C:', 'Jean', 'test.txt'), OS.Path.join('C:', 'Jean', 'testRenamed.txt'));
-promise.then(
-    function() {
-       console.log('rename successful')
-    },
-    function(aRejectReason) {
-       console.log('rename failed, aRejectReason = ', aRejectReason)
-    }
-)
- -

noOverwrite: true est important, (par défaut false) si un fichier avec le même nom existe déjà dans le répertoire, il ne sera plus là après cette opération "renommer", qui est un "mouvement".

- -

Exemple: Copier un fichier

- -

The following snippet copies file "oldname.txt" to "newname.txt". On most operating systems, this operation is handled directly by the operating system itself, which makes it as fast as possible.

- -
let promise = OS.File.copy("oldname.txt", "newname.txt");
- -
This example requires Firefox 16 or a more recent version.
- -

Exemple: Manipulation de chemin

- -

The following snippet obtains the path to file "sessionstore.js", contained in the user's profile directory.

- -
let sessionstore = OS.Path.join(OS.Constants.Path.profileDir, "sessionstore.js");
-   // Under Linux, this is generally "$HOME/.firefox/Profiles/$PROFILENAME/sessionstore.js"
-   // Under MacOS, this is generally "$HOME/Library/Application Support/Firefox/$PROFILENAME/sessionstore.js"
-   // Under Windows, this is generally "%APPDATA%\Local\temp\%PROFILENAME%"\sessionstore.js
-   // etc.
-
-
- -

Exemple: Déterminer si un fichier est un répertoire

- -

The following snippet determines if some path represents a file or a directory:

- -
let promise = OS.File.stat(somePath);
-promise = promise.then(
-  function onSuccess(stat) {
-    if (stat.isDir) {
-      // The path represents a directory
-    } else {
-      // The path represents a file, not a directory
-    }
-  },
-  function onFailure(reason) {
-    if (reason instanceof OS.File.Error && reason.becauseNoSuchFile) {
-      // The file does not exist
-    } else {
-      // Some other error
-      throw reason;
-    }
-  }
-);
-
- -

Exemple: copier un fichier par morceaux

- -

The following snippet writes a (presumably large) buffer by chunks. Note that this snippet is useful as a demonstration of complex asynchronous programming with OS.File – in most cases, function OS.File.writeAtomic is a better choice.

- -
let writeStream = function writeStream(data, outFile, chunkSize) {
-  let view = new Uint8Array(data);
-
-  let loop = function loop(pos) {                                         // Define a recursive asynchronous loop.
-    if (pos <= view.byteLength) {  // Note: Should this be pos >= view.byteLength ?
-      return Promise.resolve(true);                                       // Loop end.
-    }
-    let promise = file.write(view.subarray(pos, chunkSize));              // Write a subset of |data|
-    return promise.then(function onSuccess(bytes) {
-      return loop(pos + bytes);                                           // ... and loop.
-    });
-  };
-
-  let promise = loop(0);                                                  // Enter the loop.
-
-  promise = promise.then(function onSuccess() {                           // Once loop is complete, finalize.
-    file.close();
-  }, function onError(reason) {
-    file.close();
-    throw reason;
-  });
-  return promise;
-}
-
- -

Or a variant using Task.js (or at least the subset already present on mozilla-central):

- -
let writeStream = function writeStream(data, outFile, chunkSize) {
-  return Task.spawn(function() {
-    let view = new Uint8Array(data);
-    let pos = 0;
-    while (pos < view.byteLength) {
-      pos += yield outFile.write(view.subarray(pos, chunkSize));
-    }
-    outFile.close();
-  }).then(
-    null,
-    function onFailure(reason) {
-      outFile.close();
-      throw reason;
-    }
-  );
-}
-
- -

Exemple: Enregistrer un canvas sur le disque

- -

This exmaple uses Image to load an image from a path (note: if your path is a file on disk you must use local file; this is accomplished with OS.Path.toFileURI, which accepts a string). After image loads it then draws it to canvas, makes it a blob, and uses FileReader to turn it into ArrayBuffer(View), then uses OS.File.writeAtomic to save to disk.

- -
var img = new Image();
-img.onload = function() {
-    var canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
-    canvas.width = img.naturalWidth;
-    canvas.height = img.naturalHeight;
-    var ctx = canvas.getContext('2d');
-    ctx.drawImage(img, 0, 0);
-    (canvas.toBlobHD || canvas.toBlob).call(canvas, function(b) {
-        var r = Cc['@mozilla.org/files/filereader;1'].createInstance(Ci.nsIDOMFileReader); //new FileReader();
-        r.onloadend = function() {
-            // r.result contains the ArrayBuffer.
-            var writePath = OS.Path.join(OS.Constants.Path.desktopDir, 'savedImage.png');
-            var promise = OS.File.writeAtomic(writePath, new Uint8Array(r.result), { tmpPath: writePath + '.tmp' });
-            promise.then(
-                function(aVal) {
-                    console.log('successfully saved image to disk');
-                },
-                function(aReason) {
-                    console.log('writeAtomic failed for reason:', aReason);
-                }
-            );
-        };
-        r.readAsArrayBuffer(b);
-    }, 'image/png');
-};
-//var path = OS.Path.toFileURI(OS.Path.join(OS.Contants.Path.desktopDir, 'my.png')); //do it like this for images on disk
-var path = 'https://mozorg.cdn.mozilla.net/media/img/firefox/channel/toggler-beta.png?2013-06'; //do like this for images online
-img.src = path;
-
- -

Exemple: Ajouter au fichier

- -

This example shows how to use open, write, and close to append to a file. If the file does not exist, it is created. At the time of this writing, write does not support encoding option so the text to be written has to be encoded with TextEncoder. This example also shows the resolve value of open (an instance of OS.File, this is a file, so you can do any of the methods on it found here), write (a number indicating bytes written), and close (undefined, meaning there is no resolve value).

- -
var pth = OS.Path.join(OS.Constants.Path.desktopDir, 'app.txt');
-OS.File.open(pth, {write: true, append: true}).then(valOpen => {
-    console.log('valOpen:', valOpen);
-    var txtToAppend = 'append some text \n';
-    var txtEncoded = TextEncoder().encode(txtToAppend);
-    valOpen.write(txtEncoded).then(valWrite => {
-        console.log('valWrite:', valWrite);
-        valOpen.close().then(valClose => {
-            console.log('valClose:', valClose);
-            console.log('successfully appended');
-        });
-    });
-});
- -

Objet Global OS.File

- -

Aperçu des Méthodes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Promise<File> open(in string path, [optional] in object mode, [optional] in object options);
Promise<object> openUnique(in string path, [optional] in object options);
Promise<void> copy(in string sourcePath, in string destPath, [optional] in object options);
Promise<bool> exists(in string path);
Promise<string> getCurrentDirectory();
Promise<void> makeDir(in string path, [optional] in object options);
Promise<void> move(in string sourcePath, in string destPath);
Promise<Uint8Array> read(in string path, [optional] in object options);
Promise<void> remove(in string path, [optional] in object options);
Promise<void> removeEmptyDir(in string path, [optional] in object options);
Promise<void> removeDir(in string path, [optional] in object options);
Promise<void> setCurrentDirectory(in string path);
Promise<void> setDates(in string path, in Date|number accessDate, in Date|number modificationDate);
Promise<void> setPermissions(in string path, in object options );
Promise<File.Info> stat(in string path, [optional] in object options);
Promise<void> unixSymLink(in string targetPath, in string createPath);
Promise<void> writeAtomic(in string path, in ArrayView data, in object options);
- -

Methods

- -

OS.File.open()

- -

Use method OS.File.open() to open a file.

- -
Promise<File> open(
-  in string path,
-  [optional] in object mode,
-  [optional] in object options
-)
-
- -
Arguments
- -
-
path
-
The full native name of the file to open.
-
mode {{optional_inline()}}
-
The opening mode for the file, as an object that may contain a subset of the following fields: -
-
read
-
If true, the file will be opened for reading. Depending on other fields, it may also be opened for writing.
-
write
-
If true, the file will be opened for writing. Depending on other fields, it may also be opened for reading.
-
-
Prior to Gecko 27, unless create or truncate are set or explicit unixFlags are given, the file will be opened for appending on Unix/Linux. However, the file is not opened for appending on Windows. See bug 924858. Starting with Gecko 27, you may use the append flag instead. For an example using append see here.
-
-
truncate | trunc
-
If true, the file will be opened for writing. If the file does not exist, it will be created. If the file exists, its contents will be removed. Cannot be used with create.
-
create
-
If true, file will be opened for writing. The file must not exist. If the file already exists, throw an error. Cannot be used with truncate or existing.
-
existing
-
If true, the file must already exist. If the file does not exist, throw an error. Cannot be used with create.
-
append
-
If true, the file will be opened for appending, meaning the equivalent of .setPosition(0, POS_END) is executed before each write. The default is true, i.e. opening a file for appending. Specify append: false to open the file in regular mode.
-
-
-
options {{optional_inline()}}
-
Platform-specific options for opening the file. For advanced users only. Most users will never have need of these options. To specify options, pass an object that may contain some of the following flags: -
-
unixFlags
-
(ignored under non-Unix platforms) If specified, file opening flags, as per libc function open. If unspecified, build these flags from the contents of mode. You can build these flags from values OS.Constants.libc.O_*.
-
unixMode
-
(ignored under non-Unix platforms) If specified, file creation mode, as per libc function open. If unspecified, files are created with a default mode of 0600 (file is private to the user, the user can read and write). You can build this mode from values OS.Constants.libc.S_I*.
-
winShare
-
(ignored under non-Windows platforms) If specified, a sharing policy, as per Windows function CreateFile. If unspecified, files are opened with a default sharing policy (file is not protected against being read/written/removed by another process or another use in the same process). You can build this policy from constants OS.Constants.Win.FILE_SHARE_*.
-
winSecurity
-
(ignored under non-Windows platforms) If specified, a security policy, as per Windows function CreateFile. If unspecified, no security attributes.
-
winAccess
-
(ignored under non-Windows platforms) If specified, access mode, as per Windows function CreateFile. This also requires option winDisposition and this replaces argument mode. If unspecified, value is built from mode.
-
winDisposition
-
(ignored under non-Windows platforms) If specified, disposition mode, as per Windows function CreateFile. This also requires option winAccess and this replaces argument mode. If unspecified, value is built from mode.
-
-
-
- -
Promise resolves to
- -

An instance of OS.File representing the expected file.

- -
Note that the operating system limits the number of files that can be opened simultaneously by one process, so do not forget to close that file once you have finished it, to ensure that you are not blocking the rest of the process.
- -

When opening files for writing, they will be opened for appending unless you specify append: false in Gecko 27 and later. In Gecko 26 and earlier, on platforms other than Windows, the files will be opened for appending unless you specify explicit unixFlags or open the file with either create or truncate flags. In Gecko 26 and earlier on Windows, files will never be opened for appending.

- -

To open an existing file for writing without appending in a compatible way on all platforms in both Gecko 27 and later and Gecko 26 and earlier, you should specify both the append flag and unixFlags.

- -
// Open a file for writing without appending to it.
-
-Task.spawn(function() {
-  // Under Unix, you'll have to specify your own unixFlags for Gecko < 27 to avoid append mode.
-  var options = {};
-  if (OS.Constants.libc) {
-    // Own flags omitting O_APPEND, e.g.
-    options.unixFlags = OS.Constants.libc.O_CREAT | OS.Constants.libc.O_WRONLY;
-  }
-  // For Gecko >= 27, it is enough, but crucial, to set the correct append flag.
-  var outfile = yield OS.File.open("file.tmp", {write: true, append: false}, options);
-  try {
-    // ... do something with that file
-  } finally {
-    yield outfile.close();
-  }
-});
- -
Example of opening file and keeping it locked
- -

This uses Tasks.jsm to open a file and keep it open. When you are done with it, like in shutdown of restartless add-on, you should close the file so it becomes editable again.

- -
let options = {
-  winShare: 0 // Exclusive lock on Windows
-};
-if (OS.Constants.libc.O_EXLOCK) {
-  // Exclusive lock on *nix
-  options.unixFlags = OS.Constants.libc.O_EXLOCK;
-}
-let file = yield OS.File.open(..., options);
- -

Then when you want to unlock the file so it can be edited from other places, close the file.

- -
file.close();
- -

This example is from Stackoverflow: OS.File check last modified date before OS.read

- -

OS.File.openUnique()

- -

Creates and opens a file with a unique name. By default, generate a random hex number and use it to create a unique new file name.

- -
Promise<object> openUnique(
-  in string path,
-  [optional] in object options
-) throws OS.File.Error
- -
Arguments
- -
-
path
-
The full native name of the file to open.
-
options {{optional_inline()}}
-
Additional options for file opening. This implementation interprets the following fields: -
-
humanReadable
-
If true, create a new filename appending a decimal number, e.g., filename-1.ext, filename-2.ext. If false use hex numbers, e.g., filename-A65BC0.ext.
-
maxAttempts
-
Used to limit the amount of tries after a failed file creation. Default is 99.
-
-
-
- -
Promise resolves to
- -

An object contains a file object{file} and the path{path}.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
If the file could not be opened.
-
- -

OS.File.copy()

- -

Copy a file.

- -
void copy(
-  in string sourcePath,
-  in string destPath
-  [optional] in object options)
-throws OS.File.Error
-
- -
Arguments
- -
-
sourcePath
-
The full path of the file to copy. At the time of this writing, this function does not copy directories.
-
destPath
-
The full path of the destination. Note that this is not a directory but a file.
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields:
-
noOverwrite
-
If destPath already exists, do not overwrite it, but rather launch an exception.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist.
-
- -
Performance notes - - -
- -

OS.File.exists()

- -

Determine whether a file exists

- -
Promise<bool> exists(
-  in string path
-)
-
- -
Arguments
- -
-
path
-
The name of the file
-
- -
Promise resolves to
- -

true if the file exists, false otherwise

- -
Performance note: For the sake of performance, you should avoid this function whenever possible. For instance, rather than calling exists() to determine if a directory should be created with makeDir, you should rather create the directory with makeDir and catch the error if the directory exists. This will ensure that you only need to perform one I/O operation rather than two.
- -

OS.File.getCurrentDirectory()

- -

Return the current directory

- -
Promise<string> getCurrentDirectory()
- -
Promise resolves to
- -

The path to the current directory.

- -
-

Safety note: Recall that the current directory can change during the execution of the process. Therefore, the information returned by this function may be false by the time you receive it.

-
- -

OS.File.makeDir()

- -

Create a new directory

- -
Promise<void> makeDir(
-  in string path,
-  [optional] in object options
-) throws OS.File.Error
- -
Arguments
- -
-
path
-
The full name of the directory to create.
-
options {{optional_inline()}}
-
Options for creating the directory. To specify options, pass an object that may contain some of the following flags:
-
ignoreExisting
-
If true, succeed even if the directory already exists (default behavior). Otherwise, fail if the directory already exists. NOTE: If from is specified then even if ignoreExisting is specified as false, it will not fail due to pre-existence of directories, because the from option tells makeDir to make the folders if not found.
-
unixMode
-
(ignored under non-Unix platforms) If specified, file creation mode, as per libc function mkdir. If unspecified, directories are created with a default mode of 0600 (file is private to the user, the user can read and write). You can build this mode from values OS.Constants.libc.S_I*.
-
winSecurity
-
(ignored under non-Windows platforms) If specified, a security policy, as per Windows function CreateDirectory. If unspecified, no security attributes.
-
from
-
If specified, the call to makeDir creates all the ancestors of path that are descendents of from. Note that from and its existing descendents must be user-writeable and that path must be a descendent of from.
-
- -

OS.File.move()

- -

Move a file.

- -
Promise<void> move(
-  in string sourcePath,
-  in string destPath
-  [optional] in object options
-)
- -
Arguments
- -
-
sourcePath
-
The full path of the file to move. At the time of this writing, the behavior of this function is unspecified if sourcePath is a directory.
-
destPath
-
The full path of the destination. At the time of this writing, the behavior of this function is unspecified if destPath is a directory.
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields: -
-
noOverwrite
-
If destPath already exists, do not overwrite it, but rather launch an exception.
-
noCopy
-
If moving the file would require a copy (i.e. if the destination path resides on another drive/device/file system as the source path), fail.
-
-
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist.
-
- -
Performance note: This operation is OS-optimized under OS X, Linux/Android, and Windows.
- -

OS.File.read()

- -

Read the contents of a file

- -
Promise<Uint8Array> read(
-  in string path,
-  [optional] in number bytes
-)
-
- -
Arguments
- -
-
path
-
The full path to the file to read.
-
bytes {{optional_inline()}}
-
The number of bytes to read. If unspecified, read the complete file.
-
- -
Promise resolves to
- -

An array holding bytes bytes (or less if the file did not contain as many bytes).

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist or if the process does not have the authorization to read it.
-
- -
-
-
As of Firefox 30, OS.File.read() takes an options object as second argument.
-
- -
Promise<Uint8Array> read(
-  in string path,
-  [optional] in object options
-)
- -
Arguments
- -
-
path
-
The full path to the file to read.
-
- -
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields: -
-
bytes
-
The number of bytes to read. If unspecified, read the complete file.
-
encoding
-
Instead of using TextDecoder, you can supply a string to this option. For example, instead of: -
let decoder = new TextDecoder();
-let promise = OS.File.read("file.txt");
-promise = promise.then(
-  function onSuccess(array) {
-    return decoder.decode(array);        // Convert this array to a text
-  }
-);
- You can simply do: - -
let promise = OS.File.read("file.txt", { encoding: "utf-8" });
-promise = promise.then(
-  function onSuccess(text) {
-    return text;        // text is a string
-  }
-);
-
-
-
-
-
- -

OS.File.remove()

- -

Remove an existing file.

- -
Promise<void> remove(
-  in string path,
-  [optional] in object options
-)
-
- -
Arguments
- -
-
path
-
A string representing the path of the file to remove. At the time of this writing, this function does not remove directories.
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields:
-
ignoreAbsent
-
Succeed if the file doesn't exist.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist.
-
- -

OS.File.removeEmptyDir()

- -

Remove an empty directory

- -
Promise<void> removeEmptyDir(
-  in string path,
-  [optional] in object options
-)
-
- -
Arguments
- -
-
path
-
The complete path to the directory.
-
options {{optional_inline()}}
-
An optional object used to control the behavior of this function. You may pass an object with a subset of the following fields:
-
ignoreAbsent
-
Succeed if the directory doesn't exist.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file does not exist.
-
- -

OS.File.removeDir()

- -

Remove an existing directory and its contents.

- -
Promise<void> removeDir(
-  in string path,
-  [optional] in object options
-)
-
- -
Arguments
- -
-
path
-
A string representing the name of the file to remove.
-
options
-
An object that may contain the following fields
-
ignoreAbsent
-
If false, this function will throw an error if the directory doesn't exist.
-
ignorePermissions
-
If true, this function will remove the directory even when lacking write permissions.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if path isn't a directory.
-
- -

OS.File.setCurrentDirectory()

- -

Change the current directory of the process.

- -
Use with extreme caution: This API may be useful for application developers but must not be used by add-ons, as it changes the state of the complete application.
- -
Promise<void> setCurrentDirectory(
-  in string path
-)
- -
Arguments
- -
-
path
-
The complete path to use as current directory.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing directory.
-
- -

OS.File.setDates()

- -

Set the last access and modification date of the file.

- -

The time stamp resolution is one second at best, but might be worse depending on the platform, file system, etc.

- -
Promise<void> setDates(
-  in string path,
-  in Date|number accessDate,
-  in Date|number modificationDate
-)
- -
Arguments
- -
-
path
-
The complete path to the file.
-
accessDate
-
The last access date. If numeric, milliseconds since epoch. If omitted or null, the current date will be used.
-
modificationDate
-
The last modification date. If numeric, milliseconds since epoch. If omitted or null, the current date will be used.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing file.
-
- -
-
-

OS.File.setPermissions()

- -

Sets the file's access permission bits.

- -
Promise<void> setPermissions(
-  in string path,
-  in object options
-)
- -
Arguments
-
-
path
-
The complete path to the file.
-
options
-
The new attributes to set
-
winAttributes
-
This is an object with following optional keys. Ignored under non-Windows platforms.
-
hidden
-
Boolean. Set to true to make the target hidden, or false to make it visible.
-
readOnly
-
Boolean. Set to true to make the target "read only".
-
system
-
Boolean. Toggles the "system" attribute, this is equivalent .
-
unixMode
-
Number. This is an number can be created with the constants available in OS.Constants.libc.S_I* or OS.Constants.libc.S_O*. Ignored under non-Unix platforms. To make a file hidden on Unix based platforms, including Mac, simply rename the file with OS.File.move to have "." at the start of the file name.
-
unixHonorUmask
-
Toggles the OS.Constants.Sys.umask flag. Ignored under non-Unix platforms..
-
-
Promise can be rejected with
-
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing file.
-
- -

OS.File.stat()

- -

Obtain information about a file, such as size, creation date, etc.

- -
Promise<File.Info> stat(
-  in string path
-)
- -
Arguments
- -
-
path
-
The complete path to the file.
-
- -
Promise resolves to
- -

An instance of File.Info holding information about a file.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing file.
-
- -
Performance Note: If the file is already opened, calling method stat() is much faster than calling function OS.File.stat().
- -

OS.File.unixSymLink()

- -

Create a symoblic link file, also known as "Alias" files on Mac OS. This is similar to "Shortcut" files on Windows systems. This function is specific to UNIX baed systems such as Linux and Mac OS X.

- -
Promise<undefined> unixSymLink(
-  in string pathTarget,
-  in string pathCreate
-)
- -
Arguments
- -
-
pathTarget
-
The complete path to the file that should be launced by the symbolic link.
-
- -
-
pathCreate
-
The complete path to the file that should launch target. The file extension should be .link.
-
- -
Promise resolves to
- -

undefined

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error. If the file exists already, unixErrorco of 17 will be returned.
-
- -

OS.File.writeAtomic()

- -

Write data to a file, atomically.

- -

Unlike a regular write, this operation ensures that, until the contents are fully written, the destination file is not modified.

- -
Promise<void> writeAtomic(
-  in string path,
-  in ArrayBufferView data,
-  in object options
-)
- -
Arguments
- -
-
path
-
The full path to the destination file.
-
data
-
An ArrayBufferView holding the data to write.
-
{{ Fx_minversion_note("37.0", "As of Firefox 37, this method will neuter the array buffer.") }}
-
 
-
options
-
An object that may contain the following fields
-
tmpPath
-
If null or unspecified, write the data directly to path. If specified, write the data to a temporary file called tmpPath and, once the write is complete, rename the file to replace path. Performing this operation is a little slower but also a little safer. {{ Fx_minversion_note("25.0", "tmpPath is required in Firefox 24 or lower version, but optional in Firefox 25 or higher version") }}
-
noOverwrite
-
If specified and true, and if path already exists, this function will throw an error without overwriting path.
-
flush
-
If false or unspecified, return immediately once the write is complete. If true, before writing, force the operating system to write its internal disk buffers to the disk. This is considerably slower (not just for the application but for the whole system) and more battery expensive but also safer: if the system shuts down improperly (typically due to a kernel freeze or a power failure) or if the device is disconnected before the buffer is flushed, the file has more chances of not being corrupted.
-
backupTo
-
Available since Firefox 30. If specified, backup the destination file as backupTo. Note that this function renames the destination file before overwriting it. If the process or the operating system freezes or crashes during the short window between these operations, the destination file will have been moved to its backup.
-
encoding
-
Available since Firefox 22. Instead of using TextEncoder, you can supply a string to this option. For example, instead of: -
let encoder = new TextEncoder();
-let array = encoder.encode("This is some text");
-let promise = OS.File.writeAtomic("file.txt", array, {tmpPath: "file.txt.tmp"});
- You can simply do: - -
let promise = OS.File.writeAtomic("file.txt", "This is some text", { encoding: "utf-8", tmpPath: "file.txt.tmp" })
-
-
- -
Limitations
-In a few extreme cases (hardware failure during the write, user unplugging disk during the write, etc.), data may be corrupted. If your data is user-critical (e.g., preferences, application data), you may wish to consider adding options tmpPath and/or flush to reduce the likelihood of corruption, as detailed above. Note that no combination of options can be guaranteed to totally eliminate the risk of corruption.
- -
Use with caution: Modifying the contents of data before the operation is complete is a very bad idea.
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the destination file cannot be overwritten, or if tmpPath is not on the same device as path.
-
- -

Instances of OS.File

- -

To obtain an instance of OS.File, use function OS.File.open.

- -

Methods overview

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Promise<void> close()
Promise<void> flush()
Promise<number> getPosition()
Promise<number> read([optional] in number bytes)
Promise<void> setDates(in Date|number accessDate, in Date|number modificationDate);
Promise<void> setPosition(in number bytes)
Promise<File.Info> stat()
Promise<number> write(in ArrayBufferView source, [optional] in object options)
- -

Methods

- -

close()

- -

Close a file and release any associated resource.

- -

Once the file is closed, any attempt to call methods of the file object will raise an error.

- -

An example is seen here. In this example the contents is not written to file until .close is called.

- -
Note that the operating system limits the number of files that can be opened simultaneously by one process, so do not forget to close that file once you have finished it to make sure that you are not blocking the rest of the process.
- -
Promise<void> close()
- -

flush()

- -

Flushes the file's internal buffers, ensuring that all data still in these buffers is now written to disk.

- -

Disk flushes are very expensive and therefore should be used carefully, sparingly, and only in scenarios where it is vital that data survives system crashes. Even though the function will be executed off the main-thread, it might still affect the overall performance of any running application.

- -
Promise<void> flush()
- -

getPosition()

- -

Return the current position in the file.

- -
Promise<number> getPosition()
-
- -
Promise resolves to
- -

The current position in the file, as a number of bytes from the start.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
If the file is closed.
-
- -

read()

- -

Read bytes from this file to a new buffer. Bytes are read from the current position in the file and the position is advanced accordingly.

- -
Promise<Uint8Array> read(
-  [optional] in number bytes
-)
- -
Arguments
- -
-
bytes
-
If specified, read bytes bytes, or less if the file does not contain that many bytes. If unspecified, read all the remaining bytes from this file.
-
- -
Promise resolves to
- -

An array containing the bytes read.

- -
If you need to convert the result of this function to a string, you may do so by using the StringEncoding API.
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of I/O error.
-
- -

setDates()

- -

Set the last access and modification date of the file.

- -

The time stamp resolution is one second at best, but might be worse depending on the platform, file system, etc.

- -
Promise<void> setDates(
-  in Date|number accessDate,
-  in Date|number modificationDate
-)
- -
Arguments
- -
-
accessDate
-
The last access date. If numeric, milliseconds since epoch. If omitted or null, the current date will be used.
-
modificationDate
-
The last modification date. If numeric, milliseconds since epoch. If omitted or null, the current date will be used.
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the path does not represent an existing file.
-
- -

setPosition()

- -

Change the current position in the file.

- -
Promise<void> setPosition(
-  in number offset,
-  in object origin
-)
-
- -
Arguments
- -
-
offset
-
- -
-
The new position, as a number of bytes from the origin.
-
origin
-
One of the following: -
    -
  • OS.File.POS_START (bytes are counted from the start of the file)
  • -
  • OS.File.POS_CUR (bytes are counted from the current position in the file)
  • -
  • OS.File.POS_END (bytes are counted from the end of the file)
  • -
-
-
- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the new position is before the start of the file, or if the file is closed.
-
- -

stat()

- -

Obtain information about the file, such as size, creation date, etc.

- -
Promise<File.Info> stat()
- -
Promise resolves to
- -

An instance of File.Info holding information about the file.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any error, in particular if the file is closed.
-
- -

write()

- -

Write bytes from a buffer to this file.

- -

Note that, by default, this function may perform several I/O operations to ensure that the buffer is fully written.

- -

An example is seen here.

- -
Promise<number> write(
-  in ArrayBufferView source
-  [optional] in object options
-)
- -
Arguments
- -
-
source
-
The array in which the the bytes are stored.
-
{{ Fx_minversion_note("37.0", "As of Firefox 37, this method will neuter the array buffer.") }}
-
options {{optional_inline()}}
-
An object that may contain some of the following fields:
-
bytes
-
An upper bound to the number of bytes to write to the file. If unspecified, write up to source.byteLength bytes. If specified, this must be less than source.byteLength.
-
- -
Promise resolves to
- -

The number of bytes effectively written to the file.

- -
Promise can be rejected with
- -
-
OS.File.Error
-
In case of any I/O error.
-
TypeError
-
If options.bytes is specified and is larger than source.byteLength.
-
diff --git a/files/fr/mozilla/javascript_code_modules/services.jsm/index.html b/files/fr/mozilla/javascript_code_modules/services.jsm/index.html deleted file mode 100644 index 5db295d311..0000000000 --- a/files/fr/mozilla/javascript_code_modules/services.jsm/index.html +++ /dev/null @@ -1,283 +0,0 @@ ---- -title: Services.jsm -slug: Mozilla/JavaScript_code_modules/Services.jsm -tags: - - Add-ons - - Extensions - - Interface - - JavaScript - - Modules - - Services - - XPCOM -translation_of: Mozilla/JavaScript_code_modules/Services.jsm ---- -

{{ gecko_minversion_header("2") }}

- -

Le service Sercices.jsm Javascript module code offre un large assortiment de getters paresseux qui simplifient les processus d'obtention la reference des services communement utilisé.

- -

Pour l'utiliser, vous devez en premier importer le code module dans l'environement Javascript: 

- -
Components.utils.import("resource://gre/modules/Services.jsm");
-
- -

Then you can obtain references to services by simply accessing them from the Services object exported by the code module. For example, to obtain a reference to the preferences service:

- -
var prefsService = Services.prefs;
-
- -

Provided service getters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Service accessorService interfaceService name
androidBridge{{ interface("nsIAndroidBridge") }}1
appinfo{{ interface("nsIXULAppInfo") }}
- {{ interface("nsIXULRuntime") }}
Application information service
appShell{{ interface("nsIAppShellService") }}Application shell service
blocklist{{ interface("nsIBlocklistService") }}Blocklist service
cache{{ interface("nsICacheService") }}Cache service
cache2{{ interface("nsICacheStorageService") }}Cache storage service
clipboard{{ interface("nsIClipboard") }}Clipboard
console{{ interface("nsIConsoleService") }}Error console service
contentPrefs{{ interface("nsIContentPrefService") }}Content Preferences service
cookies{{ interface("nsICookieManager2") }}Cookie Manager 2 service
cpmm{{ interface("nsIMessageSender") }}Child process message manager4
crashmanagerCrashManager.jsm 
dirsvc{{ interface("nsIDirectoryService") }}
- {{ interface("nsIProperties") }}
Directory service
domStorageManager{{ interface("nsIDOMStorageManager") }}DOM Storage Manager
DOMRequest{{ interface("nsIDOMRequestService") }}DOMRequest service
downloads{{ interface("nsIDownloadManager") }}Download manager
droppedLinkHandler{{ interface("nsIDroppedLinkHandler") }}Dropped link handler service
els{{ interface("nsIEventListenerService") }}Event listener service
eTLD{{ interface("nsIEffectiveTLDService") }}EffectiveTLD service
focus{{ interface("nsIFocusManager") }}Focus manager
io{{ interface("nsIIOService") }}
- {{ interface("nsIIOService2") }}
I/O Service
locale{{ interface("nsILocaleService") }}Locale service
logins{{ interface("nsILoginManager") }}Password Manager service
metro{{ interface("nsIWinMetroUtils") }}2
mm{{ interface("nsIMessageBroadcaster") }}
- {{ interface("nsIFrameScriptLoader") }}
Global frame message manager3
obs{{ interface("nsIObserverService") }}Observer service
perms{{ interface("nsIPermissionManager") }}Permission manager service
ppmm{{ interface("nsIMessageBroadcaster") }}
- {{ interface("nsIProcessScriptLoader") }}
Global parent process message manager3
prefs{{ interface("nsIPrefBranch") }}
- {{ interface("nsIPrefBranch2") }}
- {{ interface("nsIPrefService") }}
Preferences service
prompt{{ interface("nsIPromptService") }}Prompt service
scriptloader{{ interface("mozIJSSubScriptLoader") }}JavaScript subscript loader service
scriptSecurityManager{{ interface("nsIScriptSecurityManager") }}Script security manager
search{{ interface("nsIBrowserSearchService") }}Browser search service
startup{{ interface("nsIAppStartup") }}Application startup service
storage{{ interface("mozIStorageService") }}Storage API service
strings{{ interface("nsIStringBundleService") }}String bundle service
sysinfo{{ interface("nsIPropertyBag2") }}System info service
telemetry{{ interface("nsITelemetry") }}Telemetry service
tm{{ interface("nsIThreadManager") }}Thread Manager service
uriFixup{{ interface("nsIURIFixup") }}URI Fixup service
urlFormatter{{ interface("nsIURLFormatter") }}URL Formatter service
vc{{ interface("nsIVersionComparator") }}Version comparator service
wm{{ interface("nsIWindowMediator") }}Window mediator service
ww{{ interface("nsIWindowWatcher") }}Window watcher service
- -

1 Mobile only
- 2 Windows only
- 3 Main process only
- 4 Child process only

- -

See also

- - diff --git a/files/fr/mozilla/javascript_code_modules/sqlite.jsm/index.html b/files/fr/mozilla/javascript_code_modules/sqlite.jsm/index.html deleted file mode 100644 index bf799c2781..0000000000 --- a/files/fr/mozilla/javascript_code_modules/sqlite.jsm/index.html +++ /dev/null @@ -1,360 +0,0 @@ ---- -title: Sqlite.jsm -slug: Mozilla/JavaScript_code_modules/Sqlite.jsm -translation_of: Mozilla/JavaScript_code_modules/Sqlite.jsm ---- -

{{ gecko_minversion_header("20.0") }}

- -

Le module de code JavaScript Sqlite.jsm offre une interface de stockage/SQLite. Sqlite.jsm fonctionne avec des interfaces XPCOM de stockage de bas niveau:

- - - -

{{ note("Le module de code de Javascript Sqlite.jsm peut seulement être utilisé du chrome.") }}

- -

Avant de pouvoir utiliser ce module, vous devez l'importer dans votre champ d'application:

- -
let { Cu } = require('chrome')
-Cu.import("resource://gre/modules/Sqlite.jsm")
- -

Obtention d'une connexion

- -

Sqlite.jsm exporte le symbole Sqlite. Ce symbole est un objet avec une seule fonction: openConnection. Cette fonction prend un objet dictionnaire définissant les options de connexion:

- -
-
path
-
(Obligatoire) Le fichier de base de données à ouvrir. Cela peut être un chemin absolu ou relatif. Si un chemin relatif est donné, il est interprété comme relatif au répertoire du profil actuel. Si le chemin n'existe pas, une nouvelle base de données SQLite sera créé. La nom se termine généralement par .sqlite.
-
sharedMemoryCache
-
(En option) booléenne indiquant si plusieurs connexions à la base de données partagent la même mémoire cache. Toutefois, le partage nécessite également des connexions pour obtenir un verrou, rendant éventuellement l'accès de base de données plus lente. Par défaut, true.
-
shrinkMemoryOnConnectionIdleMS
-
(En option) Si défini, le de connexion va tenter de minimiser son utilisation de la mémoire après un grand nombre millisecondes de connexion inactive. La connexion est inactive lorsque aucun états n'est exécuter. Noter que ceci n'est pas une minuterie qui pourrait se déclencher pendant que l'Application est active.
-
- -

openConnection(options) retourne une promise d'une instance de connexion ouverte ou est rejetée si une erreur survient lors de l'ouverture de la base de données.

- -

Voici un exemple:

- -
let { Cu } = require('chrome')
-Cu.import("resource://gre/modules/Sqlite.jsm");
-
-Sqlite.openConnection({ path: "myDatabase.sqlite", sharedMemoryCache: false }).then(
-  function onConnection(connection) {
-    // connection is the opened SQLite connection (see below for API).
-  },
-  function onError(error) {
-    // The connection could not be opened. error is an Error describing what went wrong.
-  }
-);
-
- -

Utilisation des connexions ouvertes

- -

Les connexions ouvertes sont ce que vous interfacer avec Sqlite.jsm. Les sections suivantes détaillent l'API d'une instance de connexion ouverte.

- -

Gestion des connexions

- -

Ces API sont utilisées pour gérer et vérifier l'état de la connexion.

- -

close()

- -

Ferme la connexion de base de données. Doit être appelé pour chaque connexion ouverte.

- -

Cette fonction retourne une promise qui sera résolu lorsque la base de données sera fermée.

- -

Si une transaction est en cours d'execution au moment où cette fonction est appelée, la transaction sera annulée.

- -

Si des déclarations sont en cours au moment où cette fonction est appelée, elles seront annulées.

- -

Les utilisateurs ne doivent pas tenter d'utiliser la connexion après avoir appelé cette méthode que la connexion sera inutilisable.

- -

clone (readOnly)

- -

Cette fonction retourne un clone de la connexion-promise actuelle.

- -

Ces fonctions reçoivent l' argument:

- -
-
readOnly
-
(En option) Si true le clone sera en lecture seule, false par défaut. Si la connexion d'origine est déjà en lecture seule, le clone le sera, indépendamment de cette option. Si la connexion d'origine utilise le cache partagé, ce paramètre sera ignoré et le clone sera aussi privilégié que la connexion d'origine.
-
- -

transactionInProgress

- -

Cette propriété booléenne indique si une opération est en cours. Cela est rarement nécessaire par les appelants externes.

- -

shrinkMemory()

- -

Cette fonction peut être appelée pour diminuer l'utilisation de la mémoire de la connexion. Ceci est un wrapper utilisé dans le PRAGMA shrink_memory, qui impose à SQLite la réduiction d'utilisation de la mémoire (par les caches de compensation, etc.).

- -

Elle peut rendre votre base de données plus lent. Par conséquent, il faut être prudent avant d'appeler cette fonction.

- -

Cela renvoie une promise qui est résolu lorsque l'opération est terminée.

- -

discardCachedStatements()

- -

Cette fonction est utilisée pour éliminer les instances d'instructions mises en cache, ce qui libère la mémoire dans le processus. Les déclarations de cache actifs ne seront pas effacées. Peut être appeler à tout moment.

- -

Cela renvoie le nombre de déclarations mises en cache qui ont été rejetés.

- -

Table et gestion du schéma

- -

Ces API traitent de la gestion des tables et le schéma de base de données.

- -

getSchemaVersion()

- -

La version définie par l'utilisateur associé au schéma de la base de données actuelle. Retourne 0 si aucune version de schéma a été défini.

- -

setSchemaVersion(value)

- -

Definie la valeur value de la nouvelle version associée au schéma de la base de données actuelle. Ceci est un wrapper autour de PRAGMA user_version.

- -

tableExists(name)

- -

Cette fonction détermine si une table existe dans la base de données actuelle. Elle renvoie une promise qui est résolu avec une valeur booléenne indiquant si la table existe.

- -

indexExists(name)

- -

Cette fonction détermine si un index nommé existe dans la base de données actuelle. Elle renvoie une promesse qui est résolu avec une valeur booléenne indiquant si l'index existe.

- -

Déclaration d'exécution

- -

Ces API facilitent l'exécution des instructions de connexion.

- -

executeCached(sql, params, onRow)

- -

execute(sql, params, onRow)

- -

Ces fonctions similaires sont utilisés pour exécuter une instruction SQL unique sur la connexion. Comme vous l'avez deviné par le nom, il y a 2 options: mises en cache et non mis en cache. En dehors de cela, ils se comportent de manière identique.

- -

Ces fonctions reçoivent les arguments suivants:

- -
-
sql
-
(Obligatoire) chaîne SQL à exécuter. Le point-virgule final n'est pas nécessaire.
-
params
-
(En option) Paramètres liés à cette déclaration. Cela peut être un tableau ou un objet. Voir les notes ci-dessous.
-
onRow
-
(En option) Fonction qui est appelée lorsqu'une ligne a été reçue.
-
- -

La valeur de retour est une promise qui est résolu lorsque l'instruction a terminé l'exécution.

- -

Quand une instruction est exécutée via executeCached(), l'objet instruction préparée est mis en cache à l'intérieur de la connexion ouverte. La prochaine fois que cette même instruction SQL est exécutée (sql argument est identique à celui passé avant), l'ancien objet de la déclaration est réutilisée. Cela permet d'économiser du temps associé à l'analyse de l'instruction SQL et la création d'un nouvel objet de déclaration. Inconvénient: l'objet de la déclaration en cache persiste dans la connexion ouverte, en prenant de la mémoire.

- -

Quand une instruction est exécutée via execute(), l'objet de la déclaration sous-jacente est jeté au terme de l'exécution.

- -

executeCached() est recommandé pour les déclarations qui seront exécutées plusieurs fois. execute() est recommandé pour les déclarations qui seront exécutées rarement ou une fois.

- -

Noter que les utilisateurs ne doivent pas préparer les états manuellement avant l'exécution. Il suffit d'appeler executeCached() et la déclaration sera préparée pour vous automatiquement.

- -

Les paramètres peuvent être liés à la déclaration faite par la définition de l'argument params . Cet argument peut être un tableau de paramètres ordonnées ou un objet de type dicionnaire. Si la déclaration ne contient pas de paramètres liés, cet argument peut être omis ou spécifié comme nulle.

- -

{{ note("Les utilisateurs sont fortement encouragés à utiliser des paramètres liés au lieu de créer dynamiquement des instructions SQL pour des raisons de sécurité.") }}

- -
{{ note("Les utilisateurs sont encouragés à passer des objets type dictionnaire plutôt que des tableaux pour les paramètres liés car ils empêchent de s'emeler les pinceaux.") }}
- -
 
- -
Lorsque onRow n'est pas défini, les résultats complets de l'opération sont tamponnés avant que l'appelant soit informé de la déclaration d'achèvement. Pour INSERT, UPDATE et DELETE, ce n'est pas pertinentes. Cependant, il peut y avoir des conséquences importante pour SELECT . Si votre déclaration SELECT retourne beaucoup de données, cette mise en mémoire tampon peut entraîner une utilisation excessive de la mémoire. Par conséquent, il est recommandé d'utiliser onRow avec SELECT.
- -
-
 
- -
Si StopIteration est emis lors de l'exécution d'un gestionnaire onRow, l'exécution de l'instruction est immédiatement annulée. Les lignes suivantes ne seront pas traitées. La promise est résolu immédiatement.
- -
 
- -
Si une exception StopIteration est levée par le gestionnaire onRow , l'exception est enregistré et le traitement des lignes suivantes se poursuit normalement. La promise est toujours résolue (pas rejetée).
- -

La promise sera rejeté avec une Error , si la déclaration n'a pas terminé l'exécution complète. L'Error peut avoir une propriété errors. Si elle est définie, ce sera un tableau d'objets décrivant les erreurs. Chaque objet possède les propriétés result et message. result est un code d'erreur numérique et message est une chaîne décrivant le problème.

- -

Si onRow est spécifié, la promise sera résolu avec un booléen indiquant si le gestionnaire onRow a été appelé. Sinon, la valeur réglée sera un tableau de mozIStorageRow .

- -

executeTransaction(func, type)

- -

Cette fonction est utilisée pour exécuter une transaction de base de données. Une transaction est une série de déclarations connexes traités comme une seule unité fonctionnelle. Si la transaction réussit, toutes les déclarations contenues dedans sont engagés comme une seule unité. Si la transaction échoue, la base de données revient à son état avant le début de la transaction.

- -

Cette fonction reçoit les arguments suivants:

- -
-
func
-
La fonction définissant le corps de la transaction.
-
type
-
Le type de transaction à effectuer. Ce doit être l'une des constantes de TRANSACTION_* sur l'instance de connexion ouverte. Les valeurs valides sont TRANSACTION_DEFERRED , TRANSACTION_IMMEDIATE , TRANSACTION_EXCLUSIVE . Consultez la documentation SQLite pour leur signification. La valeur par défaut est TRANSACTION_DEFERRED.
-
- -

La fonction passée est une fonction de générateur compatible Task.jsm. Lorsqu'elle est appelée, la fonction reçoit comme argument l'instance de connexion actuelle. Cette fonction de générateur devrait produire des promises, probablement ceux qui sont renvoyés en appelant executeCached() et execute().

- -

Si nous arrivons à la fin de la fonction de générateur sans erreur, la transaction est validée. Si une erreur se produit, la transaction est abandonnée.

- -

La valeur retournée par cette fonction est une promise qui est résolu lorsque la transaction a été exécutée ou rejetée si la transaction a été annulée.

- -

Exemples

- -

Open, Execute, Close

- -

Dans cet exemple, nous ouvrons une connexion, exécutons une instruction simple, puis fermons la connexion.

- -
Sqlite.openConnection({path: "MyDB.sqlite"}).then(
-  function onOpen(conn) {
-    conn.execute("SELECT 1").then(
-      function onStatementComplete(result) {
-        conn.close().then(
-          function onClose() {
-            alert("We are done!");
-          }
-        )
-      }
-    )
-  }
-)
-
- -

Ce n'est pas un excellent exemple parce qu'il ne comprend pas la gestion des erreurs et est un peu difficile à lire.

- -

Voici la même chose mais avec Task.jsm:

- -
Task.spawn(function* demoDatabase() {
-  let conn = yield Sqlite.openConnection({path: "MyDB.sqlite"});
-
-  try {
-    let result = yield conn.execute("SELECT 1");
-  } finally {
-    yield conn.close();
-  }
-});
- -

Bound Parameters

- -

Voici quelques exemples montrant des paramètres liés. Supposons que nous ouvrons une connexion avec la variable conn.

- -
let dataToInsert = [
-  ["foo", "bar"],
-  ["biz", "baz"],
-  ["yo", "ho"],
-];
-
-Task.spawn(function* doInsert() {
-  for (let data of dataToInsert) {
-    yield conn.executeCached("INSERT INTO myTable VALUES (?, ?)", data);
-  }
-});
-
- -

Et la même chose avec des paramètres nommés.

- -
let dataToInsert = [
-  {paramA: "foo", paramB: "bar"},
-  {paramA: "biz", paramB: "baz"},
-  {paramA: "yo", paramB: "ho"},
-];
-
-Task.spawn(function* doInsert() {
-  for (let data of dataToInsert) {
-    yield conn.executeCached("INSERT INTO myTable VALUES (:paramA, :paramB)", data);
-  }
-});
- -

Transactions

- -

Ces exemples montrent comment fonctionnent les transactions.

- -
conn.executeTransaction(function* simpleTransaction() {
-  yield conn.execute("INSERT INTO myTable VALUES (?, ?)", ["foo", "bar"]);
-  yield conn.execute("INSERT INTO myTable VALUES (?, ?)", ["biz", "baz"]);
-});
- -

L'exemple ci-dessus se traduira par 2 instructions INSERT dans une transaction différée (en supposant que les inserts procèdent sans erreur, bien sûr).

- -

Voici un exemple où nous voulons forcer une annulation de la transaction.

- -
conn.executeTransaction(function* complexTransaction() {
-  yield conn.execute("INSERT INTO myTable VALUES (?, ?)", ["foo", "bar"]);
-  let data = yield conn.execute("SELECT * FROM myTable");
-  if (data.length < 5) {
-    throw new Error("We don't have the expected 5 rows to perform the next operation!");
-  }
-
-  // ...
-});
- -

Sélection et retour des données

- -

Ces exemples montrent comment accéder aux données qui sont retournées.

- -

Cet exemple montre plusieurs lignes d'une table retournées en utilisant le paramètre onRow.

- -
let accounts = [];
-let accountId, userName;
-
-let statement = "SELECT account_id, username FROM accounts ORDER BY username ASC";
-
-conn.executeCached(statement, null, function(row) {
-  accountId = row.getResultByName("account_id");
-  userName = row.getResultByName("username");
-  accounts.push({ accountId: accountId, userName: userName });
-}).then(function onStatementComplete(result) {
-  // All accounts returned successfully, so do something with them.
-  console.log(result); // It worked!
-  if (callback) {
-    callback(null, accounts);
-  }
-},
-function onError(err) {
-  // An error occurred.
-  console.log(err); // Error, Oh noes!
-  if (callback) {
-    callback(err);
-  }
-});
- -
-

Remarque: les> paramètres then peuvent être des fonctions anonymes (i.e. function() ) , les seulements nomées sont onStatementComplete et onError pour la lisibilité.

-
- -

Cet exemple démontre la récupération d'une ligne sans utiliser le paramètre onRow, en utilisant le résultat de conn.execute. Cet exemple montre également la récupération de la clé primaire de la dernière ligne insérée.

- -
Task.spawn(function* () {
-  try {
-    conn = yield Sqlite.openConnection({ path: dbFile.path });
-
-    let statement = "INSERT INTO accounts (username, details) VALUES (:username, :details)"
-    let params = { username:"LordBusiness", details: "All I'm asking for is total perfection." };
-
-    yield conn.execute(statement,params);
-
-    // Get accountId of the INSERT.
-    statement = "SELECT last_insert_rowid() AS lastInsertRowID";
-    result = yield conn.execute(statement);
-
-    // Only one row is returned.
-    let row = result[0];
-    let accountId = row.getResultByName("lastInsertRowID");
-
-    if (callback) {
-      callback(null, accountId);
-    }
-  } catch (err) {
-    if (callback) {
-      callback(err);
-    }
-  } finally {
-    conn.close();
-  }
-});
- -
-

Remarque: La valeur retournée par last_insert_rowid() l'est par connexion, de sorte que vous devrez peut-être ouvrir des connexions séparées lorsque vous faites plusieurs INSERT à différents endroits, pour être sûr que l'identifiant de ligne qui est retourné corresponde.

-
- -

Voir aussi

- - diff --git a/files/fr/mozilla/localization/index.html b/files/fr/mozilla/localization/index.html deleted file mode 100644 index 28764f5298..0000000000 --- a/files/fr/mozilla/localization/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Localisation -slug: Mozilla/Localization -tags: - - Localisation - - Mozilla - - Paramètres régionaux - - Traduction - - l10n -translation_of: Mozilla/Localization ---- -

La localisation (L10n) est le processus de traduction de l’interface utilisateur d’un logiciel d’une langue à une autre, en l’adaptant à la culture étrangère. Ces ressources sont destinées à tous ceux intéressés par les aspects techniques de la localisation. Elles concernent aussi bien les développeurs que les autres contributeurs.

- - - -

Voir aussi

- -
-
Localisation de MDN
-
Cette ressource couvre la localisation de la documentation ici, sur MDN
-
Localization des applications
-
Cet ensemble de documents s'applique plus spécifiquement à la localisation d'applications, y compris les applications Firefox OS.
-
L10n
-
Documentation de référence pour l'API L10n utilisée par Mozilla pour localiser Firefox OS.
-
diff --git a/files/fr/mozilla/localization/index/index.html b/files/fr/mozilla/localization/index/index.html deleted file mode 100644 index 5176c7de8f..0000000000 --- a/files/fr/mozilla/localization/index/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Index -slug: Mozilla/Localization/Index -tags: - - Localisation -translation_of: Mozilla/Localization/Index ---- -

{{Index("/fr/docs/Mozilla/Localization")}}

diff --git a/files/fr/mozilla/localization/l10n_style_guide/index.html b/files/fr/mozilla/localization/l10n_style_guide/index.html deleted file mode 100644 index 8313c380b9..0000000000 --- a/files/fr/mozilla/localization/l10n_style_guide/index.html +++ /dev/null @@ -1,357 +0,0 @@ ---- -title: Guide stylistique de localisation de Mozilla -slug: Mozilla/Localization/L10n_Style_Guide -translation_of: Mozilla/Localization/L10n_Style_Guide ---- -

Introduction

- -
Les guides stylistiques définissent la norme selon laquelle peut être mesurée la qualité d'une traduction. Ils contiennent des règles qui sont établies à la fois par Mozilla et par les communautés de localisation de Mozilla sur la meilleure manière de traduire les textes dans les produits, sites et autre projets de Mozilla. Les guides stylistiques sont utilisés à la fois pour traduire et pour évaluer la qualité d'une traduction. En suivant ces règles, un traducteur a plus de chances de produire une traduction de qualité qui représente les valeurs et la culture de Mozilla. Voici quelques exemples de guides stylistiques créés par d'autres organisations :
- - - -
Ce guide stylistique est composé de deux parties : la première contient les règles qui sont spécifiques à la langue et sont définies par chacune des communautés de localisation de Mozilla (entre autres concernant le niveau de langue, la terminologie et les unités de mesure) ; la seconde contient des règles générales que Mozilla a déterminées pour les traducteurs dans toutes les langues qui peuvent vous aider à traduire correctement. La première partie de ce guide stylistique est à adapter pour les règles de votre communauté. Là où c'est possible, faites-y référence à des normes nationales ou internationales pour les unités, règles orthographiques et grammaticales.
- -

 

- -

Style propre à la langue de localisation de Mozilla

- -
    -
- -

Style

- -

Il revient principalement à votre communauté de localisation de définir son propre style. Celui-ci fait partie des instructions et recommandations pour la traduction de texte au sein des différents types de projets. Cela concerne différents éléments comme le ton et le niveau de langage, le traitement des références culturelles, d'expressions idiomatiques, et le maintien d'une certaine cohérence au sein de Mozilla et des guides et conventions stylistiques de produits tiers. Voici les différents aspects à aborder concernant le style.

- -
 
- -
Ton et formalisme
- -
Pour déterminer le ton ou le formalisme d'un projet de localisation de Mozilla dans votre langue, posez-vous ces questions :
- - - -
En définitive, votre localisation ne devrait pas utiliser un niveau de langue ou de formalisme différent de celui défini dans votre guide stylistique. Par exemple, vous pourriez vouloir utiliser « cliquez sur le lien » (pas très formel) plutôt que « veuillez cliquer sur le lien » (un peu plus formel). De même, le ton employé au sein d'un même projet de localisation devrait toujours rester cohérent. 
- -
 
- -
Expression naturelle
- -

L'utilisation d'expressions courantes peut faire en sorte de donner à votre localisation un air plus naturel pour vos utilisateurs. Si votre traduction ne suit pas les recommandations communautaires pour la traduction d'expressions locales ou naturelles, cela peut donner des résultats médiocres ou boiteux. Il est important pour vos équipes de garder ces règles en tête et de les traiter au cours du processus de traduction. Un exemple d'expression naturelle dans une traduction serait la phrase espagnole « En ocho días ». En français, on pourrait la traduire littéralement par « dans huit jours » mais aussi par « dans une semaine ». La seconde traduction est plus naturelle bien que les deux puissent être considérées comme correctes.

- -
Dans cette section de votre guide, établissez des recommandations sur la manière de produire une localisation plus naturelle. Cela peut prendre du temps et nécessiter pas mal d'expérience pour trouver les bons exemples dans votre langue.
- -
 
- -
Traiter les références culturelles, les expressions idiomatiques et l'argot
- -

L'utilisation de référenes culturelles, d'expressions idiomatiques et d'argot nécessite une très bonne compréhension de ces références tant dans la culture de votre langue source que dans votre langue de destination. Un exemple de référence culturelle en anglais serait la phrase « kick-off meeting ». Celle-ci est une référence à un terme de football américain et signifie une réunion pour lancer un nouveau projet. Pour la traduire, deux approches sont possibles :

- -
    -
  1. Trouver une phrase avec une référence équivalente dans votre langue.
  2. -
  3. Retirer la référence culturelle et traduire uniquement le sens concret (par exemple, « une réunion de lancement »
  4. -
- -

Définissez une politique pour traiter ces références que vous pouvez appliquer au sain de tous vos projets. Évaluez différentes ressources complémentaires pour trouver des équivalents culturels et donnez-en une liste dans cette section de vore guide stylistique (par exemple, un guide des expressions argotiques dans votre langue).  

- -
Cohérence du style
- -
N'oubliez pas que d'autres recommandations et guides stylistiques ou des règles d'utilisation de marques, spécifiques à Mozilla ou externes, doivent également être respectés. Vous trouverez plus d'informations à propos de l'utilisation des marques de Mozilla ici : https://www.mozilla.org/en-US/styleguide/identity/firefox/branding/. Par exemple, certains noms de marque comme « Firefox » ne devraient jamais être traduits. Pour d'autres marques qui n'ont pas de politique explicitement définie, c'est à votre communauté de définir s'il est approprié de les traduire. Faites particulierèment attention aux règles et recommandations des marques avant de décider de traduire un nom (qu'il s'agisse de Mozilla d'un autre organisme) et listez les dans cette section de votre guide stylistique.
- -
 
- -
-

Terminologie

- -
Voici une série de bases terminologiques existantes que vous pouvez utiliser notamment pour les termes et définitions liés aux logiciels et à Internet :
- - - -
L'utilisation de bases terminologiques appropriées dans votre langue devrait être systématique. Celles-ci peuvent être développées et approuvées par la communauté elle-même, ou provenir d'autres organismes qui adhèrent à certaines normes nationales, internationales ou locales pour la terminologie informatique.  Évitez en particulier d'utiliser :
- - - -
Astuces sur la traductiond de concepts difficiles
- -
Translating terms representing difficult concepts is a tricky task. Here are some ideas to help you translate terms that do not have equivalents in your language:
- - - -
Developing new term bases
- -
What is your community's process for identifying and creating a new termbase? Here are a few things to keep in mind:
- - - -

Unités et grammaire

- -
Many elements of unit or grammar do not exist or apply to all languages. If you find one of these elements that does not apply to your language, please remove it from your style guide. For those definitions of units and grammar that apply document the reference used or how it will be applied to the translation.
- -
 
- -
The translation should strive to achieve proper unit conversions for currency, measurements, etc. for the target audience.
- -
 
- -

Units and Unit Conversion

- -
Date Format
- -
How are the date formats for weeks and months expressed in the following forms:
- - - -
Reference material can be find here: https://en.wikipedia.org/wiki/Date_format_by_country
- -
 
- -
Calendar view: 
- - - -
Time Format
- -
How is time expressed in your language? Including 0-24 hr expression, hour, minute and second.
- -
 
- -
Numerals 
- -
How are numerals and percentages expressed in your language? 
- -
    Example: 1.23 (decimal separator) or 1,000 (thousand separator) using comma or period. 
- -
 
- -
Currency 
- -
What are other widely used currency and symbols used in your country/language for paid apps. 
- -
 
- -
Units
- -
Do you use the imperial, metric or nautical system for measuring weight, distance, etc.? Source strings will use the imperial system (e.g., miles, pounds, feet, gallons, etc.). Target translations should convert imperial metrics to their measurement system.
- -
 
- -
Names  
- -
-

What are the order of family name and given name in your language?  Here is the guideline on the naming convention from w3c.org:

-
- -
Address and Postal Code Format 
- -
What is the format in your language?  
- -
    Example: most Asian countries start from big to small: [Country] [postal code][state/province][city][district][street number and name][building and suite numbers][addressee]
- -
    Countries of European languages start from small to big: [addressee][street number and name][building and suite numbers][district][city][state/province][postal code][Country]
- -
   
- -
Telephone Number format
- -
Space separators between digits can be different for area codes such as State (Province) and City,
- -
 
- -

Spelling And Grammar Checks

- -
Many languages have national or international standards that define spelling and grammar rules. When defining these rules for your community, make reference to those standards wherever possible. Do you have automated tests for spell checking and grammar? List those tools and dictionaries here and how regularly they should be used.
- -
 
- -
Tense
- -
Do you have standards for verb forms that indicate or express the time, such as past, present, or future, of the action or state? What is your policy on tense consistency for certain use cases? For example, for phrases that ask a user to make an action (like "Download Firefox"), do you use a future tense, a command tense, or a neutral tense?  (See: https://en.wikipedia.org/wiki/Grammatical_tense )
- -
 
- -

Word Forms

- -
Pluralization  
- -
What is the appropriate form of expressing pluralization in your language?  List all forms of plural forms and examples if there is more than one.  Additional discussions can be found Here. https://developer.mozilla.org/en-US/docs/Mozilla/Localization/Localization_and_Plurals and here:  http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html
- -
 
- -
Abbreviations  
- -

How are abbreviations expressed in your language?
-     Example, in English, abbreviations are made by removing most vowels and only using the first 3-5 consonants followed by a period (e.g., abbreviation = abbr.).  (see: https://en.wikipedia.org/wiki/Abbreviation)    

- -

If your language does not have a standard way of expressing abbreviations, do you simply leave them in English?

- -
Acronyms 
- -
-

Are there standard translations of widely accepted acronyms such as CD, DVD, MB in your language? If not, do they remain in English? (see: https://en.wikipedia.org/wiki/Acronym )

-
- -
Punctuation
- -
Do you use different punctuation rules in your Firefox localization than what your language standard defines?
- -
    Example: do you use a period at the end of every user interface element translation or only some? What is the international/national standard for punctuation in your language?
- -
 
- -
Emphasis
- -

Is there an international/national standard for capitalization in your language?

- - - -
Hyphens and compounds 
- -
What is the appropriate way of using hyphens and compounds in your language?  ( https://en.wikipedia.org/wiki/Compound_%28linguistics%29
- -
 
- -
Prepositions and articles 
- -
What is the appropriate form of expressing prepositions and articles in your language?
- -
 
- -
Diacritics and Special characters  
- -
Does your language use any special or accented characters and will they be applied and preserved in sort orders, and other aspects of the translation?  (see: https://en.wikipedia.org/wiki/Diacritic )
- -
 
- -
Quotes  
- -
-

Does your language have a standard use for quotation marks, parenthesis, or brackets?

-
- -
Whitespace 
- -
-

Does your language require the use of white space around words, sentences, paragraphs, etc.? If so, in what ways?  (see: https://en.wikipedia.org/wiki/Sentence_spacing_in_language_and_style_guides )

-
- -
User Interface Elements        
- -
 
- - -
- -

General Mozilla l10n style

- -

Accuracy

- -

Meaning-based translation

- -
When it comes to translation, meaning is everything. A translator needs to understand the source text's meaning exactly. You then find its most closely linked equivalent in your own language, without adding or subtracting meaning in your translation. Finding meaning-based equivalents between languages can be difficult. To help concentrate your thoughts, ask yourself questions like:
- - - -

Sometimes translation memory and machine translation tools can offer bad suggestions for a translation. If you use either as part of your translation workflow, make sure to correct the suggestions before submitting them. Avoid literal translation at all costs. Watch out for words that might sound or look the same between English and your language, but have a different meaning.

- -

Should not be translated

- -
Shortcuts and accesskeys
- -

In Firefox and other software it's possible to use keyboard shortcuts to invoke a specific command. For example, to open a file in Firefox you can press the combination of keys CTRL+O (Cmd+O on Mac). The accelerator key depends on the operative system, but the letter itself is normally localizable. This is what is called a shortcut, or commandkey. For example, the Open File… menu item is stored as

- -
<!ENTITY openFileCmd.label "Open File…">
-<!ENTITY openFileCmd.accesskey "O">
-<!ENTITY openFileCmd.commandkey "o">
- -

The commandkey is stored in openFileCmd.commandkey (sometimes the string has .key in the identifier). Normally you should not localize this key, since shortcuts are often common across the entire operative system (e.g. CTRL+S to Save) or similar products (CTRL+T to open a new tab in most browsers). But it needs to be localized if the letter is not available in your keyboard layout. For example, in Italian the character [ can be accessed through ALT+è, a command key [ would not work.

- -

In the code fragment above you see also an accesskey defined for Open File…. Accesskeys are used to access a UI element from the keyboard. Example: if File menu has an accesskey F, and the Open file… menu has O, you can press ALT+F to access the menu, and then O to open a file.

- -

If the label is File, and the accesskey is F, it will be displayed as "File" on Windows and Linux, with an underscored F. If the accesskey was "O", so a character not available in the original label, it will be displayed underlined between parenthesis: "File (O)".

- -

One important thing to determine is if, for your locale, it makes sense to have localized accesskeys: for example, if most users will use a keyboard with a different layout (English), it might make sense to keep the English original accesskey instead of using a letter available in your localization.

- -

Accesskeys, like commandkeys, have their own lines within .dtd and .properties files and are usually identified by .accesskey in the string ID.

- -
Variables
- -

Variables should never be translated. You can recognize a variable within a string by its beginning with a specific character (e.g., $, #, %, etc.) followed by a combination of words without spacing. For example, $BrandShortName and %S are variables.  You can move a variable around within a string, if the translation of the string requires it.

- - - -

Brand names, as well as copyright and trademarks should never be translated, nor transliterated into a non-Latin based script. See the Mozilla branding guide for more details.

- -

Translating culture-specific references

- -

At times there will be English content included in Mozilla products or web projects (e.g., marketing campaigns) that makes references to American culture and concepts. When translating these, it is best to find an equivalent cultural reference within your own culture that accurately conveys the meaning of the English reference. For example, an American might say, "Good job, home run!" A home run is a baseball reference for a successful outcome. An appropriate translation would be an equivalent metaphor within your culture. Using soccer as an example, you might translate "Good job, home run!" into "Good job, nice goal!" in your language.

- -

[Add a note about Mozilla culture.]

- - - -

Mozilla projects will often contain legal content in the form of user agreements, privacy statements, etc. When reviewing the translation of legal content, Mozilla localizers should do so according to the criteria concerning accuracy, fluency, style, and terminology found within this style guide and according to Mozilla culture and values.

- -

Fluency

- -
 
- -
To produce a fluent translation, not only should the translation follow the language's standard grammar, punctuation, and spelling rules, but it should avoid being ambiguous, incoherent, or inconsistent, and unintelligible.
- -
 
- -
To avoid ambiguity, the translator must thoroughly understand the meaning behind the source text, including any references that text might include. For example, if the English source text uses the word, "it", the translator must know what "it" is to avoid an ambiguous translation. Clearly understanding the source text will also allow a translator to make the source text's logical connections in their own translation. This helps to keep the translation coherent.
- -
 
- -
Inconsistency can pop up in many forms. A translator must be consistent in their use of abbreviations, references, and links within each localization project. They must also be consistent with Mozilla and the localization communities' style guides and approved terminology. Abbreviations, like terminology, should come from either a standard reference (like a dictionary of abbreviations) or should follow your language's rules for creating abbreviations. Once used, the abbreviation must remain consistent every place that it is used in the translation. Cross-references (or links) must also be consistently used within a translation. If a text contains a hyperlink URL to a support article in English, the translation should also contain a hyperlink to a translation of that support article (if available) or the English version. Links should not redirect to other pages nor should they be broken and unusable.
- -
 
- -
Finally, there are times that a translation simply doesn't make sense. It's hard to put your finger on what exactly is wrong with it, but you know it is unintelligible and not fluent. While this is uncommon, it's important to report these unintelligible translations and offer suggestions to correct them.
diff --git a/files/fr/mozilla/localization/localiser_avec_pontoon/index.html b/files/fr/mozilla/localization/localiser_avec_pontoon/index.html deleted file mode 100644 index c030325093..0000000000 --- a/files/fr/mozilla/localization/localiser_avec_pontoon/index.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Localiser avec Pontoon -slug: Mozilla/Localization/Localiser_avec_Pontoon -translation_of: Mozilla/Localization/Localizing_with_Pontoon ---- -

Pontoon est un outil de localisation (l10n) sur le Web qui est en WYSIWYG, c'est-à-dire vous permet de voir directement ce que sera le résultat de votre travail. Chez Mozilla, nous utilisons Pontoon pour localiser tous les produits Mozilla ainsi que les sites web, depuis Firefox jusqu'à Mozilla.org. Pontoon est d'un accès facile et d'un maniement intuitif : il n'est pas nécessaire de disposer de grandes compétences techniques pour l'utiliser dans un processus de l10n. Nous allons aborder la façon d'utiliser Pontoon pour localiser des projets, depuis la manière de s'inscrire sur le site jusqu'à la phase finale de vos contributions. Chemin faisant, nous verrons quelques fonctionnalités sympathiques qui vous rendront plus efficace et faciliteront vos contributions de traduction et localisation.

- -
-

Vous êtes développeur ? Parcourez l'article implementing Pontoon in your project ou apprenez comment vous impliquer sur le GitHub.

-
- -

Premiers pas

- -

La page d'accueil de Pontoon est d'un usage très simple. Pour commencer, cliquez sur le lien « Sign in » et validez votre inscription avec votre compte Firefox (Firefox account). Ensuite, il vous suffit de sélectionner le projet sur lequel vous voulez travailler et la locale (votre langue) en la sélectionnant dans les menus déroulants. Pontoon ouvre alors automatiquement le projet désiré dans votre langue et vous allez pouvoir commencer. Notez que pour les besoins de cet article, nous utiliserons le site web Firefox Affiliates pour explorer les fonctionnalités de Pontoon et son processus. Et voici Pontoon qui s'ouvre :

- -

Browser app and workspace

- -

Barre d'outils principale

- -

Comme vous pouvez le voir, la majeure partie de l'interface est occupée par le site web qui est en cours de traduction. Seule la barre d'outils dans la partie supérieure appartient à Pontoon et comprend les éléments suivants (de gauche à droite) :

- -

Main toolbar

- -

Liste des chaînes

- -

Ouvre un panneau latéral qui contient la liste de toutes les chaînes à traduire.

- -

Sélecteur de projets

- -

Permet de passer d'un projet de traduction à l'autre.

- -

Sélecteur de ressources

- -

Permet de passer d'une ressource à l'autre pour un projet à traduire, par exemple des pages secondaires ou des fichiers. Cette entrée est masquée s'il n'existe aucune ressource pour le projet.

- -

- -
-
- -

Sélecteur de locale

- -

Permet de changer la langue-cible de traduction.

- -

Go

- -

Ouvre la sélection qui combine projet-ressource-langue

- -

Indicateur de progression

- -

Affiche l'avancement de votre travail de traduction pour la ressource. La fenêtre popup vous donne davantage de détails.

- -
-
- - - -

Permet d'exécuter des tâches spécifiques, telles que commiter sur un dépôt, télécharger des fichiers et se déconnecter.

- - - -

Fournit des informations importantes, telles que la chronologie du projet et une liste des raccourcis clavier.

- -
-
- -

Bon, et si on traduisait un peu maintenant ?

- -
-
- -

Traduction des chaînes

- -

Quand vous utilisez Pontoon pour la localisation, vous disposez de plusieurs options pour traduire vos chaînes. Vous pouvez en effet traduire en contexte, hors-contexte, ou les deux à la fois. Commençons par la traduction en contexte.

- -

En contexte

- -

Le mode de traduction en contexte de Pontoon's est un atout qui le distingue d'autres plateformes de traduction. Pontoon ouvre une page web (ou une application web) et permet de la modifier en temps réel. Voici comment vous pouvez traduire votre première chaîne :

- -

In-context localization

- -
    -
  1. Survolez au pointeur de votre souris le texte que vous souhaitez traduire.
  2. -
  3. Une icône de modification (un crayon) apparaît sur la zone de texte. Cliquez et vous activez le mode traduction.
  4. -
  5. Remplacez le texte original par sa traduction dans votre langue.
  6. -
  7. Cliquez sur l'icône d'enregistrement (une disquette) pour sauvegarder votre traduction.
  8. -
- -
-

Hors-contexte

- -

Certaines chaînes ne sont pas traduisibles en contexte, telles que les balises <title> des pages web et les chaînes ayant différents accords. En cliquant sur l'icône hamburger de la principale barre d'outils, la liste des chaînes et traductions disponibles apparaît en barre latérale. Utilisez alors la barre latérale pour inscrire une localisation hors-contexte:

- -

Out-of-context localization: list Out-of-context localization: translate

- -
    -
  1. Cliquez sur la chaîne à traduire.
  2. -
  3. Apparaît alors, dans le panneau de traduction, la chaîne originale et ses détails (tels que des commentaires).
  4. -
  5. Traduisez la chaîne dans l'espace de traduction situé en dessous.
  6. -
  7. Cliquez sur enregistrer pour enregistrer votre traduction.
  8. -
- -

En traduisant des chaînes hors contexte, les traductions apparaîssent sur la page web si elles sont également traduisibles en contexte.

- -

Outils d'aide à la traduction

-
- -

Comme vous le voyez, vous pouvez profiter des suggestions de l'historique et de la mémoire de traduction, de la traduction automatique et des autres locales également disponibles dans le panneau hors-contexte. Nous appelons ces outils des aides la traduction. Voici dans le détail ce que chacun d'eux peut vous apporter dans votre processus de traduction :

- -

Translation helpers: History Translation helpers: Machinery Translation helpers: Other locales Translation helpers: Search

- -

Historique

- -

Affiche les traductions suggérées pécédemment, y compris celles d'autres utilisateurs.

- -

Machinery

- -

Displays matches from various services: internal translation memory, Mozilla Transvision, open source translation memory, Microsoft terminology and machine translation.

- -

Autres locales

- -

Affiche les traductions correspondantes dans d'autres langues.

- -

Recherche

- -

Fonctionne presque comme Machinery, mais utilise le mot-clé fourni comme paramètre au lieu de la chaîne de caractères originale.

- -

En cliquant sur une suggestion, vous la copiez dans la zone de traduction.

- -
-
- -

Publier sa localisation

- -

Pour publier votre travail de localisation (l10n), vous voudrez normalement l'inscrire dans un dépôt. Et Pontoon s'en charge! En réalité, il synchronise vos changements avec le dépôt toutes les heures. Félicitez-vous donc avec une tape dans le dos, une petite danse, une sieste ou autre chose pour célébrer votre travail!

diff --git a/files/fr/mozilla/localization/localization_notes/index.html b/files/fr/mozilla/localization/localization_notes/index.html deleted file mode 100644 index e391ccb006..0000000000 --- a/files/fr/mozilla/localization/localization_notes/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Notes de traduction -slug: Mozilla/Localization/Localization_notes -tags: - - Guide - - Internationalisation - - Mozilla - - Traduction -translation_of: Mozilla/Localization/Localization_notes ---- -

Les traducteurs travaillent la plupart du temps sur les fichiers à traduire sans le contexte des fichiers sources, y compris les chaînes traduites ; il est donc important d'ajouter des commentaires dans ces mêmes fichiers à traduire. Ces commentaires sont généralement appelés notes de traduction. Il existe un format établi pour ces documents, qui est détaillé dans le document actuel.

- -

Il est important de suivre le format au plus possible. De nombreux outils analysent automatiquement les commentaires afin d'en simplifier la lecture et de faciliter le travail des traducteurs.

- -

Fichiers DTD

- -
<!-- NOTE DE TRADUCTION (nom de l'entité): commentaire -->
-
- -

Fichiers de propriétés

- -
# NOTE DE TRADUCTION (clé): commentaire
-
- -

Les commentaires pour l'ensemble du fichier doivent utiliser le même format, être en haut du fichier (après l'en-tête de la licence, évidemment) et simplement indiquer la référence (nom de l'entité/clé).

diff --git a/files/fr/mozilla/localization/localizing_with_verbatim/index.html b/files/fr/mozilla/localization/localizing_with_verbatim/index.html deleted file mode 100644 index 32d877555a..0000000000 --- a/files/fr/mozilla/localization/localizing_with_verbatim/index.html +++ /dev/null @@ -1,169 +0,0 @@ ---- -title: Localiser avec Verbatim -slug: Mozilla/Localization/Localizing_with_Verbatim -tags: - - Comment - - Démarrer - - Guide - - Localisation - - MDN - - Mozilla - - Participer - - Traduction - - Traduire - - Verbatim -translation_of: Mozilla/Localization/Localizing_with_Pontoon ---- -

Verbatim est un outil en ligne (plus précisément, il s'agit d'une instance Pootle hébergée par Mozilla) conçu pour localiser le contenu des pages Web de Mozilla. Tous les projets Mozilla peuvent en profiter, quelle que soit la langue utilisée. Ce guide vous aidera à localiser votre premier projet Mozilla. Il vous expliquera les bases de Verbatim pour traduire tous les projets Mozilla que vous voudriez voir apparaître dans votre langue au sein de la communauté Mozilla. Plusieurs points seront abordés, notamment les types de projet utilisés avec Verbatim, comment démarrer avec Verbatim ainsi que les différentes tâches accomplies grâce à Verbatim.

- -

Démarrer avec Verbatim

- -

Puisque Verbatim est un outil en ligne, le traducteur doit être connecté à Internet pour l'utiliser. Vous pouvez l'utiliser de deux manières différentes : démarrez une nouvelle localisation ou rejoignez une communauté de localisation déjà existante. Quelque soit votre choix, suivez les étapes ci-dessous pour commencer à travailler sur un projet Verbatim.

- - - - - - - - - - - - - - - - - - - - - - -
Démarrer une nouvelle localisationRejoindre une communauté existante
-
    -
  1. Rendez-vous à l'adresse https://localize.mozilla.org, la page d'accueil de Verbatim.
  2. -
-
-
    -
  1. Rendez-vous à l'adresse https://localize.mozilla.org, la page d'accueil de Verbatim.
  2. -
-
-
    -
  1. Si vous avez un compte Mozilla LDAP (Lightweight Directory Access Protocol), connectez-vous simplement avec les identifiants de ce compte. Sinon, créez un compte, et connectez-vous avec les identifiants de ce compte. Vous trouverez les liens pour vous enregistrer ou vous identifier dans le coin en haut à droite de cette page.
  2. -
-
-
    -
  1. Si vous avez un compte Mozilla LDAP (Lightweight Directory Access Protocol), connectez-vous simplement avec les identifiants de ce compte. Sinon, créez un compte, et connectez-vous avec les identifiants de ce compte. Vous trouverez les liens pour vous enregistrer ou vous identifier dans le coin en haut à droite de cette page.
  2. -
-
-
    -
  1. Rapportez un bogue en utilisant  ce modèle bugzilla pré-rempli. Ajoutez vos paramètres régionaux et votre langue dans le champ "Description", ainsi que toute information que vous jugez utile. Voir l'exemple ci-dessous.
  2. -
- -
Exemple : J'aimerais vous demander d'ajouter fr-FR comme nouveau code de localisation dans Verbatim. La langue est le français. J'aime aussi les cookies. J'adore les cookies. Toutes les pâtisseries me motivent en fait.
-
-
    -
  1. Contactez la communauté pour connaître les projets qui ont le plus besoin d'attention en ce moment. Lisez l'exemple ci-dessous pour vous faire une idée du message que vous pourriez envoyer aux responsables de la communauté.
  2. -
- -
Exemple : J'aimerais vous rejoindre pour vous aider à traduire dans cette langue. Par où puis-je commencer ? J'aimerais aussi vous offrir un verre pour vous motiver à me laisser rejoindre votre communauté !
-
- -

Vous voilà enregistré(e) et identifié(e). Nous allons maintenant décrire le processus général de traduction en nous servant de la page des projets MDN comme exemple.

- -

Traduire

- -

Tout d'abord, il faut trouver des sources qui ne sont pas encore traduites.

- -
    -
  1. Rendez-vous sur la page des projects MDN.
  2. -
  3. Sélectionnez votre langue dans l'onglet Overview.
  4. -
  5. Cliquez sur le répertoire LC Messages pour voir apparaître les fichiers .po qui contiennent les chaînes à traduire.
  6. -
  7. Choisissez un fichier .po dont certaines sources sont encore à traduire.
  8. -
  9. Une page s'affiche avec le résumé de ce fichier. Cliquez sur Continue translation et vous êtes redirigé vers l'onglet Translate pour commencer directement à traduire.
  10. -
- -

Vous êtes maintenant prêt à nous aider, vous allez voir, c'est très facile. Vous pouvez le faire de deux manières :

- -
    -
  1. Insérez votre traduction en dessous de la chaîne en anglais.
  2. -
  3. Cliquez sur Suggest. Si vous avez les autorités pour approuver une traduction, cliquez sur Submit. la chaîne suivante apparaît.
  4. -
  5. Hourra ! Vous traduisez ! Répétez les étapes 1 et 2 pour toutes les chaînes à traduire.
  6. -
- -
Remarque : Si une suggestion a déjà été faite pour l'une des chaînes à traduire, vous pouvez toujours proposer la vôtre, si vous la trouvez plus correcte.
- -

Verbatim offre des options très sympas

- -

Verbatim offre des fonctionnalités intéressantes que vous pouvez voir dans la capture d'écran ci-dessous.

- -

Translate Tab.png

- - - -

Possibilités supplémentaires

- -

Si vous avez l'autorité d'approuver les traductions, vous pourrez également accéder aux fonctionnalités suivantes.

- -

Relire les traductions suggérées

- -
    -
  1. Cliquez sur l'onglet Review. Vous verrez alors apparaître le nombre de chaînes en attente de révision pour chaque fichier .po.Review Tab1.png
  2. -
  3. Sélectionnez Review suggestions pour commencer à approuver les suggestions.
  4. -
  5. Vous pouvez soit accepter la suggestion en cliquant sur le "V" vert ou la rejeter en cliquant sur le "X" rouge (voir capture d'écran de la section précédente).
  6. -
- -

il est important de noter que seules les chaînes soumises apparaîtront dans vos pages localisées, pas les suggestions, ni les traductions fuzzy. Avant de valider votre projet localisé, vérifiez que toutes les chaînes aient bien été soumises.

- -

Utiliser VCS avec Verbatim

- -

VCS (Version Control System) est le système de dépôt utilisé pour mettre à jour les chaînes des projets ou pour mettre en ligne le contenu traduit, selon le lien utilisé.

- -

VCS.pngPour publier vos traductions et voir vos modifications, cliquez sur le lien Commit to VCS en dessous de chaque nom de fichier. Comptez environ une heure avant de voir apparaître vos changements sur le site du projet.

- -

Pour mettre à jour vos fichiers .po avec de nouvelles traductions, cliquez sur le lien Update from VCS en dessous de chaque nom de fichier.

- -

 

- -

-Remarque : Certains projets sont mis à jour automatiquement durant la nuit, alors que d'autres nécessitent une mise à jour manuelle pour recevoir du nouveau contenu. Faites-y très attention car cela peut influencer votre travail.
- -

Traduire les fichiers de Verbatim avec une application externe

- -

Dans l'onglet Translate, vous avez la possibilité d'exporter les fichiers .po et .xliff et de les traduire avec une application externe (p.ex. un éditeur de texte ou une mémoire de traduction).

- -
    -
  1. Pour télécharger le fichier .po, cliquez sur le lien Download sous chaque nom de fichier, pour le fichier .xliff, cliquez sur le lien Download XLIFF.
  2. -
  3. Traduisez les chaînes avec l'outil de votre choix.
  4. -
- -

Lorsque le fichier est traduit, vous devez le renvoyer sur le serveur de Verbatim, vous pouvez le faire à partir de l'onglet Translate.

- -
    -
  1. Naviguez jusqu'à la partie Upload File à la fin de la liste de fichiers.
  2. -
  3. Cliquez sur le bouton Browse et sélectionnez le fichier que vous souhaitez envoyer.
  4. -
  5. Sélectionnez un mode d'envoi selon les options disponibles.
  6. -
  7. Cliquez sur Upload.
  8. -
- -
-

Important : Dans le passé, il y a eu quelques problèmes lorsque certains membres de la communauté mettaient à jour leurs sources alors que d'autres traduisaient en même temps l'ancienne version de ces mêmes sources. Ce faisant, certaines chaînes peuvent échapper au processus de traduction et apparaître en langue source dans un projet localisé. Coordonnez ces mises à jour manuelle entre les membres de votre communauté pour éviter ce problème.

-
- -

Voilà, on y est !

- -

Waouw ! Nous y sommes ! Il est temps d'appliquer ce que vous avez appris et d'aider les gens de votre région à comprendre et connaître Mozilla. Faites-vous plaisir et n'hésitez pas à nous signaler le moindre problème, nous serons ravis de vous aider.

- -

 

- -

Retour : Traduire les pages MDN

diff --git a/files/fr/mozilla/marketplace/index.html b/files/fr/mozilla/marketplace/index.html deleted file mode 100644 index cbe5fffb5e..0000000000 --- a/files/fr/mozilla/marketplace/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Firefox Marketplace -slug: Mozilla/Marketplace -tags: - - Applications - - Débutant - - Firefox OS - - Introduction - - Landing - - Marketplace -translation_of: Archive/Mozilla/Marketplace ---- -
Le Marketplace Firefox est un marché en ligne pour les applications web. Dans cette section de MDN, vous trouverez les informations relatives à la préparation et à la publication d'applications sur le Marketplace Firefox. Vous pourrez en savoir plus sur la bonne construction d'une application, les façons de la diffuser et de la mettre à jour et vous trouverez également des informations à propos des API permettant d'exploiter les fonctionnalités du Marketplace.
- -
-

Grâce aux technologies web standards et à certains outils, le Marketplace Firefox vous permet de publier des applications open web. Ces applications peuvent être empaquetées pour être utilisées au sein de Firefox OS ou bien être hébergées sur votre propre serveur web. Les applications publiées sont disponibles pour l'ensemble des utilisateurs de Firefox OS. Le Marketplace permet de découvrir les différentes applications par catégories, via un outil de recherche ou via les applications du moment. Les utilisateurs peuvent ainsi installer des applications gratuites immédiatement ou des applications payantes avec le paiement via l'opérateur téléphonique.

-
- -
-
-

Les clés du succès

- -
-
Que ce soit pour le plaisir ou dans un cadre plus professionnel, les utilisateurs doivent pouvoir découvrir votre application, l'utiliser et en profiter. Dans cette section, nous voyons comment construire une communauté d'utilisateurs satisfaits.
-
- -

Les options de publication

- -
-
Empaquetées ou hébergées ? Telle est la question. On voit ici comment rendre l'application disponible et les différentes options envisageables afin qu'elle soit également utilisable sur Android et les ordinateurs de bureau (en plus de Firefox OS).
-
- -

Publier des applications

- -
-
Ici, on voit comment publier une application sur le Marketplace Firefox (l'envoi initial, le processus de revue, la mise à jour, le suivi des performances et la gestion des retours utilisateur).
-
-
- -
-
-
- -

Outils de développement

- -
-
Les bibliothèques et API du Firefox Marketplace
-
Un aperçu et des liens à propos des API et bibliothèques disponibles pour ajouter aux applications des fonctionnalités relatives au Marketplace.
-
Les outils destinés aux développeurs d'application
-
Une liste exhaustive d'outils qui peuvent être utilisés pour développer des applications web efficacement.
-
WebIDE
-
L'outil principal pour tester, déployer et déboguer des applications Firefox OS grâce au simulateur Firefox OS ou sur un appareil Firefox OS.
-
-
-
- - - -
    -
  1. Les clés du succès - -
      -
    1. Introduction
    2. -
    3. Quoi construire ?
    4. -
    5. Apprendre à connaître les utilisateurs
    6. -
    7. Choisir le modèle économique
    8. -
    9. Traduire son application
    10. -
    11. Promouvoir son application
    12. -
    13. Créer une communauté
    14. -
    -
  2. -
  3. Les options de publication -
      -
    1. Introduction
    2. -
    3. Les applications empaquetées
    4. -
    5. Les applications hébergées
    6. -
    7. Empaquetée ou hébergée ?
    8. -
    9. Les sites web optimisés pour le mobilewebsites
    10. -
    11. Publier soi-même son application
    12. -
    -
  4. -
  5. Le processus de publication -
      -
    1. Introduction
    2. -
    3. Le checklist pour l'envoi
    4. -
    5. Les critères de revue du Marketplace
    6. -
    7. Un exemple d'illustration
    8. -
    9. Ajouter un sous-domaine pour une application
    10. -
    11. Règles et lignes directrices -
        -
      1. Introduction
      2. -
      3. Capture d'écran pour les critères
      4. -
      5. Politique de confidentialité
      6. -
      7. Test et débogage des applications
      8. -
      -
    12. -
    -
  6. -
  7. Soumettre son application -
      -
    1. Aperçu
    2. -
    3. Première étape : s'inscrire
    4. -
    5. Deuxième étape : charger l'application
    6. -
    7. Troisième étape : lister les détails
    8. -
    9. Quatrième étape : les prochaines étapes
    10. -
    11. Cinquième étape : le système de notation des applications
    12. -
    13. Sixième étape : définir les membres d'une équipe
    14. -
    15. Septième étape : éditer les localisations
    16. -
    -
  8. -
  9. Gérer et mettre à jour une application publiée -
      -
    1. Introduction
    2. -
    3. L'état de l'application
    4. -
    5. Mettre à jour une application
    6. -
    7. Les statistiques d'une application
    8. -
    -
  10. -
  11. Soumettre un module complémentaire -
      -
    1. Un aperçu de l'envoi
    2. -
    3. Les critères de revue pour un module complémentaire
    4. -
    -
  12. -
  13. API et bibliothèques
  14. -
  15. FàQ sur le Marketplace Firefox
  16. -
diff --git a/files/fr/mozilla/marketplace/index/index.html b/files/fr/mozilla/marketplace/index/index.html deleted file mode 100644 index 84ea48e865..0000000000 --- a/files/fr/mozilla/marketplace/index/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Index -slug: Mozilla/Marketplace/Index -tags: - - Index -translation_of: Archive/Mozilla/Marketplace/Index ---- -

{{Index("/fr/Marketplace")}}

diff --git a/files/fr/mozilla/marketplace/monetisation/index.html b/files/fr/mozilla/marketplace/monetisation/index.html deleted file mode 100644 index 64edbd3706..0000000000 --- a/files/fr/mozilla/marketplace/monetisation/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Monétisation -slug: Mozilla/Marketplace/Monetisation -tags: - - Applications - - Firefox OS - - moentization - - paiement -translation_of: Archive/Marketplace/Monetization ---- -
-

Vous avez travaillé dur pour coder votre dernière application, mais comment pouvez-vous obtenir quelque chose en retour lors de la publication ? Cette section présente tous les informations dont vous aurez besoin pour implémenter le paiement d'application, que ce soit les paiements depuis le marketplace ou des paiements dans l'application.

-
- -
-
-
-
Tirer profit de votre application
-
Ce guide détaillé contient des discussions préliminaires sur la façon de monétiser vos applications, y compris les applications payantes, les prix et la gestion des paiements.
-
Guide du paiement d'application
-
Cet article couvre les aspects techniques des applications payées.
-
Paiements dans les application
-
Un guide détaillé pour la mise en œuvre des paiements dans les applications dans votre application Web.
-
Valider un reçu
-
Un guide pour savoir quand et comment faire valider le reçu de paiement de votre application, que vous vouliez mettre en œuvre la validation vous-même ou utiliser une bibliothèque préexistante.
-
Guide des prix
-
Un tour d'horizon des points de fixation du prix que vous pouvez choisir pour vos applications payantes, et comment ceux-ci varient selon les différentes devises, ainsi que des informations utiles sur la gestion des paiements.
-
Statuts de paiements
-
Un résumé des pays qui bénéficient de nos services de paiement — essentiellement, peuvent être distribuées les applications payantes?
-
-
- -
-
Tools for app developers
- -
Technology reference documentation
- -
Getting help from the community
-

If you still aren't sure how to do what you're trying to get done, feel free to join the conversation!

- -

Don't forget about the netiquette...

-
-
- -

 

diff --git a/files/fr/mozilla/marketplace/options/creating_a_store/index.html b/files/fr/mozilla/marketplace/options/creating_a_store/index.html deleted file mode 100644 index 0543168c72..0000000000 --- a/files/fr/mozilla/marketplace/options/creating_a_store/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Creating your own store -slug: Mozilla/Marketplace/Options/Creating_a_store -translation_of: Archive/Marketplace/Options/Creating_a_store ---- -
-

La méthode d'installation et de gestion des applications dans Firefox OS, Firefox pour Android et Firefox pour PC de bureau est indépendant de Firefox Marketplace. Cela ouvre la possibilité pour vous de non seulement auto-publier des applications, mais aussi pour créer et héberger votre propre marché. En fin de compte, vous pouvez aussi mettre en place un marché indépendant en utilisant le logiciel open source. Cette page décrit les options et donne un aperçu de la mise en œuvre de chaque.

-
- -

vos options
-
- Les trois principales options que vous pouvez utiliser pour créer votre propre boutique sont:
-
-      Procédé d'annuaire
-      méthode de magasin
-      remplir la mise en œuvre du marché
-
- Ces options sont décrites plus en détail ci-dessous.
-
- Remarque: les applications peuvent être limités à l'installation à partir d'une liste des origines autorisés avec la installs_allowed_from bien manifeste. Vous aurez besoin de confirmer que cette propriété n'est pas définie pour exclure l'origine de votre magasin lors de l'inscription applications.

- -

Directory method

- -

Here you create a directory of apps served by the Firefox Marketplace, making use of the Firefox Marketplace API to retrieve information on the apps. You would then need to implement your own Web pages to display details of the apps and trigger their installation. With this method you can serve any app that is available on Firefox Marketplace, but you won't generate a revenue stream for paid apps.
- You can find an example of this method of store creation in TheCount. At the time of writing, to see the example in action click apps with at least 30 ratings and open any of the listed apps. In the app's details page you'll see an install button directly below the title, as shown below.

- -

The installation button for an app with at least 30 ratings in TheCount, a stats and reporting website.

- -

You can find the code used to implement the button in the project's Github repository.

- -

Store method

- -

Here you work independently of the Firefox Marketplace providing a list of self-published apps that are installed using {{ domxref("Apps.install") }} or {{ domxref("Apps.installPackage") }}. The self-published apps can either be hosted by you or another developer. This method limits you to apps that can be self-published, that is, you cannot serve Packaged Apps using Privileged and Certified APIs.

- -

Full Marketplace implementation

- -

Here you implement the various components of Marketplace (zamboni plus other components such as Solitude and WebPay, if you want to implement payments). For more information, please see the zamboni documentation.

- -

Useful APIs

- -

When implementing the directory or store methods, you'll find the following APIs of use.

- -

Interacting with Marketplace

- -

When using the directory method you'll need to access and use details of the apps available in Marketplace. The key APIs for these tasks are:

- - - -

To find more information on these APIs and others that might be useful, please see the Firefox Marketplace API documentation.

- -

Managing apps on a device

- -

You'll probably be familiar with {{ domxref("Apps.install") }} or {{ domxref("Apps.installPackage") }} already, the APIs used to install Packaged  Apps and Hosted Apps. These APIs are part of the {{ domxref("navigator.mozApps") }} JavaScript object, which includes several other APIs that can communicate with a Firefox OS device or browser to gather information on installed apps.

- -

For example, the navigator.mozApps.getInstalled() method enables you to get a list of the apps that were installed in the current user agent by your domain. You'll not see apps installed by other domains, only the ones that you put there. You can use this method to determine whether the user's installed apps match your expectations, or to implement a "resync" feature if the user signs into your site from a new profile.

- -

For more details, please see App Installation and Management APIs.

- -

Other information

- -

If you're delivering Hosted Apps, you can easily maintain a session with the user to track preferences, proof-of-purchase, or other additional services. If you're providing services to a remotely Hosted App, you'll need to do some additional work to support a distributed authentication system.

- - diff --git a/files/fr/mozilla/marketplace/options/index.html b/files/fr/mozilla/marketplace/options/index.html deleted file mode 100644 index 43e9966338..0000000000 --- a/files/fr/mozilla/marketplace/options/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Your publication options -slug: Mozilla/Marketplace/Options -tags: - - Structure only - - TopicStub -translation_of: Archive/Mozilla/Marketplace/Options/Introduction ---- -

Dans cette section, vous découvrirez :

- - - -
-

Le contenu de cette section est toujours en cours de développement.

-
diff --git a/files/fr/mozilla/marketplace/options/introduction/index.html b/files/fr/mozilla/marketplace/options/introduction/index.html deleted file mode 100644 index 51cee4b8c5..0000000000 --- a/files/fr/mozilla/marketplace/options/introduction/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Introduction — vos options de publications -slug: Mozilla/Marketplace/Options/Introduction -translation_of: Archive/Mozilla/Marketplace/Options/Introduction ---- -
-

Le Marketplace de Firefox fournit un canal à travers lequel vous pouvez publier vos applications et les rendre facilement détectables par les utilisateurs de Firefox OS. Cependant, ce n'est pas votre seule option pour rendre disponibles vos applications. Cette section vous aidera à comprendre les idées de base sur les formats utilisables pour les applications et les diverses options pour leur publication.

-
- -

Vos options de publications

- -
-
Application packagée
-
Choisissez votre méthode préférée de livraison pour vos applications - une option qui vous offre l'accès à des API privilégiées et sécurisées
-
Hosted apps
-
Découvrez comment rendre vos applications disponibles à partir d'un serveur, tout en donnant aux utilisateurs les avantages d'une application installée.
-
Packaged or hosted?
-
Utilisez cette liste de contrôle pour déterminer le format qui convient le mieux à votre application.
-
Auto-publication d'application
-
Dans certains cas, vous voudrez peut-être publier vos applications en dehors de Firefox Marketplace, peut-être pour les rendre disponibles aux tests ou les distribuer dans votre entreprise. Découvrez les options que vous avez et comment les mettre en œuvre.
-
Mobile-optimized websites
-
Le Marketplace Firefox a la possibilité de répertorier les sites web optimisés pour mobile (MOW) - simplement des sites web qui fonctionnent bien dans les appareils et plates-formes mobiles - juste à côté des applications. Cet article explique ce que cette nouvelle fonctionnalité implique, comment vous pouvez l'utiliser et ce que les différentes phases de publication future mettront à disposition.
-
- -

 

diff --git a/files/fr/mozilla/marketplace/options/open_web_apps_for_android/index.html b/files/fr/mozilla/marketplace/options/open_web_apps_for_android/index.html deleted file mode 100644 index 3a37fc5c26..0000000000 --- a/files/fr/mozilla/marketplace/options/open_web_apps_for_android/index.html +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Open Web Apps for Android -slug: Mozilla/Marketplace/Options/Open_web_apps_for_android -translation_of: Archive/Marketplace/Options/Open_web_apps_for_android ---- -
-

Users of Firefox for Android install Marketplace apps as 'normal' Android apps, gaining the benefit of powerful open web features. This ability is enabled by the creation of APKs by the APK Factory. Installed apps are run by the Web Runtime for Android, which is included in Firefox for Android. By making your apps accessible to Firefox for Android users, you gain an additional distribution opportunity, expanding the potential audience for your work.

-
- -

What is Open Web Apps for Android?

- -

Open Web Apps for Android enables free Marketplace apps to be packaged into an APK (Android installation package), which is then installed and run in the same way as any other Android app. The APK package consists of web content (in the case of packaged apps) or a pointer to web content (in the case of hosted apps). This content is then enclosed in a thin Java/Android wrapper, which provides the integration with the Android OS. Once installed on an Android device the app is executed by Web Runtime for Android, a component of Firefox for Android.

- -

These packages are created by the APK Factory Service, which is run as a web service by Marketplace. The APK Factory Service makes use of the APK Factory Library to create the actual package and the APK Signer to digitally sign the APK. This service is available to your own Marketplace, should you choose to create one.

- -

You don't need any knowledge of Android development, or to take any extra development steps, to use Open Web Apps for Android: you simply select the option for distribution to Firefox Mobile or Firefox Tablet when submitting your apps to the Firefox Marketplace.

- -
-

Note: Open Web Apps for Android provides support for hosted apps in Firefox for Android xx or later, packaged apps are supported in Firefox for Android 29 or later. Only free apps are available for Android from the Firefox Marketplace at this time.

-
- -

Web Runtime for Android supports 12 APIs to access device capabilities, such as vibration, geolocation, and battery status. You can see a complete list of supported APIs here: APIs showing "A" under "Availability" are those APIs available on Android, with green cells indicating that the API is available in full. You can also mouseover individual cells to get tooltips containing more information.

- -

Web Runtime for Android will continue to add support for other APIs in future releases. Some of the APIs planned are:

- - - -
-

Note: Android users may be using devices with higher resolutions, greater pixel densities (DPI), and larger screen sizes than those found on Firefox OS devices. Apps that haven't used responsive design may therefore provide a poor experience, and you may want to design your apps with this in mind. For more information on responsive design see the Design section of the App Center.

-
- -

Using Open Web Apps for Android from Firefox Marketplace

- -

This section provides details on how you make use of Open Web Apps for Android from Firefox Marketplace, how they affect the Marketplace experience, and information on app updates.

- -

Submitting an app

- -

When you submit an app to the Firefox Marketplace, you choose the option of making your app available for Firefox Mobile or Firefox Tablet. Choosing either or both of these options will automatically deliver your app as an APK on Android devices.

- -

Approving an app

- -

When your app is reviewed, the reviewer installs your app from the reviewer section in Firefox Marketplace. When they do this from an Android device, the "review" instance of the APK Factory service is invoked to create an APK signed in Android debug mode. This version of the APK is then installed on the app reviewer's device and they complete the review process.

- -

If the app is approved, the "release" instance of the APK Factory service is invoked to generate and sign the APK with a unique APK Signing Key. The resulting signed APK is then cached for delivery when a user chooses to install the app.

- -

Installing an app

- -

When a user selects your app in the Marketplace on their Android device, installation works as follows:

- -
    -
  1. Firefox Marketplace displays the app's details and Free install button as normal.
  2. -
  3. When the user taps Free, {{ domxref("Apps.install") }} or {{ domxref("Apps.installPackage") }} is invoked as usual (depending on whether it's a hosted or packaged app) and a call is made to the APK Factory service to request the APK.
  4. -
  5. The APK is downloaded to the Android device and the standard Android app installation process invoked.
  6. -
  7. If the user hasn't enabled the Security setting Unknown sources, Android will alert the user and give them the option to cancel the installation or open Settings.
  8. -
  9. Once Unknown sources is enabled, the user is shown an install confirmation dialog. The dialog lists the permissions requested by privileged apps.
  10. -
  11. If the user taps Install the app is installed.
  12. -
  13. Once the app has been installed, the user is given the option to Open the app and in Firefox Marketplace the Free button is replaced with a Launch button.
  14. -
- -

Subsequently the user will find the application in their Apps screen. In addition, the process to use and remove the app is the same as they'd expect for other Android apps. Firefox for Android provides a list of installed apps under Apps on the Tools menu as well.

- -

Keeping apps up to date

- -

Firefox for Android provides a mechanism installing update apps.

- -

If your app is hosted, whenever you make a change on its server, users will pick up changes the next time they run your app.

- -

For all other changes, you need to add a new version to the Firefox Marketplace:

- - - -

Firefox for Android makes a daily check on the version number in the app’s manifest and if it has changed silently applies the update.

- -

Using Open Web Apps for Android from your own Marketplace

- -

You're able to create your own Marketplace. Such a Marketplace consists of either a directory of apps in Firefox Marketplace or your own hosted content (app descriptions with the main manifest of hosted apps or the mini manifest with app zip archive in the case of packaged apps).

- -

Your Marketplace will pass the URL of the manifest to be installed to {{ domxref("Apps.install") }} / {{ domxref("Apps.installPackage") }} that then invokes APK Factory, meaning you don't have to do anything to enable Open Web Apps for Android in your Marketplace. You do, however, need to ensure that your Marketplace only serves apps that include APIs supported by the Web Runtime for Android.

- -

How the APK Factory works

- -

This section describes how the APK Factory works.

- - - -

The following diagrams offer an alternative representation of the workflow of the APK Factory:

- -

Web Sequence diagram showing the operation of the APK factory

- -

Package naming and APK signing keys

- -

On installation of an APK the Android device checks the Java package name and signature. It verifies the signature the first time an app is installed (there is no central authority it checks with). Future updates must then have the same package name and signature. If the package name and signature aren't the same, the Android device won't update the installation.

- -

Package naming

- -

The package name for an APK consists of the hosting site and a unique serial number, for example:

- - - -

APK signing keys

- -

Each APK needs to be identified by an APK signing key before it can be installed on an Android device. APK signing keys are created and owned by the APK Signer service. These signing keys are sensitive, and stored securely in the APK Signer.

- -

This service creates a unique key for each app, applying it to the original release and subsequent updates. The reuse of the key on updated app APKs is important, as without a match in the package name and key Android won't install an update over an earlier version of the app. If you create your own Marketplace, the APK will retain the same name and keys, so that either version will be able to update the other.

- -
-

Note: Mozilla assumes no responsibility for the credibility of the APK signing keys. That is, the keys provide no information about the authenticity of the app or developer beyond the fact that they have been approved for release in Marketplace, if the app is hosted there. The service is not tied to Google or any other central authority.

-
- -

FAQ

- -

Here are answers to some frequently asked questions about APKs for Open Web Apps for Android.

- -

What about re-installation of apps installed as bookmarks?

- -

When a user updates to Firefox for Android version 29 or later, their bookmark-style apps will continue to work, and Firefox will prompt users to update apps to their Open Web Apps for Android version.

- -

How will in-app purchases work?

- -

The APK is given access to the trusted UI, mozPay, and all payment processes for in-app purchases, so in-app payments will function as normal.

- -

How do I download a copy of my app's APK?

- -

You can download a copy of your app from the APK Factory service by retrieving a URL in the format:

- -

https://controller.apk.firefox.com/application.apk?manifestUrl=ESCAPED_URL_TO_MANIFEST

- -

where ESCAPED_URL_TO_MANIFEST is an escaped URL to the app's manifest or mini-manifest. That URL causes the APK Factory to return the cached copy of the APK, or create a new one if the app hasn't been submitted to Marketplace.

- -

Examples

- -

For a hosted app:

- -

> wget https://controller.apk.firefox.com/application.apk?manifestUrl=http%3A%2F%2Fmykzilla.org%2Fapp%2Fmanifest.webapp -O mykzilla.apk

- -

For a packaged app:

- -

> wget https://controller.apk.firefox.com/application.apk?manifestUrl=https%3A%2F%2Fmarketplace.firefox.com%2Fapp%2Fa22e0277-35bc-434d-9371-1568c75fc726%2Fmanifest.webapp -O cuttherope.apk
-  

- -

Can I generate an APK manually from a different URL?

- -

Yes, by providing the URL to any location for your manifest or mini-manifest files. However, be aware that because the APK is generated from a different URL, the package name will differ from that created when you submit the app to Firefox Marketplace, so the Firefox Marketplace version will be installed as a separate app.

- -

If I setup my own copy of the APK Factory can I use the APKs it generates?

- -

You can, but be aware that the signing keys will differ from those assigned to the APKs generated by Firefox Marketplace. As a result Android will refuse to install whichever version the user tries to install second. (See If I also have an Android native version of my app, can both be installed on an Android device? for more information.)

- -

Can I submit an APK created by the APK Factory to Google Play or other Android store?

- -

You can submit an APK generated by APK Factory to Google Play or an alternative Android store. However, it's your responsibility to:

- - - -

Can I use my Android signing keys to sign the APK and choose the package name?

- -

At present you cannot use your own signing keys to sign an APK generated by APK Factory or choose the package name. This is an option being considered. If this is of interest to you, join the discussion on the dev-marketplace mailing list, or the Marketplace IRC channel.

- -

If I also have an Android native version of my app, can both be installed on an Android device?

- -

Unless you choose to use the APK package name created by APK Factory for your native Android app, both can be installed on an Android device. If you choose to use the same package name for your native Android app (which you'll sign with your own key) Android will refuse to install whichever version the user tries to install second. This is because the package names are the same but the signing keys are different, so Android considers the apps to be the same, but from different sources. Therefore Android will refuse to update one app with the other, since that would allow one developer to override another's app. The user will end up with the first version installed on their device.

- -
-

Because of the issues it may cause for users, it's highly recommended that you don't reuse the package name the APK Factory assigns to your app for a native Android version of your app.

-
- -

How can I test/debug APKs?

- -

We're working on a toolchain for testing and debugging an app on an Android device. The initial version will include a Node-based command-line tool for generating an APK you can install on the device and debug using Firefox's Remote Developer Tools.

- -

Also see

- - diff --git a/files/fr/mozilla/marketplace/options/packaged_apps/index.html b/files/fr/mozilla/marketplace/options/packaged_apps/index.html deleted file mode 100644 index 465763857c..0000000000 --- a/files/fr/mozilla/marketplace/options/packaged_apps/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Application packagée -slug: Mozilla/Marketplace/Options/Packaged_apps -translation_of: Archive/Mozilla/Marketplace/Options/Packaged_apps ---- -
-

Une application packagée est un .zip contenant toutes les ressources nécessaires (HMTL, CSS, JavaScript, manifest, etc.) au format Open Web APP plutôt que laisser les ressources sur un serveur web. Cet article contient une introduction aux applications packagée et des liens vers tout ce dont vous avez besoin de connaitre en tant que developpeur.

-
- -

Une application packagée est un fichier .zip qui contient tous les fichiers nécessaires au bon fonctionnement des Open Web App ainsi que le manifeste au dossier racine du zip. Le manifeste fournis les détails de l'application tels que la description, l'icône qui identifie l'application,... Le package est alors utilisé pour installer l'application dans Firefox OS, Firefox pour android et Firefox pour ordinateur. Une fois installée, l'app fonctionne sur l'appareil de l'utilisateur, mais est toujours capable d'accéder a des ressources externes, comme une base de données externe.

- -

Il y a trois types d'application packagée : les applications web, les applications privilégiées et les applications certifiées. Alors que les applications web sont distribuables sans contraintes, les applications privilégiées et certifiées sont numériquement signées pour permettre l'utilisation de privilèges et d'API certifiées. Les applications privilégiées sont signées durant le processus de revue des applications Marketplace, ce qui certifie qu'elles sont signées par des constructeurs d'appareils ou des opérateurs.

- -

En plus de ces possibilitées, les applications packagées permettent un temps de démarrage plus court car toutes les ressources sont déjà téléchargées car installées. Cette fonctionalité fait des applications packagées l'approche recomandée pour fournir des Open Web App aux téléphones Firefox OS et Android et pour Firefox pour ordinateur.

- -
-

Note : Actuellement, Firefox Marketplace supporte les applications web et privilégiées. De plus, Firefox Marketplace supporte les applications payantes pour Firefox OS seulement et les applications gratuites pour Firefox pour Android et Firefox pour ordinateur. Le support des applications payantes pour toutes le plateformes est en développement.

-
- -

Type d'applications packagées

- -

Il y a trois types d'application packagée : les applications web, les applications privilégiées et les applications certifiées. Chaque type d'application packagée correspond a un niveau du modèle de sécurité des applications implémenté dans Firefox OS. Cette section fourni des informations sur chaque type d'application packagée.

- -

Application Web

- -

Une application web est celle qui n'utilise pas de privilège ou de certification. Quand elle est soumise au Marketplace, elle est signée, mais cela ne permet pas d'utiliser les privilèges ou les certifications. Ces applications ne sont pas sujettes aux  politiques de sécurité des contenus nécessaires aux applications certifiées et privilégiées.

- -

Ce type d'application packagée ne requière pas le champ field dans son fichier manifest.webapp car la valeur par défaut (web) est correcte.

- -

Les applications web peuvent être auto-publiées ou distribuées via le Firefox Marketplace. Elles peuvent aussi être fournies aux utilisateurs via le mécanisme d'application hébergée.

- -

Application privilégiée

- -

Une application privilégiée peut-être considérée comme l'équivalent des applications natives sur des plateformes comme iOS et Android. Durant sa soumission au Firefox Marketplace, ce type d'application passe par un processus spécial. En effet, cela donne au utilisateurs de ces applications l'assurance qu'elles ont été soigneusement revues pour de potentiels problèmes de sécurité, de vie privée ou de fonctionnement.

- -

Pour spécifier qu'une application est privilégiée, ajoutez le type field dans le manifest.webapp et passez-le à privileged. Chaque API privilégiée que votre application nécessite doit être spécifiée dans le champ permissions du manifeste.

- -

Vous devez mettre les CSP suivantes dans le manifeste d'une application privilégiée :

- -
"default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'"
- -

Ces applications ne peuvent être distribuées que via le Firefox Marketplace.

- -

Application certifiée

- -
-

Les applications certifiées ne sont généralement pas disponibles pour les développeurs tiers et ne sont pas distribuées via le Firefox Marketplace. Le but sur le long terme est que toutes les API nécessitant le niveau certifié ne nécessitent plus que le niveau privilégié. Si vous voulez voir une API particulière devenir disponible, venez nous en parler sur la mailling list dev-webapps.

-
- -

Une application certifiée permet l'utilisation d'API certifiées, qui permettent d'accéder aux fonctions critiques du système. Contrairement aux applications privilégiées, les permissions d'API pour les applications certifiées sont implicites et donc toutes activées par défaut sans l'approbation explicite de l'utilisateur. Une application certifiée doit être approuvée pour un constructeur ou un opérateur.

- -

Pour spécifiée qu'elle est certifiée, l'application doit contenir le champ field avec la valeur certified dans le manifest.webapp. Chaque API privilégiée que votre application nécessite doit être spécifiée dans le champs permissions du manifeste.

- -

Vous devez mettre les CSP suivantes dans le manifeste d'une application privilégiées :

- -
"default-src *; script-src 'self'; object-src 'none'; style-src 'self'"
- -

Ceci a pour effet d'implémenter des règles plus strictes pour les CSP par rapport aux applications certifiées. Si vous voulez comprendre les raisons derrières ces motivations, lisez la politique des CSP par défaut et le bug 768029.

- -

Les applications certifiées sont pré-chargées dans les appareils par les constructeurs et les opérateurs.

- -

Tester des applications packagées

- -

Pour installer des applications dans le simulateur Firefox OS ou directement dans un téléphone, voyez le guide d'utilisation du manager d'application. Vous pouvez aussi installer sur un appareil via un serveur web en suivant le guide pour publier des applications par vous-mêmes.  N'oubliez pas que si vous déployez par vous-même, seules les applications web pourront être installées.

- -

Publiez votre application packagée

- -

Vous avez deux options pour publier vos applications : le Firefox Marketplace ou par vous-même.

- -

Publier sur le Firefox Marketplace

- -

Le processus pour publier une application packagée est décrit dans la section parlant de la publication d'application.

- -

Quand vous soumettez votre application, le fichier zip est stockée sur le Firefox Marketplace et celui-ci génère un nouveau manifest appellé mini-manifeste, basé sur votre manifeste. Quand un utilisateur installe votre application, le mini-manifeste est passé à la fonction Apps.installPackage() qui va l'installer. Ce mini-manifeste est utilisé seulement pour des questions d'installation et de mise à jour et n'est pas utilisé par votre application pour fonctionner.

- -

La publier vous-même

- -

Il est possible de publier vous-même votre application en dehors du Firefox Marketplace via votre propre serveur web. Vous trouverez des détails sur la page dédiée à ce sujet.

- -

Mettre a jour votre application

- -

Pour des informations sur la mise à jour d'application, voyez la page dédiée à ce sujet.

- -

Plus d'information

- - - -

 

diff --git a/files/fr/mozilla/marketplace/options/self_publishing/index.html b/files/fr/mozilla/marketplace/options/self_publishing/index.html deleted file mode 100644 index cc1b852940..0000000000 --- a/files/fr/mozilla/marketplace/options/self_publishing/index.html +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: Auto-publication d'application -slug: Mozilla/Marketplace/Options/Self_publishing -translation_of: Archive/Mozilla/Marketplace/Options/Self_publishing ---- -
-

Il y a des circonstances où il n'est pas souhaitable de rendre une application disponible sur le Firefox Marketplace. C'est le cas, lorsque l'on veut distribuer l'application uniquement au membre d'une organisation ou bien lorsque l'application est encore en phase de test privé. Cette page explique comment publier sa propre application en dehors du Marketplace.

-
-

Les Open Web Apps sont installables sous Firefox OS, Firefox pour android et Firefox pour desktop en utilisant {{ domxref("Apps.install") }} ou {{ domxref("Apps.installPackage") }}. Dans les deux cas, ces APIs envoient l'URL du manifeste décrivant l'application à installer. Ainsi afin de publier soi-même son application, les pré-requis minimaux sont:

-
    -
  1. Un serveur où le manifest de l'application est accessible.
  2. -
  3. Un serveur où l'application est accessible pour les applications hébergées et pour les applications empaquetées le fichier ZIP contenant l'application.
  4. -
  5. Un code sur un site web appelant {{ domxref("Apps.install") }} ou {{ domxref("Apps.installPackage") }} selon la situation.
  6. -
-

Limitations

-

Avant de publier vous-même votre Open Web Apps, vous devriez garder en mémoires les limitations suivantes:

- -

Auto-publication d'applications empaquetées

-

Vous pouvez auto-publier votre application empaquetée en hébergeant son fichier ZIP ainsi qu'un mini-manifeste associé sur un serveur. Le mini-manifeste doit être dans le même dossier que le fichier ZIP car il permet d'identifier l'application lors de l'installation. Une fois le mini-manifeste créé, il ne reste plus qu'à créer un script invoquant {{ domxref("Apps.installPackage") }} avec l'url du mini-manifeste pour installer l'application. Voyons maintenant en détails les différentes étapes:

-
    -
  1. -

    Empaquetez le contenu de votre application dans une archive ZIP et donnez lui le nom package.zip.  L'archive doit contenir toutes les ressources de l'application ainsi que que le manifeste principal.

    -
    -

    Attention: Le manifeste doit être à la racine de l'archive.

    -
    -
  2. -
  3. Créez un fichier appelé manifest.webapp et ajoutez le contenu ci-dessous. Ce fichier est connu sous le nom de mini-manifeste, car il s'agit d'une version simplifiée du fichier manifeste contenu dans l'archive de l'application. Il est utilisé par {{ domxref("Apps.installPackage") }} pour entreprendre l'installation de l'application. Pour plus de détails, référez-vous à la documentation sur les champs du mini-manifeste ci-dessous. -
    {
    -    "name": "Le nom de mon application",
    -    "package_path" : "<a class="LinkyMobile-ext" href="http://my-server.com/my-app-directory/my-app.zip" title="Linkification: http://my-server.com/my-app-directory/my-app.zip">http://my-server.com/my-app-directory/package.zip</a>",
    -    "version": "1",
    -    "developer": {
    -        "name": "A. Developpeur",
    -        "url": "<a class="LinkyMobile-ext" href="http://my-server.com" title="Linkification: http://my-server.com">http://my-server.com</a>"
    -    }
    -}
    -
  4. -
  5. Créez le script qui installera l'application. Pour cela, l'exemple ci-dessous utilise une simple page HTML nommée index.html ,  mais vous pouvez invoquer le script dans n'importe qu'elle méthode de votre site web. Le javaScript de cette page appelle l'API d'installation d'application empaquetée ({{ domxref("Apps.installPackage") }}) et inclut des notifications indiquant si l'installation a réussi ou non. -
    <html>
    -  <body>
    -    <p>Page d'installation de l'application empaquetée</p>
    -    <script>
    -      // Cette URL doit être une URL compléte
    -      var manifestUrl = '<a class="LinkyMobile-ext" href="http://my-server.com/my-app-directory/package.manifest" title="Linkification: http://my-server.com/my-app-directory/package.manifest">http://my-server.com/my-app-directory/manifest.webapp</a>';
    -      var req = navigator.mozApps.installPackage(manifestUrl);
    -      req.onsuccess = function() {
    -        alert(this.result.origin);
    -      };
    -      req.onerror = function() {
    -        alert(this.error.name);
    -      };
    -    </script>
    -  </body>
    -</html>
    -
  6. -
  7. Copiez les fichiers package.zip, package.manifest, et index.html sur votre serveur dans le dossier choisi (my-app-directory dans cet exemple).
  8. -
  9. Maintenant vous pouvez installer l'application sur un appareil compatible. Ouvrez le fichier index.html (dans cet exemple le chemin de ce fichier est http://mon-serveur.com/App-directory/index.html)  et vous aurez une fenêtre demandant une confirmation avant d'installer l'application. Une fois l'installation terminée, vous aurez une indication sur le résultat de l'installation.
  10. -
-
-

Astuce: Vous pouvez héberger localement une application empaquetée et le tester sur un appareil. Le serveur et l'appareil doivent pouvoir communiquer sur le réseau local. N'oubliez pas d'indiquer le numéro port si vous n'utilisez pas le port standard, par exemple: http://10.10.12.1:8080/package.zip.

-
-

Champs du mini-manifeste

-

Dans le cas d'auto-publication, il est nécessaire de créer un mini-manifeste. Si l'application est est publiée sur le Firefox Marketplace, le mini-manifeste est généré automatiquement à partir du manifeste de l'application.

-

Le meilleur moyen de créer le mini-manifeste est de copier le manifeste de l'application et de le modifer de maniére apropriée. Ainsi les champs name, version, developer et locales fields seront exactement les mêmes dans les deux manifestes. Il ne vous reste plus qu'à ajouter les champs package_path, release_notes et size:

-
-
- package_path (requis)
-
- Le chemin absolu (URL compléte:  http://mon-serveur.com/App-directory/manifest.webapp) vers l'archive de l'application.
-
- release_notes (optionel)
-
- Notes de version de l'application. Sur le Firefox Marketplace cette information est fournie lors du processus de soumission.
-
-
-
- size (optionel)
-
- La taille de l'archive en octets. Cette information est utilisée par {{ domxref("Apps.installPackage") }} pour fournir une barre de progression lors de l'installation.
-
-

Voici un exemple d'un mini-manifeste:

-
{
-  "name": "My app",
-  "package_path": "<a class="LinkyMobile-ext" href="http://thisdomaindoesnotexist.org/myapp.zip" title="Linkification: http://thisdomaindoesnotexist.org/myapp.zip">http://thisdomaindoesnotexist.org/myapp.zip</a>",
-  "version": "1.0",
-  "size": 172496,
-  "release_notes": "Première publication",
-  "developer": {
-    "name": "Dupont Michel",
-    "url": "<a class="LinkyMobile-ext" href="http://thisdomaindoesnotexist.org/" title="Linkification: http://thisdomaindoesnotexist.org/">http://thisdomaindoesnotexist.org/</a>"
-  },
-  "locales": {
-    "fr-FR": {
-      "name": "Mon application"
-    },
-    "se-SE": {
-      "name": "Min balla app"
-    }
-  },
-  "icons": {
-    "16": "/icons/16.png",
-    "32": "/icons/32.png",
-    "256": "/icons/256.png"
-  }
-}
-
-

Les autres champs de cet exemple sont:

-
-
- name (requis)
-
- Le nom de l'application. La longueur maximale est de 128 caractères.
-
- version (optionel)
-
- Le numéro de version de cette application.
-
- developer  (optionel)
-
- Information sur le développeur, contenant les champs name (nom) et url (adresse). Les informations saisies doivent correspondre avec celles du fichier manifest dans l'archive ZIP.
-
- locales (optionel)
-
- Information sur le langage, au format xx-YY.
-
- icons (optionel)
-
- Les icones utilisés par cette application.
-
-

Les autres champs de l'exemple proviennent du manifeste de l'application voir la page associée pour plus d'information.

-

Auto-publication d'application hébergée

-

L'auto-publication d'applications hébergé est similaire à celle des applications empaquetées. Il faut toujours créer un manifeste pour l'application voir la page associée. Le code pour installer l'application hébergé est le même que les applications hébergées. La seule différence est que le manifeste peut utiliser des URLs relatives

-

Voir aussi

- diff --git a/files/fr/mozilla/marketplace/publication/index.html b/files/fr/mozilla/marketplace/publication/index.html deleted file mode 100644 index f9e798d4d7..0000000000 --- a/files/fr/mozilla/marketplace/publication/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Publication -slug: Mozilla/Marketplace/Publication -tags: - - Structure seule - - 'l10n:priority' -translation_of: Archive/Mozilla/Marketplace/Publishing/Introduction ---- -

REDIRECTION Introduction — App Publishing [en-US] (Introduction - publication d'applications)

diff --git a/files/fr/mozilla/marketplace/publication/marketplace_critere_revue/index.html b/files/fr/mozilla/marketplace/publication/marketplace_critere_revue/index.html deleted file mode 100644 index ff2a0a5e2c..0000000000 --- a/files/fr/mozilla/marketplace/publication/marketplace_critere_revue/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Critères d'évaluation du Marketplace -slug: Mozilla/Marketplace/Publication/Marketplace_critere_revue -translation_of: Archive/Mozilla/Marketplace/Publishing/Marketplace_review_criteria ---- -
-

Cet article décrit les différents prérequis qu'une application doit satisfaire avant de pouvoir être publiée par le Firefox Marketplace. Ces critères sont pensés pour répondre aux besoins des développeurs d'applications du Firefox Marketplace autant qu'à ceux de leurs utilisateurs. Les développeurs attendent des critères équitables, universels et réalistes auxquels ils peuvent se fier pour concrétiser leurs idées. D'un autre côté, les utilisateurs veulent être assurés que les applications soient sûres, fonctionnelles et fassent bien ce qu'elles sont censées faire. Les prérequis listés ci-dessous servent à trouver un équilibre délicat entre ces différents besoins.

-
- -

D'après Mozilla, les modalités d'une évaluation d'application sont :

- - - -

Sécurité

- -

Tous les détails de l'architecture de sécurité des applications sont disponibles ici : https://wiki.mozilla.org/Apps/Security

- - - -

Confidentialité

- -

Le développeur devra fournir un lien vers la politique de confidentialité utilisée pour son application lors de sa soumission. Il n'y a, en revanche, pas de restriction concernant le format ou le contenu de cette politique de confidentialité. N'hésitez-pas à utiliser notre modèle de politique de confidentialité. Regardez également nos directives sur la politique de confidentialité.

- -

Contenu

- - - -

Règles de contenu

- -

Cette liste décrit les types de contenu qui ne sont pas appropriés sur le Firefox Marketplace. Cette liste est indicative, non définitive, et peut donc être mise à jour. Si une application est jugée contraire à ces règles de contenu, Mozilla a le droit de retirer immédiatement l'application du Marketplace Firefox.

- - - -

Fonctionnalité

- - - -

Ergonomie

- - - -

Politique de blocage

- -

Nous espérons que nous ne devrons jamais l'utiliser, mais nous nous réservons le droit de supprimer ("blocklist" (en) "liste noire" ou "liste de blocage" (fr)) toute application publiée qui est plus tard considérée comme contraire aux exigences de sécurité, de confidentialité ou de contenu ; ou des applications qui dégradent sérieusement les performances du système ou du réseau. Les développeurs seront informés de la situation avant qu'une application soit bloquée ; ils seront présupposés être de bons citoyens, à moins que nous ayons des preuves précises. Nous recevrons une assistance complète de l'équipe d'évaluation des applications pour communiquer sur ce qui se passe et résoudre le problème. Des exemples spécifiques, de situations où la liste de blocage est justifiée, comprennent :

- - - -

Plus d'informations

- -

Les ressources suivantes fournissent plus d'informations sur le processus d'évaluation des applications et les commentaires :

- - - -

 

diff --git a/files/fr/mozilla/marketplace/publication/updating_apps/index.html b/files/fr/mozilla/marketplace/publication/updating_apps/index.html deleted file mode 100644 index 861bd4447f..0000000000 --- a/files/fr/mozilla/marketplace/publication/updating_apps/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Mises à jour des applications -slug: Mozilla/Marketplace/Publication/Updating_apps -translation_of: Archive/Mozilla/Marketplace/Publishing/Updating_apps ---- -
-

Cet article explique le processus par lequel vous mettez à jour des applications publiées, auto-éditées ou publiées sur le Firefox Marketplace.

-
- -
-

Une fois qu'une application a été installée par un utilisateur, il n'est plus possible de changer son nom par une mise à jour. De nouvelles installations cependant, prendront le nouveau nom de l'application. Ceci est une mesure de sécurité pour éviter les changements de nom sans scrupules.

-
- -

Mise à jour des applications hébergées

- -

Hosted Apps respectent les règles normales de mise en cache Web, et peuvent utiliser des mécanismes avancés pour améliorer le démarrage ou pour permettre une utilisation hors ligne, tels que AppCache. Par conséquent, il n'y a normalement pas de règles spéciales pour la mise à jour des applications - il vous suffit de mettre à jour l'application sur votre site.

- -

Cependant, quelques changements sur vos applications peuvent impliquer des mises à jour du manifeste.

- -

Changer le contenu d'un manifeste

- -

Pour mettre à jour les caractéristiques d'une application publiée - comme le nom d'application, le nom du développeur, les langues, les icônes - vous appliquez simplement ces changements au manifeste que vous hébergez. Si vous avez soumis l'application au Marketplace de Firefox et qu'un de ces changements est considéré comme significatif, l'application est marquée pour évaluation.

- -

Les moments d'exécution sur le Web et l'OS de Firefox devraient automatiquement détecter ces changements et déclencher une mise à jour chez l'utilisateur. Cependant, vous pouvez manuellement déclencher des mises à jour en inscrivant un champ de version dans le manifeste d'application. Votre application peut alors vérifier la version en inspectant la valeur retournée {{ domxref ("Apps.getInstalled") }} . Si la version installée de l'utilisateur n'est pas à jour, votre application peut déclencher une mise à jour utilisant {{ domxref ("Apps.install") }}. Notez que quelques changements à un manifeste, et en conséquence une installation, peuvent exiger l'approbation de l'utilisateur avant l'exécution de la mise à jour.

- -

La valeur de version n'est pas utilisée par l'OS de Firefox ni pendant les temps d'exécution sur le Web, donc vous pouvez utiliser n'importe quel schéma de version vous convenant.

- -

Changement de l'emplacement d'un manifeste

- -

Vous pouvez vouloir changer l'emplacement du fichier du manifeste de votre application. Typiquement, vous ferez cela pour déplacer l'application vers un nouveau domaine ou vers un sous-domaine qui vous permettront de livrer plusieurs applications hébergées.

- -

Si vous voulez  faire ceci pour des applications soumises au Marketplace de Firefox, retournez à la soumission d'application et dans la page " Edit Details " changez la valeur de l'URL du manifeste. La suite dépendra du statut de votre application :

- - - -

Avis sur les applications mises à jour

- -

Lorsqu'une applicationi hébergée est signalée pour évaluation à la suite d'une mise à jour, ce qui suit se produit :

- - - -
-

Dans la mesure du possible, vous devez éviter de changer l'emplacement de l'application / manifeste après la publication dans le Marketplace de Firefox, en raison de l'impact sur l'utilisateur. Un changement de l'emplacement du manifeste se traduira par une nouvelle instance installée de l'application lorsque {{ domxref("Apps.install") }} est invoquée . De nombreux utilisateurs trouveront cela perturbant.

-
- -

Mise à jour des applications empaquetées

- -

Les Packaged Apps ont un processus de mise à jour différent de celui des applications hébergées. Pour mettre à jour une application empaquetée, vous téléchargez une nouvelle version du fichier zip sur le Marketplace de Firefox. L'application mise à jour est ensuite évaluée et, lorsqu'elle est approuvée, publiée sur le Marketplace.  Cela déclenche une mise à jour de toutes les versions installées. Les utilisateurs de l'OS Firefox peuvent également demander une mise à jour en utilisant l'application Paramètres. Pour télécharger une nouvelle version de votre application, connectez-vous au Marketplace avec le même compte que pour la présentation précédente, puis cliquez sur l'icône d'engrenage en haut à droite et cliquez sur « My Submissions » (mes soumissions).   Sous l'en-tête « Manage My Submissions » (gérer mes soumissions) et pour l'application en question, cliquez sur "Status & Versions." De là, faites défiler vers le bas et cliquez sur " Select a File " (Sélectionner un fichier) sous "Upload New Version" (Télécharger la nouvelle version).  À partir de là, vous pouvez choisir de ne pas avoir une  publication automatique de votre application après son évaluation en décochant la case  "Publish my app in the Firefox Marketplace as soon as it's reviewed". Les appareils des utilisateurs vérifieront chaque jour l'existence de mises à jour d'applications, et verront une notification d'une mise à jour disponible pour son téléchargement à leur discrétion.

- -

Would you like to publish to marketplace upon review?

- - diff --git a/files/fr/mozilla/marketplace/publish/index.html b/files/fr/mozilla/marketplace/publish/index.html deleted file mode 100644 index 387fc894de..0000000000 --- a/files/fr/mozilla/marketplace/publish/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Publier sur le Firefox Marketplace -slug: Mozilla/Marketplace/Publish -translation_of: Archive/Mozilla/Marketplace/Publish ---- -
-

Documentation pour la publication d'une application sur Firefox Marketplace.

-
- -
-
-
-
App testing and troubleshooting
-
Un petit guide pour tester et dépanner, à suivre avant de soumettre votre application sur Firefox Marketplace.
-
Proposer une application sur le Firefox Market
-
Ce guide étape par étape vous aidera à soumettre votre application avec succès à Firefox Marketplace.
-
Critères d'évaluation du Marketplace
-
Une explication des critères qu'une application doit respecter pour être publiée sur Firefox Marketplace; en suivant les règles énoncées dans cet article, vous pouvez faciliter le processus de publication de votre application.
-
Marketplace screenshot criteria
-
Règles pour les captures d'écran à soumettre avec votre application afin de maximiser son impact et sa qualité sur le marché.
-
-
-
- -

 

diff --git a/files/fr/mozilla/marketplace/publishing/submit/index.html b/files/fr/mozilla/marketplace/publishing/submit/index.html deleted file mode 100644 index 265a1ad776..0000000000 --- a/files/fr/mozilla/marketplace/publishing/submit/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Submit -slug: Mozilla/Marketplace/Publishing/Submit -tags: - - NeedsTranslation - - TopicStub -translation_of: Archive/Mozilla/Marketplace/Publishing/Submit ---- -

This section describes the process for submitting an app to Firefox Marketplace

-

Residual details: https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Submitting_an_app

diff --git a/files/fr/mozilla/mathml_project/index.html b/files/fr/mozilla/mathml_project/index.html deleted file mode 100644 index c5286ce4ab..0000000000 --- a/files/fr/mozilla/mathml_project/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Mozilla MathML Project -slug: Mozilla/MathML_Project -tags: - - MathML - - MathML Project - - NeedsTranslation - - TopicStub -translation_of: Mozilla/MathML_Project ---- -

The Mozilla MathML project is Mozilla's project to build and enhance MathML support within Firefox and other Mozilla-based applications. For a quick overview, see the slides for the innovation fairs at Mozilla Summit 2013.

- -

Updates

- -

Mathzilla

- - - -

August 11, 2013

- -

Math(ML) in Education Digital Content

- -

August 6, 2013

- -

Math in the browser

- -

May 3, 2013

- -

Firefox Nightly passes the MathML Acid2 test ; Slashdot article ; ghacks article.

- -

January 10, 2013

- -

Chrome 24 has been released with basic MathML support!

- -

update: MathML disabled again in Chrome 25 :-(

- -

December 1, 2012

- -

All the pages of the Mozilla MathML Project have now been migrated to MDN!

- -

November 26, 2012

- -

Math typesetting - Why are we leaving such an important issue to under-resourced volunteers and small organisations?

- -

Community

- - - - - - - -

Sample MathML Documents

- - - -

Create MathML Documents

- - - -
-

Original Document Information

- - -
diff --git a/files/fr/mozilla/mathml_project/mathml_torture_test/index.html b/files/fr/mozilla/mathml_project/mathml_torture_test/index.html deleted file mode 100644 index 10e11ba7ce..0000000000 --- a/files/fr/mozilla/mathml_project/mathml_torture_test/index.html +++ /dev/null @@ -1,1445 +0,0 @@ ---- -title: Test de torture MathML -slug: Mozilla/MathML_Project/MathML_Torture_Test -tags: - - MathML -translation_of: Mozilla/MathML_Project/MathML_Torture_Test ---- -

Test de torture de MathML

-
-

HTML Content

-
<p>
-  Render mathematics with:
-  <select name="MathFont" id="MathFont">
-    <option value="Default" selected="selected">Default fonts</option>
-    <option value="Asana">Asana</option>
-    <option value="MathJax">MathJax</option>
-    <option value="STIX">STIX General</option>
-    <option value="AsanaExp">Asana (experimental)</option>
-    <option value="Cambria">Cambria (experimental)</option>
-    <option value="TeXGyreBonum">TeX Gyre Bonum (experimental) </option>
-    <option value="TeXGyrePagella">TeX Gyre Pagella (experimental) </option>
-    <option value="TeXGyreTermes">TeX Gyre Termes (experimental) </option>
-    <option value="LatinModern">Latin Modern (experimental) </option>
-    <option value="Lucida">Lucida (experimental) </option>
-    <option value="NeoEuler">Neo Euler (experimental) </option>
-    <option value="STIXWord">STIX Word (experimental) </option>
-    <option value="XITS">XITS (experimental) </option>
-    <option value="XITSRTL">XITS RTL (experimental) </option>
-  </select> <br/>
-</p>
-
-<table>
-
-<tr>
-<td></td>
-<th scope="col">As rendered by TeX</th>
-<th scope="col">As rendered by your browser</th></tr>
-
-<tr>
-<td>1</td>
-
-<td><img src="https://developer.mozilla.org/@api/deki/files/4578/=ex1.png" width="38" height="22"
-alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msup>
-    <mi>x</mi>
-    <mn>2</mn>
-  </msup>
-  <msup>
-    <mi>y</mi>
-
-    <mn>2</mn>
-  </msup>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>2</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4579/=ex2.png" width="30" height="17" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<!--
-<mrow>
-  <msub><mi></mi><mn>2</mn></msub>
-  <msub><mi>F</mi><mn>3</mn></msub>
-</mrow>
--->
-<mrow>
-
-  <mmultiscripts>
-    <mi>F</mi>
-    <mn>3</mn><none/>
-    <mprescripts/>
-    <mn>2</mn><none/>
-  </mmultiscripts>
-</mrow>
-</math>
-
-</td></tr>
-
-<tr>
-<td>3</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4586/=ex21.png" width="58" height="47" alt="TeXbook, 17-17.1" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mfrac>
-    <mrow>
-      <mi>x</mi>
-      <mo>+</mo>
-
-      <msup>
-        <mi>y</mi>
-        <mn>2</mn>
-      </msup>
-    </mrow>
-    <mrow>
-      <mi>k</mi>
-
-      <mo>+</mo>
-      <mn>1</mn>
-    </mrow>
-  </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>4</td>
-
-<td><img src="https://developer.mozilla.org/@api/deki/files/4587/=ex22.png" width="76" height="25" alt="TeXbook, 17-17.1" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mi>x</mi>
-  <mo>+</mo>
-  <msup>
-    <mi>y</mi>
-    <mfrac>
-
-      <mn>2</mn>
-      <mrow>
-        <mi>k</mi>
-        <mo>+</mo>
-        <mn>1</mn>
-      </mrow>
-    </mfrac>
-
-  </msup>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>5</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4588/=ex23.png" width="30" height="42" alt="TeXbook, 17-17.1" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mfrac>
-    <mi>a</mi>
-
-    <mrow>
-      <mi>b</mi>
-      <mo>/</mo>
-      <mn>2</mn>
-    </mrow>
-  </mfrac>
-</mrow>
-</math>
-
-</td></tr>
-
-<tr>
-<td>6</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4589/=ex24.png" width="220" height="138" alt="TeXbook, 17.5-17.6" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msub>
-    <mi>a</mi>
-    <mn>0</mn>
-
-  </msub>
-  <mo>+</mo>
-  <mfrac>
-    <mn>1</mn>
-    <mstyle displaystyle="true" scriptlevel="0">
-      <msub>
-        <mi>a</mi>
-
-        <mn>1</mn>
-      </msub>
-      <mo>+</mo>
-      <mfrac>
-        <mn>1</mn>
-        <mstyle displaystyle="true" scriptlevel="0">
-          <msub>
-
-            <mi>a</mi>
-            <mn>2</mn>
-          </msub>
-          <mo>+</mo>
-          <mfrac>
-            <mn>1</mn>
-            <mstyle displaystyle="true" scriptlevel="0">
-
-              <msub>
-                <mi>a</mi>
-                <mn>3</mn>
-              </msub>
-              <mo>+</mo>
-              <mfrac>
-                <mn>1</mn>
-
-                <mstyle displaystyle="true" scriptlevel="0">
-                  <msub>
-                    <mi>a</mi>
-                    <mn>4</mn>
-                  </msub>
-                </mstyle>
-              </mfrac>
-            </mstyle>
-          </mfrac>
-
-        </mstyle>
-      </mfrac>
-    </mstyle>
-  </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>7</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4590/=ex25.png" width="200" height="85" alt="TeXbook, 17.5-17.6" /></td>
-<td>
-
-<math>
-<mrow>
-  <msub>
-    <mi>a</mi>
-    <mn>0</mn>
-  </msub>
-  <mo>+</mo>
-  <mfrac>
-
-    <mn>1</mn>
-    <mrow>
-      <msub>
-        <mi>a</mi>
-        <mn>1</mn>
-      </msub>
-      <mo>+</mo>
-
-      <mfrac>
-        <mn>1</mn>
-        <mrow>
-          <msub>
-            <mi>a</mi>
-            <mn>2</mn>
-          </msub>
-
-          <mo>+</mo>
-          <mfrac>
-            <mn>1</mn>
-            <mrow>
-              <msub>
-                <mi>a</mi>
-                <mn>3</mn>
-
-              </msub>
-              <mo>+</mo>
-              <mfrac>
-                <mn>1</mn>
-                <mrow>
-                  <msub>
-                    <mi>a</mi>
-
-                    <mn>4</mn>
-                  </msub>
-                </mrow>
-              </mfrac>
-            </mrow>
-          </mfrac>
-        </mrow>
-      </mfrac>
-
-    </mrow>
-  </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>8</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4591/=ex26.png" width="54" height="50" alt="TeXbook, 17.5-17.6" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mo>(</mo>
-
-  <mfrac linethickness="0">
-    <mi>n</mi>
-    <mrow>
-      <mi>k</mi>
-      <mo>/</mo>
-      <mn>2</mn>
-    </mrow>
-
-  </mfrac>
-  <mo>)</mo>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>9</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4592/=ex27.png" width="237" height="50" alt="TeXbook, 17.7" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mrow>
-
-
-    <mo>(</mo>
-    <mfrac linethickness="0">
-      <mi>p</mi>
-      <mn>2</mn>
-    </mfrac>
-    <mo>)</mo>
-  </mrow>
-
-  <msup>
-    <mi>x</mi>
-    <mn>2</mn>
-  </msup>
-  <msup>
-    <mi>y</mi>
-    <mrow>
-
-      <mi>p</mi>
-      <mo>-</mo>
-      <mn>2</mn>
-    </mrow>
-  </msup>
-  <mo>-</mo>
-  <mfrac>
-
-    <mn>1</mn>
-    <mrow>
-      <mn>1</mn>
-      <mo>-</mo>
-      <mi>x</mi>
-    </mrow>
-  </mfrac>
-
-  <mfrac>
-    <mn>1</mn>
-    <mrow>
-      <mn>1</mn>
-      <mo>-</mo>
-      <msup>
-        <mi>x</mi>
-
-        <mn>2</mn>
-      </msup>
-    </mrow>
-  </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>10</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4593/=ex29.png" width="116" height="63" alt="TeXbook, 17.7-17.8" /></td>
-
-<td>
-<math display="block">
-<mrow>
-  <munder>
-    <mo>&sum;</mo>
-    <mrow>
-      <mfrac linethickness="0">
-        <mrow>
-          <mn>0</mn>
-          <mo>&leq;</mo>
-
-          <mi>i</mi>
-          <mo>&leq;</mo>
-          <mi>m</mi>
-        </mrow>
-        <mrow>
-          <mn>0</mn>
-          <mo>&lt;</mo>
-
-          <mi>j</mi>
-          <mo>&lt;</mo>
-          <mi>n</mi>
-        </mrow>
-      </mfrac>
-    </mrow>
-  </munder>
-  <mi>P</mi>
-
-  <mo stretchy="false">(</mo>
-  <mi>i</mi>
-  <mo>,</mo>
-  <mi>j</mi>
-  <mo stretchy="false">)</mo>
-</mrow>
-</math>
-
-</td></tr>
-
-<tr>
-<td>11</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4580/=ex3.png" width="27" height="18" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<mrow>
-<msup>
-  <mi>x</mi>
-  <mrow>
-    <mn>2</mn>
-
-    <mi>y</mi>
-  </mrow>
-</msup>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>12</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4594/=ex30.png" width="175" height="61" alt="TeXbook, 17.8" /></td>
-<td>
-<math display="block">
-<mrow>
-
-  <munderover>
-    <mo>&sum;</mo>
-    <mrow>
-      <mi>i</mi>
-      <mo>=</mo>
-      <mn>1</mn>
-    </mrow>
-
-    <mi>p</mi>
-  </munderover>
-  <munderover>
-    <mo>&sum;</mo>
-    <mrow>
-      <mi>j</mi>
-      <mo>=</mo>
-
-      <mn>1</mn>
-    </mrow>
-    <mi>q</mi>
-  </munderover>
-  <munderover>
-    <mo>&sum;</mo>
-    <mrow>
-      <mi>k</mi>
-
-      <mo>=</mo>
-      <mn>1</mn>
-    </mrow>
-    <mi>r</mi>
-  </munderover>
-  <msub>
-    <mi>a</mi>
-
-    <mrow>
-      <mi>i</mi>
-      <mi>j</mi>
-    </mrow>
-  </msub>
-  <msub>
-    <mi>b</mi>
-
-    <mrow>
-      <mi>j</mi>
-      <mi>k</mi>
-    </mrow>
-  </msub>
-  <msub>
-    <mi>c</mi>
-
-    <mrow>
-      <mi>k</mi>
-      <mi>i</mi>
-    </mrow>
-  </msub>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-
-<td>13</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4595/=ex31.png" width="405" height="100" alt="TeXbook, 17.9-17.10" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msqrt>
-    <mn>1</mn>
-    <mo>+</mo>
-    <msqrt>
-      <mn>1</mn>
-
-      <mo>+</mo>
-      <msqrt>
-        <mn>1</mn>
-        <mo>+</mo>
-        <msqrt>
-          <mn>1</mn>
-          <mo>+</mo>
-
-          <msqrt>
-            <mn>1</mn>
-            <mo>+</mo>
-            <msqrt>
-              <mn>1</mn>
-              <mo>+</mo>
-              <msqrt>
-
-                <mn>1</mn>
-                <mo>+</mo>
-                <mi>x</mi>
-              </msqrt>
-            </msqrt>
-          </msqrt>
-        </msqrt>
-
-      </msqrt>
-    </msqrt>
-  </msqrt>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>14</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4596/=ex34.png" width="272" height="50" alt="TeXbook, 17.10" /></td>
-<td>
-<math display="block">
-<mrow>
-
-  <mrow>
-    <mo>(</mo>
-    <mfrac>
-      <msup>
-        <mo>&part;</mo>
-        <mn>2</mn>
-      </msup>
-      <mrow>
-
-        <mo>&part;</mo>
-        <msup>
-          <mi>x</mi>
-          <mn>2</mn>
-        </msup>
-      </mrow>
-    </mfrac>
-    <mo>+</mo>
-
-    <mfrac>
-      <msup>
-        <mo>&part;</mo>
-        <mn>2</mn>
-      </msup>
-      <mrow>
-        <mo>&part;</mo>
-        <msup>
-
-          <mi>y</mi>
-          <mn>2</mn>
-        </msup>
-      </mrow>
-    </mfrac>
-    <mo>)</mo>
-  </mrow>
-
-  <msup>
-    <mrow>
-      <mo minsize="1.5">|</mo>
-      <mi>&#x3C6; <!-- \varphi --></mi>
-      <mo stretchy="false">(</mo>
-      <mi>x</mi>
-      <mo>+</mo>
-
-      <mi mathvariant="normal">i</mi>
-      <mi>y</mi>
-      <mo stretchy="false">)</mo>
-      <mo minsize="1.5">|</mo>
-    </mrow>
-    <mn>2</mn>
-
-  </msup>
-  <mo>=</mo>
-  <mn>0</mn>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>15</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4581/=ex4.png" width="31" height="22" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-
-<math display="block">
-<mrow>
-  <msup>
-    <mn>2</mn>
-    <msup>
-      <mn>2</mn>
-      <msup>
-        <mn>2</mn>
-
-        <mi>x</mi>
-      </msup>
-    </msup>
-  </msup>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>16</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4597/=ex40.png" width="55" height="49" alt="TeXbook, 18.10-18.11" /></td>
-
-<td>
-<math display="block">
-<mrow>
-  <msubsup>
-    <mo stretchy="false">&int;</mo>
-    <mn>1</mn>
-    <mi>x</mi>
- </msubsup>
- <mfrac>
-
-   <mrow><mi>d</mi><mi>t</mi></mrow>
-   <mi>t</mi>
- </mfrac>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>17</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4599/=ex41.png" width="91" height="47" alt="TeXbook, 18.12-18.13" /></td>
-<td>
-
-<math display="block">
-<mrow>
-  <msub>
-    <mo>&#x222C; <!-- \iint --></mo>
-    <mi>D</mi>
-  </msub>
-  <mi>d</mi><mi>x</mi>
-  <space width="thinmathspace"/>
-
-  <mi>d</mi><mi>y</mi>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>18</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4600/=ex43.png" width="250" height="66" alt="TeXbook, 18.23" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mi>f</mi>
-
-  <mo stretchy="false">(</mo>
-  <mi>x</mi>
-  <mo stretchy="false">)</mo>
-  <mo>=</mo>
-  <mrow>
-    <mo>{</mo>
-
-    <mtable>
-      <mtr>
-        <mtd columnalign="center">
-          <mrow>
-            <mn>1</mn>
-            <mo>/</mo>
-            <mn>3</mn>
-
-          </mrow>
-        </mtd>
-        <mtd columnalign="left">
-          <mrow>
-            <mtext>if&nbsp;</mtext>
-            <mn>0</mn>
-            <mo>&leq;</mo>
-            <mi>x</mi>
-
-            <mo>&leq;</mo>
-            <mn>1</mn>
-            <mo>;</mo>
-          </mrow>
-        </mtd>
-      </mtr>
-      <mtr>
-        <mtd columnalign="center">
-
-          <mrow>
-            <mn>2</mn>
-            <mo>/</mo>
-            <mn>3</mn>
-          </mrow>
-        </mtd>
-        <mtd columnalign="center">
-
-          <mrow>
-            <mtext>if&nbsp;</mtext>
-            <mn>3</mn>
-            <mo>&leq;</mo>
-            <mi>x</mi>
-            <mo>&leq;</mo>
-            <mn>4</mn>
-
-            <mo>;</mo>
-          </mrow>
-        </mtd>
-      </mtr>
-      <mtr>
-        <mtd columnalign="center">
-          <mn>0</mn>
-        </mtd>
-
-        <mtd columnalign="left">
-          <mtext>elsewhere.</mtext>
-        </mtd>
-      </mtr>
-    </mtable>
-  </mrow>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>19</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4601/=ex44.png" width="101" height="44" alt="TeXbook, 18.23-18.24" /></td>
-<td>
-<math display="block">
-<mover>
-  <mrow>
-    <mi>x</mi>
-    <mo>+</mo>
-    <mo>...</mo>
-
-    <mo>+</mo>
-    <mi>x</mi>
-  </mrow>
-  <mover>
-    <mo>&OverBrace;</mo>
-    <mrow><mi>k</mi> <mspace width="thinmathspace"/> <mtext>times</mtext></mrow>
-  </mover>
-
-</mover>
-</math>
-</td></tr>
-
-<tr>
-<td>20</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4582/=ex5.png" width="25" height="13" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msub>
-    <mi>y</mi>
-    <msup>
-
-      <mi>x</mi>
-      <mn>2</mn>
-    </msup>
-  </msub>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>21</td>
-
-<td><img src="https://developer.mozilla.org/@api/deki/files/4602/=ex51.png" width="253" height="56" alt="TeXbook, 18.40" /></td>
-<td>
-<math display="block">
-<mrow>
-  <munder>
-    <mo>&sum;</mo>
-    <mrow>
-      <mi>p</mi>
-      <mtext>&nbsp;prime</mtext>
-    </mrow>
-
-  </munder>
-  <mi>f</mi>
-  <mo stretchy="false">(</mo>
-  <mi>p</mi>
-  <mo stretchy="false">)</mo>
-  <mo>=</mo>
-
-  <msub>
-    <mo stretchy="false">&int;</mo>
-    <mrow>
-      <mi>t</mi>
-      <mo>&gt;</mo>
-      <mn>1</mn>
-    </mrow>
-  </msub>
-
-  <mi>f</mi>
-  <mo stretchy="false">(</mo>
-  <mi>t</mi>
-  <mo stretchy="false">)</mo>
-  <mspace width="thinmathspace"/>
-  <mi>d</mi>
-  <mi>&pi;</mi>
-  <mo stretchy="false">(</mo>
-  <mi>t</mi>
-  <mo stretchy="false">)</mo>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>22</td>
-
-<td><img src="https://developer.mozilla.org/@api/deki/files/4603/=ex52.png" width="159" height="81" alt="TeXbook, 18.41" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mo stretchy="false">{</mo>
-  <munder>
-    <mrow>
-      <mover>
-        <mrow>
-          <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded>
-          <mi>a</mi>
-          <mo>,</mo>
-          <mo>...</mo>
-          <mo>,</mo>
-          <mi>a</mi>
-        </mrow>
-
-        <mover>
-          <mo>&OverBrace;</mo>
-          <mrow>
-            <mi>k</mi>
-            <mtext>&nbsp;</mtext>
-            <mi>a</mi>
-            <mtext>'s</mtext>
-
-          </mrow>
-        </mover>
-      </mover>
-      <mo>,</mo>
-      <mover>
-        <mrow>
-          <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded>
-          <mi>b</mi>
-          <mo>,</mo>
-          <mo>...</mo>
-          <mo>,</mo>
-          <mi>b</mi>
-        </mrow>
-
-        <mover>
-          <mo>&OverBrace;</mo>
-          <mrow>
-            <mi>&ell;</mi>
-            <mtext>&nbsp;</mtext>
-            <mi>b</mi>
-            <mtext>'s</mtext>
-          </mrow>
-
-        </mover>
-      </mover>
-    </mrow>
-    <munder>
-      <mo>&UnderBrace;</mo>
-      <mrow>
-        <mi>k</mi>
-        <mo>+</mo>
-
-        <mi>&ell;</mi>
-        <mtext>&nbsp;elements</mtext>
-      </mrow>
-    </munder>
-  </munder>
-  <mo stretchy="false">}</mo>
-</mrow>
-</math>
-</td></tr>
-
-<tr>
-<td>23</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4604/=ex53.png" width="213" height="108" alt="TeXbook, 18.42" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mo>(</mo>
-  <mtable>
-    <mtr>
-      <mtd columnalign="center">
-
-        <mrow>
-          <mo>(</mo>
-          <mtable>
-            <mtr>
-              <mtd columnalign="center">
-                <mi>a</mi>
-              </mtd>
-              <mtd columnalign="center">
-
-                <mi>b</mi>
-              </mtd>
-            </mtr>
-            <mtr>
-              <mtd columnalign="center">
-                <mi>c</mi>
-              </mtd>
-              <mtd columnalign="center">
-
-                <mi>d</mi>
-              </mtd>
-            </mtr>
-          </mtable>
-          <mo>)</mo>
-        </mrow>
-      </mtd>
-      <mtd columnalign="center">
-
-        <mrow>
-          <mo>(</mo>
-          <mtable>
-            <mtr>
-              <mtd columnalign="center">
-                <mi>e</mi>
-              </mtd>
-              <mtd columnalign="center">
-
-                <mi>f</mi>
-              </mtd>
-            </mtr>
-            <mtr>
-              <mtd columnalign="center">
-                <mi>g</mi>
-              </mtd>
-              <mtd columnalign="center">
-
-                <mi>h</mi>
-              </mtd>
-            </mtr>
-          </mtable>
-          <mo>)</mo>
-        </mrow>
-      </mtd>
-    </mtr>
-
-    <mtr>
-      <mtd columnalign="center">
-        <mn>0</mn>
-      </mtd>
-      <mtd columnalign="center">
-        <mrow>
-          <mo>(</mo>
-          <mtable>
-
-            <mtr>
-              <mtd columnalign="center">
-                <mi>i</mi>
-              </mtd>
-              <mtd columnalign="center">
-                <mi>j</mi>
-              </mtd>
-            </mtr>
-
-            <mtr>
-              <mtd columnalign="center">
-                <mi>k</mi>
-              </mtd>
-              <mtd columnalign="center">
-                <mi>l</mi>
-              </mtd>
-            </mtr>
-
-          </mtable>
-          <mo>)</mo>
-        </mrow>
-      </mtd>
-    </mtr>
-  </mtable>
-  <mo>)</mo>
-</mrow>
-
-</math>
-</td></tr>
-
-<tr>
-<td>24</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4605/=ex54.png" width="344" height="130" alt="TeXbook, 18.43" /></td>
-<td>
-<math display="block">
-<mrow>
-  <mi>det</mi>
-  <mo>|</mo>
-  <mtable>
-
-    <mtr>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mn>0</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-
-        <msub>
-          <mi>c</mi>
-          <mn>1</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-
-          <mn>2</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&mldr;</mo>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-
-          <mi>c</mi>
-          <mi>n</mi>
-        </msub>
-      </mtd>
-    </mtr>
-    <mtr>
-      <mtd columnalign="center">
-        <msub>
-
-          <mi>c</mi>
-          <mn>1</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-
-          <mn>2</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mn>3</mn>
-
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&mldr;</mo>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-
-          <mrow>
-            <mi>n</mi>
-            <mo>+</mo>
-            <mn>1</mn>
-          </mrow>
-        </msub>
-      </mtd>
-
-    </mtr>
-    <mtr>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mn>2</mn>
-        </msub>
-      </mtd>
-
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mn>3</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-
-          <mi>c</mi>
-          <mn>4</mn>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&mldr;</mo>
-      </mtd>
-      <mtd columnalign="center">
-
-        <msub>
-          <mi>c</mi>
-          <mrow>
-            <mi>n</mi>
-            <mo>+</mo>
-            <mn>2</mn>
-          </mrow>
-
-        </msub>
-      </mtd>
-    </mtr>
-    <mtr>
-      <mtd columnalign="center">
-        <mo>&#x22EE;</mo>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&#x22EE;</mo>
-
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&#x22EE;</mo>
-      </mtd>
-      <mtd columnalign="center">
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&#x22EE;</mo>
-      </mtd>
-
-    </mtr>
-    <mtr>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mi>n</mi>
-        </msub>
-      </mtd>
-
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mrow>
-            <mi>n</mi>
-            <mo>+</mo>
-            <mn>1</mn>
-
-          </mrow>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mrow>
-            <mi>n</mi>
-
-            <mo>+</mo>
-            <mn>2</mn>
-          </mrow>
-        </msub>
-      </mtd>
-      <mtd columnalign="center">
-        <mo>&mldr;</mo>
-      </mtd>
-
-      <mtd columnalign="center">
-        <msub>
-          <mi>c</mi>
-          <mrow>
-            <mn>2</mn>
-            <mi>n</mi>
-          </mrow>
-
-        </msub>
-      </mtd>
-    </mtr>
-  </mtable>
-  <mo>|</mo>
-  <mo>&gt;</mo>
-  <mn>0</mn>
-</mrow>
-
-</math>
-</td></tr>
-
-<tr>
-<td>25</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4598/=ex6.png" width="25" height="14" alt="TeXbook, 16.2-16.3" /></td>
-<td>
-<math display="block">
-<msub>
-  <mi>y</mi>
-  <msub>
-    <mi>x</mi>
-
-    <mn>2</mn>
-  </msub>
-</msub>
-</math>
-</td></tr>
-
-<tr>
-<td>26</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4583/=ex7.png" width="90" height="23" alt="TeXbook, 16.4-16.5" /></td>
-<td>
-<math display="block">
-<mrow>
-  <msubsup>
-
-    <mi>x</mi>
-    <mn>92</mn>
-    <mn>31415</mn>
-  </msubsup>
-  <mo>+</mo>
-  <mi>&pi;</mi>
-</mrow>
-
-</math>
-</td></tr>
-
-<tr>
-<td>27</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4584/=ex8.png" width="27" height="36" alt="TeXbook, 16.4-16.5" /></td>
-<td>
-<math display="block">
-<msubsup>
-  <mi>x</mi>
-  <msubsup>
-    <mi>y</mi>
-
-    <mi>b</mi>
-    <mi>a</mi>
-  </msubsup>
-  <msubsup>
-    <mi>z</mi>
-    <mi>c</mi>
-    <mi>d</mi>
-
-  </msubsup>
-</msubsup>
-</math>
-</td></tr>
-
-<tr>
-<td>28</td>
-<td><img src="https://developer.mozilla.org/@api/deki/files/4585/=ex9.png" width="24" height="22" alt="TeXbook, 16.4-16.5" /></td>
-<td>
-<math display="block">
-<msubsup>
-  <mi>y</mi>
-  <mn>3</mn>
-
-  <mrow>
-    <mo>&prime;</mo>
-    <mo>&prime;</mo>
-    <mo>&prime;</mo>
-  </mrow>
-</msubsup>
-</math>
-
-</td></tr>
-</table>
-

CSS Content

-
  /* Table style */
-
-  body {
-   text-align: center;
-  }
-
-  table
-  {
-  border: solid thin;
-  border-collapse: collapse;
-  margin-left: auto;
-  margin-right: auto;
-  }
-
-  th
-  {
-  background-color: #ddf;
-  border: solid thin;
-  color: black;
-  padding: 5px;
-  }
-
-  td
-  {
-  border: solid thin;
-  padding: 5px;
-  text-align: center;
-  }
-
-  /* Asana */
-
-  .Asana ::-moz-math-stretchy {
-    font-family: Asana Math;
-  }
-
-  .Asana math, .Asana [mathvariant] {
-    font-family: Asana Math;
-    }
-
-  .Asana [mathvariant="sans-serif"],
-  .Asana [mathvariant="bold-sans-serif"],
-  .Asana [mathvariant="sans-serif-italic"],
-  .Asana [mathvariant="sans-serif-bold-italic"] {
-    font-family: sans-serif;
-  }
-
-  .Asana [mathvariant="monospace"] {
-    font-family: monospace;
-  }
-
-  /* MathJax */
-
-  .MathJax ::-moz-math-stretchy {
-    font-family: MathJax_Main;
-  }
-
-  .MathJax math, .MathJax [mathvariant] {
-    font-family: MathJax_Main;
-  }
-
-  .MathJax [mathvariant="sans-serif"],
-  .MathJax [mathvariant="bold-sans-serif"],
-  .MathJax [mathvariant="sans-serif-italic"]
-  .MathJax [mathvariant="sans-serif-bold-italic"] {
-    font-family: MathJax_SansSerif;
-  }
-
-  .MathJax [mathvariant="monospace"] {
-    font-family: MathJax_Typewriter;
-  }
-
-  .MathJax [mathvariant="fraktur"],
-  .MathJax [mathvariant="bold-fraktur"] {
-    font-family: MathJax_Fraktur;
-  }
-
-  .MathJax [mathvariant="script"],
-  .MathJax [mathvariant="bold-script"] {
-    font-family: MathJax_Script;
-  }
-
-  .MathJax [mathvariant="double-struck"] {
-    font-family: MathJax_AMS;
-  }
-
-  /* STIX */
-
-  .STIX ::-moz-math-stretchy {
-    font-family: STIXNonUnicode, STIXSizeOneSym, STIXSize1, STIXGeneral;
-  }
-
-  .STIX math, .STIX [mathvariant] {
-    font-family: STIXGeneral;
-  }
-
-  .STIX [mathvariant="sans-serif"],
-  .STIX [mathvariant="bold-sans-serif"],
-  .STIX [mathvariant="sans-serif-italic"],
-  .STIX [mathvariant="sans-serif-bold-italic"] {
-    font-family: sans-serif;
-  }
-
-  .STIX [mathvariant="monospace"] {
-    font-family: monospace;
-  }
-
-  /**** Experimental Open Type MATH fonts ****/
-
-  /* AsanaExp */
-  .AsanaExp math {
-    font-family: Asana Math;
-  }
-
-  /* Cambria */
-  .Cambria math {
-    font-family: Cambria Math;
-  }
-
-  /* TeXGyreBonum */
-  .TeXGyreBonum math {
-    font-family: TeX Gyre Bonum Math;
-  }
-
-  /* TeXGyrePagella */
-  .TeXGyrePagella math {
-    font-family: TeX Gyre Pagella Math;
-  }
-
-  /* TeXGyreTermes */
-  .TeXGyreTermes math {
-    font-family: TeX Gyre Termes Math;
-  }
-
-  /* LatinModern */
-  .LatinModern math {
-    font-family: Latin Modern Math;
-  }
-
-  /* Lucida */
-  .Lucida math {
-    font-family: Lucida Bright Math;
-  }
-
-  /* NeoEuler */
-  .NeoEuler math {
-    font-family: Neo Euler;
-  }
-
-  /* STIXWord */
-  .STIXWord math {
-    font-family: STIX Math;
-  }
-
-  /* XITS */
-  .XITS math {
-    font-family: XITS Math;
-  }
-
-  /* XITS RTL */
-  .XITSRTL math {
-    font-family: XITS Math;
-    direction: rtl;
-  }
-
-
-

JavaScript Content

-
  function updateMathFont()
-  {
-  var mathFont = document.getElementById("MathFont").value;
-  if (mathFont == "Default") {
-    document.body.removeAttribute("class");
-  } else {
-    document.body.setAttribute("class", mathFont);
-  }
-  }
-
-  function load()
-  {
-  document.getElementById("MathFont").
-  addEventListener("change", updateMathFont, false)
-  }
-
-  window.addEventListener("load", load, false);
-
-
-
-

Note: Afin d'obtenir le meilleur rendu pour les équations ci-dessous, assurez-vous d'avoir les polices mathématiques installées. Cette page contient également plus d'informations sur les polices expérimentales avec une table MATH, qui ne sont pas encore supportées ( voir aussi cette version utilisant les Web fonts).

-

 

-

{{ EmbedLiveSample('MathML_Torture_Test', '100%', '2500px') }}

-
-
-  
diff --git a/files/fr/mozilla/mobile/balise_meta_viewport/index.html b/files/fr/mozilla/mobile/balise_meta_viewport/index.html deleted file mode 100644 index d1914b3c92..0000000000 --- a/files/fr/mozilla/mobile/balise_meta_viewport/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: >- - Utiliser la balise meta viewport pour contrôler la mise en page sur les - navigateurs mobiles -slug: Mozilla/Mobile/Balise_meta_viewport -translation_of: Mozilla/Mobile/Viewport_meta_tag ---- -

Les nouvelles fonctionnalités de la version à venir de Firefox Mobile (Fennec), 1.1, ont amélioré le support pour la balise <meta name="viewport">. Les versions précédentes supportaient les propriétés width, height, et initial-scale de la balise viewport, mais étaient problématiques avec certains sites prévus pour les navigateurs iPhone et Android. Nous supportons désormais les mêmes propriétés que Safari Mobile, et nous avons également amélioré Fennec pour permettre au rendu d'être plus cohérent entre les différentes tailles et résolutions d'écrans.

- -

touch.facebook.com avant :

- -

05-11-fennec-meta-viewport-2.png

- -

touch.facebook.com après :

- -

05-11-fennec-meta-viewport-1.png

- -

Vous pouvez tester les changements par vous-même dans la dernière version de Fennec (1.1) et les dernières principales nightly builds pour Maemo, Windows, Mac, et Linux.

- -

Trame

- -

Les navigateurs mobiles tels que Fennec affichent les pages dans une « fenêtre » virtuelle (le viewport), souvent plus large que l'écran, afin d'éviter de devoir rétrécir chaque configuration de page dans une petite fenêtre (ce qui provoquerait un mauvais affichage de beaucoup de sites non-optimisés pour les mobiles). Les utilisateurs peuvent ensuite se déplacer et zoomer pour visualiser les différentes parties de la page.

- -

Safari Mobile a créé la « balise meta viewport » pour permettre aux développeurs web de contrôler la taille et l'échelle du viewport. Beaucoup d'autres navigateurs mobiles supportent désormais cette balise, bien qu'elle ne soit pas standardisée. La documentation de Apple explique plutôt bien comment les développeurs peuvent utiliser ce tag, mais nous avons du effectuer des recherches plus approfondies pour trouver la bonne implémentation pour Fennec. Par exemple, la documentation de Safari dit que le contenu de la balise est une « liste de valeurs séparées par des virgules », mais les navigateurs existants utilisent en fait n'importe quel mélange de virgules, points-virgules et d'espaces en tant que séparateurs.

- -

Apprenez-en plus sur les viewports dans les différents navigateurs mobiles dans l'article A Tale of Two Viewports (en) sur quirksmode.org.

- -

Les bases du viewport

- -

La plupart des sites optimisés pour les mobiles utilisent une balise comme la suivante :

- -
<meta name="viewport" content="width=device-width, initial-scale=1.0">
- -

La propriété width contrôle la taille du viewport. Elle peut être réglée à une valeur précise de pixels, comme width=600, ou bien à la valeur spéciale device-width qui correspond à la largeur de l'écran en pixels CSS à l'échelle 100%. (Il existe les propriétés et valeurs height et device-height correspondantes, qui peuvent être utiles pour les pages contenant des éléments qui changent de taille ou de position en fonction de la hauteur du viewport.)

- -

La propriété initial-scale contrôle le niveau de zoom lorsque la page est chargée pour la première fois. Les propriétés maximum-scale, minimum-scale, et user-scalable contrôlent la manière dont les utilisateurs sont autorisés à zoomer ou dézoomer une page.

- -
-

Empêcher le zoom peut poser des problèmes d'accessibilité aux usagers avec une déficience visuelle.

-
- -

Un pixel n'est pas un pixel

- -

L'iPhone et beaucoup de téléphones Android possèdent des écrans 3 à 4 pouces (7 à 10 cm) avec 320 à 480 pixels (environ 160 dpi). Firefox pour Maemo s'exécute sur le Nokia N900, qui a la même taille mais entre 480 et 800 pixels (environ 240 dpi). À cause de cela, la précédente version de Fennec affichait beaucoup de pages un tiers plus petit (en taille réelle) que l'iPhone ou les systèmes Android. Cela causait des problèmes de lecture et d'utilisation sur beaucoup de sites optimisés pour le tactile. Peter-Paul Koch a écrit sur ce sujet dans son article A pixel is not a pixel is not a pixel (en).

- -

Fennec 1.1 pour Maemo utilisera 1,5 pixels matériels pour chaque « pixel » CSS, suivant ainsi le comportement des navigateurs pour Android basés sur WebKit. Cela signifie qu'une page à initial-scale=1 sera affichée pratiquement à la même taille réelle sur Fennec pour Maemo, Safari Mobile pour iPhone et le navigateur Android sur les téléphones HDPI et MDPI (en), ce qui coïncide avec la spécification CSS 2.1, qui dit :

- -
-

Si la résolution du périphérique d'affichage est vraiment différente de celle moyenne des ordinateurs, le navigateur doit remettre à l'échelle les valeurs des pixels. Il est recommandé que l'unité des pixels renvoie à l'unité la plus proche du celle référence correspondant au nombre total des pixels de l'appareil. Il est également recommandé que l'unité de référence soit de l'envergure visuelle d'un pixel sur un périphérique avec une résolution de 96 dpi à une distance d'un bras du lecteur.

-
- -

Pour les développeurs, cela signifie que 320 pixels doivent être en pleine largeur en mode portrait à une échelle 1 sur tous les périphériques de poche mentionnés ci-dessus, et qu'ils peuvent, en sachant cela, redimensionner leurs mises en page et images. Mais rappelez-vous que tous les périphériques mobiles ne sont pas de la même largeur ; vous devriez également vous assurer que vos pages fonctionnent correctement en mode paysage, et sur tous les appareils plus larges tels que l'iPad et les tablettes Android.

- -

Sur des écrans à 240 dpi, les pages à initial-scale=1 seront mis à échelle 1,5 par Fennec et Android WebKit. Leur texte sera lissé et mis à l'échelle en conséquence, mais leurs images pourraient ne pas tirer profit de la résolution plein-écran. Pour obtenir des images plus nettes sur ces écrans, les développeurs web peuvent prévoir les images - ou les mises en pages complètes - à une échelle 150% (ou 200% pour supporter les périphériques à 320 dpi comme les iPhone à écrans retina) puis réduire leur échelle par la suite à l'aide de propriétés du viewport ou de CSS.

- -

Le ratio par défaut dépend de la résolution. Lorsqu'elle est inférieure à 200 dpi, le ratio sera de 1,0. Entre 200 et 300 dpi, il s'élèvera à 1,5. Au delà, il vaut floor(densité / 150 dpi). Notez que le ratio par défaut est avéré uniquement lorsque l'échelle du viewport vaut 1. Sinon, la relation entre pixels CSS et pixels matériels dépend du niveau de zoom actuel.

- -

Largeur du viewport et largeur de l'écran

- -

Beaucoup de sites configurent leur viewport à "width=320, initial-scale=1" pour correspondre précisément à la configuration d'un iPhone en mode portrait. Comme mentionné ci-dessus, cela a provoqué des problèmes lors du rendu de ces sites sous Fennec 1.0, tout particulièrement en mode paysage. Pour empêcher cela, Fennec 1.1 étendra la largeur du viewport si nécessaire pour remplir l'écran à l'échelle définie. Cela suit le comportement d'Android et de Safari Mobile, et est surtout utile sur les périphériques à écrans larges comme l'iPad. (Allen Pike en fournit une bonne éxplication pour les développeurs dans son article Choosing a viewport for iPad sites.)

- -

Pour les pages qui définissent une largeur initiale ou maximale, cela signifie que la propriété width est en réalité interprétée en tant qu'une largeur minimale du viewport. Par exemple, si votre mise en page nécessite au moins 500 pixels de largeur, vous pouvez utiliser le code suivant. Lorsque l'écran est plus grand que 500 pixels, le navigateur étendra le viewport (au lieu de zoomer) jusqu'à la largeur de l'écran :

- -
<meta name="viewport" content="width=500, initial-scale=1">
- -

Fennec 1.1 supporte également minimum-scale, maximum-scale, and user-scalable, avec les défauts et les limites de Safari. Ces propriétés affectent l'échelle et la largeur initiales, en plus de limiter les changements dans le niveau de zoom.

- -

Les navigateurs mobiles gèrent les changements d'orientation différemment. Par exemple, Safari Mobile zoome souvent simplement sur la page lors du changement portrait vers paysage, au lieu d'afficher la page telle qu'elle aurait du l'être si elle avait été chargée à la base en paysage. Si les développeurs web souhaitent garder une certaine logique dans leurs paramètres de mise à l'échelle lors du changement d'orientation sur iPhone, ils doivent ajouter une valeur maximum-scale pour empêcher ce zoom, ce qui empêche parfois les utilisateurs de zoomer :

- -
<meta name="viewport" content="initial-scale=1, maximum-scale=1">
- -

Cela n'est pas nécessaire sur Fennec : lorsque le périphérique change d'orientation, Fennec rafraîchit la taille du viewport, la mise en page, et les propriétés JavaScript/CSS telles que device-width, en fonction des nouvelles dimensions de la fenêtre.

- -

Tailles communes de viewport pour les périphériques mobiles et tablettes

- -

Si vous souhaitez connaître les largeurs de viewport des périphériques mobiles et tablettes les plus communs, il existe une liste complète des tailles de viewport sur mobiles et tablettes ici. Elle vous donnera des informations telles que la largeur du viewport en orientation portrait et paysage, ainsi que la taille physique de l'écran, le système d'exploitation et la résolution du périphérique.

- -

Standardisation

- -

Il y a une claire demande à propos de la balise meta viewport, puisqu'elle est supportée par la plupart des navigateurs mobiles populaires et utilisée par des milliers de sites web. Il serait bien d'avoir un standard réel pour le contrôle des propriétés du viewport sur les pages. D'après la spécification HTML5, les extensions à la balise meta doivent d'abord être enregistrées sur le wiki WHATWG avant d'entrer dans le processus de standardisation W3C. Si cela arrive, Mozilla s'assurera d'implémenter tout changement fait pendant la standardisation.

diff --git a/files/fr/mozilla/mobile/index.html b/files/fr/mozilla/mobile/index.html deleted file mode 100644 index 7a31704260..0000000000 --- a/files/fr/mozilla/mobile/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Mobile -slug: Mozilla/Mobile -translation_of: Mozilla/Mobile ---- -

Firefox OS

- -

Firefox OS est un système d'exploitation pour mobile Open Source qui utilise Linux et le moteur de rendu de Mozilla, Gecko pour fournir une interface utilisateur et un ensemble d'applications entièrement écrites en HTML, CSS et JavaScript.
-
- Apprenez à installer Firefox OS et à développer des applications pour ce dernier.

- -

Firefox pour Android

- -

Firefox pour Android est le navigateur web de Mozilla. Il a été récemment réécrit pour utiliser l'interface utilisateur native d'Android, le rendant ainsi plus rapide, plus léger et plus réactif. Il offre le support de puissantes APIs pour accéder aux capacités de l'appareil telles que l'appareil photo ou la pile de téléphonie.
-
- Découvrez comment aider à développer Firefox pour Android, comment utiliser ses APIs et comment créer des modules complémentaires pour mobile.

- -

Développement Web pour mobiles

- -

Les appareils mobiles ont des caractéristiques physiques très différentes de celles d'un ordinateur de bureau ou d'un ordinateur portable et nombre d'APIs utilisées pour interragir avec eux sont toujours en cours de standardisation.

- -

Apprenez à développer des sites web avec un bon rendu sur appareils mobiles et profitez des nouvelles possibilités qu'ils vous offrent. Apprenez à rendre vos sites web compatibles avec différents navigateurs web.

diff --git a/files/fr/mozilla/mode_presque_standard_de_gecko/index.html b/files/fr/mozilla/mode_presque_standard_de_gecko/index.html deleted file mode 100644 index 98b15c4dca..0000000000 --- a/files/fr/mozilla/mode_presque_standard_de_gecko/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Mode presque standard de Gecko -slug: Mozilla/Mode_presque_standard_de_Gecko -tags: - - Développement_Web - - Gecko - - Standards_du_Web -translation_of: Mozilla/Gecko_Almost_Standards_Mode ---- -


- Depuis Mozilla 1.0.1 et 1.1 beta, un nouveau mode de rendu appelé « presque standard » existe. Celui-ci s'ajoute aux modes « quirks » et « standard » qui existaient depuis un bout de temps.

- -

Le mode de rendu « presque standard » est exactement le même que le mode « standard » en tous points sauf un : le calcul de la hauteur pour les boites de ligne et certains des éléments en ligne dans celles-ci. Un cas courant de l’impact de cela est le placement des images à l'intérieur des cellules de tableaux. Cela signifie que les mises en page avec des découpages d'images dans des tableaux seront moins probablement mis en pièces dans les navigateurs basés sur Gecko à partir du moteur de rendu de Mozilla 1.0.1 ou supérieur, que ce soit en mode « quirks » ou « presque standard ». (Consultez l'article "Images, tableaux et décalages mystérieux" pour une explication détaillée du traitement de ces mises en pages particulières en mode « standard ».)

- -

En détaillant légèrement plus, voici grossièrement ce qui diffère dans le mode presque standard : les boites en ligne qui n’ont pas de texte hors espaces blancs comme enfant et qui n’ont pas de bordure, padding ou marges :

- - - -

À part cette différence, les mode « presque standard » et « standard » sont exactement pareils en termes de mise en page et autres comportements.

- -

Déclenchement du mode « presque standard »

- -

Les déclarations DOCTYPE qui déclencheront le mode « presque standard » sont celles qui contiennent :

- - - -

Un DOCTYPE complet contient un identificateur public et un identificateur système. En parlant de DOCTYPE, beaucoup se réfèreront à un DOCTYPE comme étant « avec URI » ou « sans URI ». L'URI est l'identificateur système. Par exemple, examinons le DOCTYPE qui suit :

- -
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-			"http://www.w3.org/TR/html4/loose.dtd">
- -

Les parties sont les suivantes :

- - - -

Par conséquent, tout DOCTYPE HTML 4.01 Transitional ou Frameset avec une URI (identificateur système) déclenchera le mode « presque standard », tout comme tout DOCTYPE XHTML 1.0 Transitional ou Frameset, avec ou sans URI. Les auteurs ne faisant pas partie d'IBM n'ont aucune raison de se préoccuper du DOCTYPE personnalisé qui déclenchera aussi le mode « presque standard ».

- -

Recommandations

- - - -

Aussi sur MDC

- - - - - -
-

Informations sur le document origninal

- - -
diff --git a/files/fr/mozilla/participer_au_projet_mozilla/index.html b/files/fr/mozilla/participer_au_projet_mozilla/index.html deleted file mode 100644 index 168b8847f6..0000000000 --- a/files/fr/mozilla/participer_au_projet_mozilla/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Participer au projet Mozilla -slug: Mozilla/Participer_au_projet_Mozilla -translation_of: Mozilla/Participating_in_the_Mozilla_project ---- -

Si vous avez envie d'aider à corriger des bugs et en général de travailler sur le code sur lequel repose la plateforme Mozilla, c'est ici que vous trouverez la documentation qui vous pointera dans la bonne direction.

- -

Documentation

Guide de développement de Mozilla
Astuces et guides de développement pour contribuer au code de Mozilla.
Code source de Mozilla
Informations sur l'obtention du code de Mozilla, par téléchargement ou contrôle de version, et sur la manière d'y faire incorporer votre code.
Documentation sur la compilation
Informations sur la compilation des différents projets Mozilla, dont Firefox et Thunderbird.
La plateforme Mozilla
Informations sur la plateforme Mozilla, toutes ses technologies et API, ainsi que la manière de les utiliser dans vos propres projets.
Documentation de Mozilla
Aidez-nous à créer et améliorer notre documentation pour Mozilla et le web ouvert.
Débogage
Astuces et recommandations à suivre lors du débogage du code de Mozilla.
Assurance qualité
Informations sur les tests et le suivi des bugs.
Localisation
Documentation sur la traduction des projets Mozilla, de la documentation, et d'autres informations dans de nombreuses langues.

Outils

Bugzilla
La base de données Bugzilla utilisée pour suivre les problèmes dans les projets Mozilla.
MXR
Parcourir et effectuer des recherches dans le référentiel du code source de Mozilla sur le web.
Bonsai
L'outil Bonsai permet de savoir qui a changé quel fichier du référentiel, et dans quel but.
Tinderbox
Tinderbox affiche l'état de l'arbre afin de savoir s'il est actuellement en état de compiler. À vérifier avant d'intégrer ou de récupérer du code, pour s'assurer de travailler avec un arbre fonctionnel.
Rapports de plantage
Informations sur les systèmes de rapports de plantages Socorro et Talkback.
Suivi des performances
Consultez des informations de performances à propos des projets Mozilla.
Forums de développement
Une liste de forums de discussion classés par sujet où vous pouvez parler de vos problèmes de développement liés à Mozilla.
-

  {{ languages( { "en": "en/Participating_in_the_Mozilla_project", "ja": "ja/Participating_in_the_Mozilla_project"} ) }}

diff --git a/files/fr/mozilla/preferences/index.html b/files/fr/mozilla/preferences/index.html deleted file mode 100644 index fe792aff80..0000000000 --- a/files/fr/mozilla/preferences/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Preferences -slug: Mozilla/Preferences -tags: - - TopicStub -translation_of: Mozilla/Preferences ---- -

Le système de préférences permet de stocker des données pour les applications Mozilla à l'aide d'un système d'appariement clé / valeur. Ces articles fournissent des informations sur l'utilisation du système de préférences.

- - - - - - - - -
-

Documentation

- -
-
Système de préférences
-
Une introduction à l'utilisation du système de préférences dans Mozilla.
-
XUL School: gestion des préférences
-
Le chapitre du tutoriel XUL School sur les préférences.
-
Référence de préférence Mozilla
-
Un guide de référence pour toutes les préférences de Mozilla; actuellement un travail en cours.
-
Un bref guide des préférences de Mozilla
-
Un guide d'introduction sur l'emplacement de stockage des préférences et d'autres informations utiles sur le système de préférences de base.
-
Utilisation des préférences du code d'application {{gecko_minversion_inline("6.0")}}
-
Firefox 6 Firefox 6 a introduit des fonctions statiques pour accéder efficacement aux préférences à partir du code d'application. Cette API n'est pas disponible pour les modules complémentaires, mais si vous travaillez sur une application Gecko, cette API est le moyen préféré d'accéder aux préférences.
-
Préférences de mise en réseau de Mozilla
-
Un guide des principales préférences liées au réseautage.
-
Préférences de Mozilla pour les super-geeks
-
Un guide des préférences avec lesquelles seuls les geeks d'élite devraient jouer.
-
- -

Afficher toutes les pages marquées avec "Préférences"...

-
-

Exemples

- -
-
Extraits de code
-
Extraits de code liés aux préférences.
-
Ajout de préférences à une extension
-
Comment ajouter des préférences à une extension existante.
-
- - - - -
diff --git a/files/fr/mozilla/projects/emscripten/index.html b/files/fr/mozilla/projects/emscripten/index.html deleted file mode 100644 index 842caea844..0000000000 --- a/files/fr/mozilla/projects/emscripten/index.html +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Emscripten -slug: Mozilla/Projects/Emscripten -translation_of: Mozilla/Projects/Emscripten ---- -

Emscripten est un compilateur depuis LLVM vers le JavaScript. Il prend du bytecode LLVM (p. ex. généré depuis le C/C++ en utilisant Clang, ou depuis un autre langage) et le compile en JavaScript, qui peut être exécuté sur le Web.

- -
-

Important : Cette page fournit une brève introduction à ce qu'est Emscripten. Pour démarrer avec Emscripten, allez sur le Wiki officiel d'Emscripten.

-
- -

Avec Emscripten, vous pouvez

- - - -

Emscripten rend le code natif disponible immédiatement sur le Web : qui est une plateforme basée sur les standards, a de nombreuses implémentations indépendentes mais compatibles et qui s'exécute partout, depuis les PCs jusqu'aux iPads.

- -

Avec Emscripten, les développeurs C/C++ n'ont pas à supporter le coût élevé d'un portage manuel vers le JavaScript — il n'ont même pas à l'apprendre. Les développeurs Web en bénéficient également, puisqu'ils peuvent utilser dans leurs sites Web, les quelques milliers d'utilitaires et bibliothèques nativent qui existent déjà.

- -

À peu près n'importe quelle base de code portable, en C ou C++, peut être compilée en JavaScript à l'aide d'Emscripten, depuis les jeux haute performance qui doivent faire du rendu graphique, jouer du son et charger et traiter des fichiers, jusqu'aux cadriciels d'applications tels que Qt.

- -

Emscripten génère du code rapide — sa sortie par défaut est asm.js, un sous-ensemble hautement optimizable du JavaScript qui s'exécute à une vitesse proche de celle du code natif, dans beaucoup de cas.

- -
-

Note: Intéressant n'est-ce pas ? Lisez-en plus à propos d'Emscripten et essayez quelques démos, puis commencez à l'utiliser.

-
- -

Autres articles intéressants sur MDN

- - diff --git a/files/fr/mozilla/projects/index.html b/files/fr/mozilla/projects/index.html deleted file mode 100644 index 408359ca13..0000000000 --- a/files/fr/mozilla/projects/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Projects -slug: Mozilla/Projects -tags: - - Mozilla - - NeedsContent - - Projects - - TopicStub -translation_of: Mozilla/Projects ---- -

{{ draft() }}

- -

Mozilla a un certain nombre de projets autres que Firefox lui-même. Beaucoup d'entre eux sont des composants de Firefox ou sont des outils utilisés pour créer Firefox, mais peuvent également être utilisés par d'autres projets. Vous trouverez ici des liens vers de la documentation sur ces projets.

- -

{{ LandingPageListSubpages() }}

diff --git a/files/fr/mozilla/projects/rhino/examples/index.html b/files/fr/mozilla/projects/rhino/examples/index.html deleted file mode 100644 index 2347013026..0000000000 --- a/files/fr/mozilla/projects/rhino/examples/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Rhino Examples -slug: Mozilla/Projects/Rhino/Examples -translation_of: Mozilla/Projects/Rhino/Examples ---- -

Examples have been provided that show how to control the JavaScript engine and to implement scriptable host objects. All the examples are in the git tree at mozilla/js/rhino/examples.

-

Scripts Simple

-

Le script unique.js permet d'écrirer une seul ligne depuis un fichier.

-

Le script liveConnect.js montre un usage simple de LiveConnect (connectivité Java-vers-JavaScript).

-

Le script jsdoc.js est un analogue en JavaScript de la javadoc. Il permet un usage régulier des "regular expressions".

-

Le script checkParam.js est un outil utile pour vérifier les tags @param dans les commentaires documentation Java qui corresponde au paramètres dans la méthode  Java correspondante.

-

The enum.js script is a good example of using a JavaAdapter to implement a Java interface using a JavaScript object.

-

The NervousText.js script is a JavaScript implementation of the famous NervousText applet using JavaScript compiled to Java classes using jsc. It can be run in the HTML page NervousText.html.

-

Controlling the JavaScript Engine

-

The RunScript class

-

RunScript.java is a simple program that executes a script from the command line.

-

The Control class

-

Control.java is a program that executes a simple script and then manipulates the result.

-

JavaScript Shell

-

Shell.java is a program that executes JavaScript programs; it is a simplified version of the shell in the tools package. The programs may be specified as files on the command line or by typing interactively while the shell is running.

-

PrimitiveWrapFactory

-

PrimitiveWrapFactory.java is an example of a WrapFactory that can be used to control the wrapping behavior of the Rhino engine on calls to Java methods.

-

Multithreaded Script Execution

-

DynamicScopes.java is a program that creates a single global scope object and then shares it across multiple threads. Sharing the global scope allows both information to be shared across threads, and amortizes the cost of Context.initStandardObjects by only performing that expensive operation once.

-

Implementing Host Objects

-

First check out the tutorial if you haven't already.

-

The Foo class - Extending ScriptableObject

-

Foo.java is a simple JavaScript host object that includes a property with an associated action and a variable argument method.

-

The Matrix class - Implementing Scriptable

-

Matrix.java provides a simple multidimensional array by implementing the Scriptable interface.

-

The File class - An advanced example

-

File.java extends ScriptableObject to provide a means of reading and writing files from JavaScript. A more involved example of host object definition.

diff --git a/files/fr/mozilla/projects/rhino/index.html b/files/fr/mozilla/projects/rhino/index.html deleted file mode 100644 index 1618f7abb1..0000000000 --- a/files/fr/mozilla/projects/rhino/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Rhino -slug: Mozilla/Projects/Rhino -tags: - - JavaScript - - Mozilla - - NeedsUpdate - - Rhino -translation_of: Mozilla/Projects/Rhino ---- -

Image:rhino.jpg

- -

Rhino est un moteur JavaScript open-source entièrement écrit en  Java. Il est généralement intégré dans des applications Java afin de permettre l'utilisation de scripts aux utilisateurs finaux. Il est intégré dans J2SE 6 en tant que moteur JavaScript par défaut.

- -

Télécharger Rhino

- -

Comment obtenir les sources et exécutables

- -

La documentation de Rhino

- -

Des informations relatives à Rhino pour écrire des scripts ou embarquer le moteur dans des applications Java.

- -

L'aide de Rhino

- -

Différentes ressources utiles si vous êtes bloqué.

diff --git a/files/fr/mozilla/projects/talos/index.html b/files/fr/mozilla/projects/talos/index.html deleted file mode 100644 index f42f2c3303..0000000000 --- a/files/fr/mozilla/projects/talos/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Talos -slug: Mozilla/Projects/Talos -translation_of: Mozilla/Projects/Talos ---- -

Talos est un framework de test de performance python qui est inusable sur Windows, Mac et Linux. Talos est notre framework de test de performance polyvalente que nous utilisons à Mozilla. Il a été créé pour servir comme coureur de test pour le test de performance existant que Mozilla courait en 2007 en plus de fournir un framework extensible pour des nouveaux tests comme ils étaient en cours de création.

- -

S'il te plait regarde Talos's home page pour plus de détails.

diff --git a/files/fr/mozilla/projects/thunderbird/thunderbird_localisation/index.html b/files/fr/mozilla/projects/thunderbird/thunderbird_localisation/index.html deleted file mode 100644 index a97de22c9b..0000000000 --- a/files/fr/mozilla/projects/thunderbird/thunderbird_localisation/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Localisation Thunderbird -slug: Mozilla/Projects/Thunderbird/Thunderbird_Localisation -translation_of: Mozilla/Projects/Thunderbird/Thunderbird_Localization ---- -

Cette page est destinée aux localisateurs actuels et futurs de Thunderbird, le client de messagerie électronique et usenet de Mozilla Messaging. Il couvre de nombreux aspects qu'un localisateur de Thunderbird doit connaître comme les outils nécessaires, comment obtenir des informations sur les événements pertinents pour la localisation et divers autres sujets d'intérêt.

- -

Création d'une localisation Thunderbird

- -

Création d'une nouvelle localisation (Mercurial) - Cet article décrit comment créer une nouvelle localisation pour Thunderbird.

- -

À propos des répertoires et des branches

- -

Il y a 3 référentiels actifs pour le développement de Thunderbird. Le travail de développement de Thunderbird est fusionné d'une branche à l'autre toutes les six semaines.

- - - -

La plupart des localisations travailleront sur comm-aurora. Ce référentiel ou branche est stable en ce qui concerne les chaînes pour chaque période de six semaines. Terminer le travail ici signifie qu'il est prêt pour la première version bêta, et vous n'aurez pas besoin d'accéder à la branche bêta. Votre travail sera également reporté automatiquement.

- -

Exigences en matière de localisation

- -

Il n'y a pas de restrictions significatives pour l'évolution des localisations. Cependant, nous devons œuvrer de concert pour fournir aux utilisateurs de Thunderbird des moteurs de recherche qu'ils pourront utiliser pour trouver le bon équilibre avec le jeu d'options appropriées. Pour de plus amples informations consultez cette page .

- -

Tableau de bord de localisation

- -

Le tableau de bord de localisation pour Thunderbird donne aux localisateurs un aperçu précis de l'état actuel de leur tâche. Des renseignements détaillés sont disponibles sur la page du tableau de bord l10n .

- -

Une localisation sera ajoutée au tableau de bord l10n sur demande, lorsqu'elle aura atteint un niveau d'achèvement minimal de 80% - comme le montre la sortie de comparer-langues. Pour demander l'ajout de votre langue au tableau de bord, déposez un bogue dans le produit Thunderbird ou le composant Build Config.

- -

Obtenir des informations pertinentes pour l10n

- -

Groupes de discussion & listes de diffusion

- -

Les localisateurs de Thunderbird devraient lire les groupes de discussion sur la localisation (mozilla.dev.l10n.announce mozilla.dev.l10n) pour se tenir au courant des articles spécifiques à Thunderbird et ceux d'ordre général relatifs à l10n qui les intéressent. Ils sont également encouragés à s'intéresser au groupe de discussion sur le développement de Thunderbird. (mozilla.dev.apps.thunderbird) pour être informés des dernières nouveautés.

- -

Ces groupes de discussion sont également accessibles via les listes de diffusion dev-l10n-announce@lists.mozilla.org, dev-l10n@lists.mozilla.org (liste de diffusion de localisation) ou dev-apps-thunderbird@lists.mozilla.org (liste de diffusion du développement de Thunderbird), qui reflètent les groupes de discussion mentionnés ci-dessus. Vous pouvez vous abonner ou vous désabonner à ces listes de diffusion via l'interface web à l'adresse suivante lists.mozilla.org.

- -

Bugzilla

- -

Les localisateurs devraient surveiller l'adresse électronique thunderbird@localization.bugs (ou de son alias :tb-l10n) pour se tenir au courant des bugs qui pourraient les affecter sur Thunderbird. Ceci peut être réalisé en ajoutant cette adresse à la "Surveillance des utilisateurs". de vos préférences e-mail dans bugzilla.

- -

Quelques liens utiles

- - - -

Niveaux des langues

- -

Les niveaux des langues restituent les langues pour lesquelles nous avons besoin d'avoir un bon développement pour la version. Il y a 10 langues dans le niveau 1, qui sont les plus importantes pour Thunderbird, en raison de leur nombre d'utilisateurs ou de leur potentiel de croissance.

- -

Ces langues sont traitées comme des entités de première classe, aussi importantes que en-US, c'est-à-dire que toute langue de niveau 1 qui ne répond pas aux critères peut bloquer une version finale de Thunderbird.

- -

Niveau 1

- -

Les langues suivantes sont en P1 (priorité 1) par prépondérence :

- -
* de             -  allemand
-* fr             -  français
-* ja, ja-JP-mac  -  japonais
-* en-GB          -  anglais britannique
-* es-ES          -  espagnol (continent européen)
-* it             -  italien
-* pl             -  polonais
-* ru             -  russe
-* nl             -  hollandais
-* pt-BR          -  portugais brésilien
-
- -

Niveau 2

- -

Toutes les autres langues supportées sont dans la catégorie de niveau 2.

diff --git a/files/fr/mozilla/rejoindre/index.html b/files/fr/mozilla/rejoindre/index.html deleted file mode 100644 index ab23ca6481..0000000000 --- a/files/fr/mozilla/rejoindre/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: '{Re}Joindre Mozilla' -slug: Mozilla/Rejoindre -tags: - - Mozilla -translation_of: Mozilla/Connect ---- -
-

Inspirez, collaborez, mettez en œuvre vos compétences afin de faire du Web « la » plateforme des appareils connectés.

-
- - -
-
-
- -
- -
- -
- -
- -
-
- -
-

Entrer en contact avec Mozilla

- -

Chez Mozilla, nous croyons que les développeurs contribuent au futur en créant des services de qualité et des applications destinées au grand public. Notre but est de les aider en proposant des technologies standardisées et ouvertes. Afin d'aider les développeurs et leur permettre de former des relations sur le long terme, nous avons créé le Mozilla Developer Program (MDP) en plus de la documentation présente sur MDN.
-
- Nous offrons de l'aide à travers les questions-réponses (Q&R) sur Stack Overflow, pour aider à résoudre des problèmes technique spécifiques ou des défis que vous pouvez rencontrer. Nous avons également une newsletter pour vous tenir informé des derniers événements autour du Web et des applications web.
-
- Nos idées sont nombreuses pour agrandir le Mozilla Developer Program et vous impliquer autant que nous le sommes ! Pour participer : suivez les tags sur Stack Overflow, abonnez vous au blog Hacks, et créez un compte MDN !

-
- -
-
-

Q&R sur Stack OverflowVoir toutes les Q&R...

- -

Nous avons des Q&R pour discuter des défis et problèmes liés au développement, plus particulièrement autour de Firefox OS et du Web sur mobile. Elles sont actuellement disponibles sur Stack Overflow à cette adresse http://stackoverflow.com/r/mozilla.

- - -
Stack form
- -

Dernières Questions-Réponses

-
- -
 
-
- -

Développeurs lors d'un événement Firefox OS à Madrid

- - -
- -

 

diff --git a/files/fr/mozilla/rust/index.html b/files/fr/mozilla/rust/index.html deleted file mode 100644 index 7ec000ae43..0000000000 --- a/files/fr/mozilla/rust/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Le langage de programmation Rust -slug: Mozilla/Rust -tags: - - Développement Web - - Langages - - Mozilla - - Parallélisme - - rust - - systèmes -translation_of: Mozilla/Rust ---- -

Rust logoRust est un nouveau langage de programmation open source créé par Mozilla et une communauté de volontaires, conçu pour aider les développeurs à concevoir des applications ultra-rapides et sécurisées qui utilisent avantageusement les puissantes fonctionnalités offertes par les processeurs multi-cœurs modernes. Il permet d'éviter les erreurs de segmentation et assure la sécurité des threads, le tout avec une syntaxe facile à assimiler.

- -

En outre, Rust offre des abstractions à coût zéro, déplacement des sémantiques, garanti la sécurité de la mémoire, des threads sans concurence des données, trait-based generics, pattern matching, inférence de type et des liaisons C efficace, avec un minimum de taille d'exécution.

- -

Pour en apprendre plus sur Rust, vous pouvez :

- - - -

Rust et le futur de la programmation des systèmes

- -

{{EmbedYouTube("8EPsnf_ZYU0")}}

- -

Débloquez le pouvoir du parallélisme avec Rust

- -

{{EmbedYouTube("cNeIOt8ZdAY")}}

- -

Rust pour les développeurs web

- -

{{EmbedYouTube("FfoXFnzZbBM")}}

- -

Programmation des systèmes sécurisée avec Rust

- -

{{EmbedYouTube("P3sfNGtpuxc")}}

- -

Agrandir la communauté Rust

- -

{{EmbedYouTube("duv0tuPAnO0")}}

- -

Mettre Rust en production chez Mozilla

- -

{{EmbedYouTube("2RhbYpgVpg0")}}

diff --git a/files/fr/mozilla/security/index.html b/files/fr/mozilla/security/index.html deleted file mode 100644 index 99a342c74c..0000000000 --- a/files/fr/mozilla/security/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Browser security -slug: Mozilla/Security -tags: - - Accueil - - Firefox - - Mozilla - - Sécurité -translation_of: Mozilla/Security ---- -

Un aspect important du développement de code pour n'importe quel navigateur, y compris Firefox, ainsi que n'importe quel projet orienté Web, est sa sécurité. Ces articles offrent d'importants guides et références pour asurer que le code que vous écrivez est sécurisé, y compris aussi bien les recommandations en matière de design que de guides de testing.

- -

{{LandingPageListSubpages}}

- - diff --git a/files/fr/mozilla/tech/index.html b/files/fr/mozilla/tech/index.html deleted file mode 100644 index c624ad5a70..0000000000 --- a/files/fr/mozilla/tech/index.html +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Technologies de Mozilla -slug: Mozilla/Tech -tags: - - Mozilla - - Reference - - Régionalisation - - XUL -translation_of: Mozilla/Tech ---- -

Mozilla a plusieurs technologies utilisées en composantes de ses projets. Celles-ci sont documentées ici.

- -

{{LandingPageListSubpages}}

diff --git a/files/fr/mozilla/tech/visualisation_et_recherche_du_code_source_mozilla_en_ligne/index.html b/files/fr/mozilla/tech/visualisation_et_recherche_du_code_source_mozilla_en_ligne/index.html deleted file mode 100644 index bdbde7f35c..0000000000 --- a/files/fr/mozilla/tech/visualisation_et_recherche_du_code_source_mozilla_en_ligne/index.html +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Visualisation et recherche du code source Mozilla en ligne -slug: Mozilla/Tech/Visualisation_et_recherche_du_code_source_Mozilla_en_ligne -tags: - - Developper avec Mozilla - - Mozilla Code source -translation_of: Mozilla/Tech/Viewing_and_searching_Mozilla_source_code_online ---- -

Le code source pour tous les projets de Mozilla hébergés dans le dépôt Mercurial et CVS peut être recherché et consulté en ligne à l'aide de DXR. C'est une variante renforcée et améliorée de l'outil original Linux Cross Reference.

- -

Ne téléchargez pas le code source en parcourant toutes les pages du site DXR ; téléchargez plutôt une archive ou utilisez Mercurial ou CVS à la place.
-
- DXR indexe plusieurs branches CVS et modules; la racine MXR la plus intéressant pour un contributeur Mozilla est
comm-central, qui contient le dernier code source pour la plupart des produits Mozilla (y compris Firefox, Thunderbird, SeaMonkey, Sunbird / Lightning Chatzilla, DOM Inspector et Venkman JavaScript debugger) et est fréquemment mise à jour.

- -

Certaines autres racines d'intérêt MXR sont:

- - - -

Mozilla Source Code Directory Structure (page en Anglais) contient une courte description du code dans chaque répertoire source de l'arbre.

- -

Ressources

- -

CVS Tags

diff --git a/files/fr/mozilla/tech/xpcom/guide/creating_components/an_overview_of_xpcom/index.html b/files/fr/mozilla/tech/xpcom/guide/creating_components/an_overview_of_xpcom/index.html deleted file mode 100644 index 35e8dd51a0..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/creating_components/an_overview_of_xpcom/index.html +++ /dev/null @@ -1,504 +0,0 @@ ---- -title: Un aperçu de XPCOM -slug: Mozilla/Tech/XPCOM/Guide/Creating_components/An_Overview_of_XPCOM -translation_of: Mozilla/Tech/XPCOM/Guide/Creating_components/An_Overview_of_XPCOM ---- -

-

« PrécédentSuivant »

-

- -

Cette section est présentée comme un tutoriel sur la création de composants XPCOM, mais elle couvre tous les principaux aspects, les concepts et la terminologie du modèle de composant XPCOM tout au long de sa conception.

- -

Ce chapitre fournit un rapide tour d'horizons sur XPCOM - une introduction aux concepts de base, des technologies XPCOM et du développement de composants. Les paragraphes de ce chapitre présentent des concepts de haut niveaux, de sorte que nous puissions les approfondir et de les utiliser avec plus de familiarité dans le tutoriel lui-même, qui décrit la création d'un composant Mozilla appelé WebLock .

- -

La solution XPCOM

- -

Le Cross Platform Component Object Module (XPCOM) est un cadre qui permet aux développeurs de fractionner un projets monolithiques en morceaux modulaires. Ces morceaux, appelés composants , sont ensuite assemblés de nouveau ensemble à l'exécution.

- -

Le but de XPCOM est de mettre au point les différentes parties de logiciel en les construisant indépendamment les uns des autres. Afin de permettre l'interopérabilité entre les composants d'une application, XPCOM sépare la mise en œuvre d'un composant de l'Interface . Mais XPCOM fournit également plusieurs outils et bibliothèques qui permettent le chargement et la manipulation de ces composants, des services qui aident le développeur à écrire du code modulaire multi-plateforme, et le soutien des versions, de sorte que les composants peuvent être remplacés ou mis à niveau sans casser ou avoir à recréer l'application . En utilisant XPCOM, les développeurs créent des composants qui peuvent être réutilisés dans différentes applications ou qui peut être remplacé pour changer la fonctionnalité des applications existantes.

- -

XPCOM soutient non seulement le développement de composant logiciels, il fournit également une grande partie des fonctionnalité de la plate-forme de développement fournit, tels que:

- - - -

Nous allons décrire les éléments ci-dessus en détail dans les chapitres à venir, mais pour l'instant, il peut être utile de penser à XPCOM en tant que plate-forme pour le développement de composants , dans lequel des caractéristiques telles que celles énumérées ci-dessus sont fournis.

- -

Gecko

- -

Bien qu'il soit à certains égards structurellement similaires à Microsoft COM, XPCOM est conçu pour être utilisé principalement au niveau de l'application. L'utilisation la plus importante de XPCOM est dans Gecko , open source, conforme aux standards, navigateur Web intégrable et boîte à outils pour la création de navigateurs Web et autres applications.

- -

XPCOM est le moyen d'accéder aux fonctionnalités de la bibliothèque Gecko pour l'utilisation ou l'extension de Gecko. Ce livre met l'accent sur l'extension mais les explications de ce livre seront important pour le développeurs d'application Gecko embarquées.

- -

Gecko est utilisé dans de nombreuses applications internet, la plupart des navigateurs et notamment Mozilla Firefox.

- -

Composants

- -

XPCOM vous permet de briser les gros projets logiciels en petits morceaux connus en tant que composants. Ils sont généralement contenus dans des bibliothèques binaires réutilisables (DLL sur Windows, DSO sur Unix), qui peuvent comprendre un ou plusieurs composants. Lorsque deux ou plusieurs composants connexes sont regroupées dans une bibliothèque binaire, la bibliothèque est appelée module.

- -

Modulaire, la programmation à base de composants logiciels rend plus facile le développement et la maintenance:

- - - - - - - - - - - - - - - - - - - - - - - - -
AvantageDescription
RéutilisationCode modulaire peut être réutilisé dans d'autres applications et d'autres contextes.
Mises à jourVous pouvez mettre à jour les composants sans avoir à recompiler l'application entière.
PerformanceLorsque le code est modulaire, les modules qui ne sont pas nécessaires immédiatement peuvent être chargées partiellement, ou pas chargés du tout, ce qui peut améliorer les performances de votre application.
MaintenanceMême lorsque un composant est obsolète, la conception de votre application modulaire vous permet  plus facilement de maintenir les parties de l'application que vous intéressent.
- -

Mozilla a plus de quatre millions de lignes de code, et pas une seule personne ne comprend l'ensemble du code source. La meilleure façon d'aborder un projet de cette taille est de le diviser en modules. La bibliothèque de réseau, par exemple, est constitué de composants pour chacun des protocoles, HTTP, FTP, et d'autres, qui sont groupés et liés dans une seule bibliothèque. Cette bibliothèque est le module de gestion de réseau, également appelé "necko."

- -

Mais il n'est pas toujours souhaitable de diviser les choses. Le composant HTTP de Gecko n'expose pas les classes privés qu'elle utilise comme des composants séparés. Les objets interne au composante reste interne, et ne soit pas manipulables par XPCOM.

- -

Interfaces

- -

Comment segmenter du code? L'idée de base est d'identifier les segments fonctionnellement liés et comprendre comment ils communiquent entre eux. Les canaux de communication entre les différentes composants forment ces limites, et lorsque ces limites sont formalisées on parle d'interfaces .

- -

Les interfaces ne sont pas une idée nouvelle en programmation. Nous avons tous l'habitude interfacer depuis notre premier programme "HelloWorld", où est l'interface entre le code que nous avons écrit - le code d'application - et le code d'impression. Le code d'application utilisé une interface à partir d'une bibliothèque, stdio , et imprime la texte "hello world" sur l'écran. La différence ici est que l'application "HelloWorld" dans XPCOM trouve cette fonctionnalité d'affichage à l'exécution et n'a pas à connaître stdio quand il est compilé.

- -

Interfaces permettent aux développeurs d' encapsuler la mise en œuvre et de fonctionnement interne de leur logiciel, et permettent aux clients d'ignorer la façon dont les choses sont faites, il suffit d'utiliser ce logiciel.

- -
-

Interfaces et programmation par contrat

- -

Une interface forme un accord contractuel entre les composants et les clients. Il n'y a pas de code qui oblige ces accords, mais les ignorer peut être fatal. Dans la programmation à base de composants, un composant garantit que les interfaces qu'il fournit seront immuable - qu'ils vont offrir le même accès aux mêmes méthodes à travers différentes versions du composante - l'établissement d'un contrat avec les logiciels clients qui l'utilisent. À cet égard, la programmation basé sur l'interface est souvent désigné comme la programmation par contrat .

-
- -

Interfaces et Encapsulation

- -

Aux limites des composants, l'abstraction est crucial pour la maintenabilité du logiciel et la réutilisabilité. Considérons, par exemple, une classe mal encapsulé. L'utilisation d'une méthode d'initialisation publique librement disponibles, comme l'exemple ci-dessous, peut causer des problèmes.

- -

SomeClass Class Initialization

- -
class SomeClass{
-  public:
-    // Constructeur
-    SomeClass();
-    // Destructeur virtuel
-    virtual ~SomeClass();
-    // method init
-    void Init();
-    void DoSomethingUseful();
-};
-
- -

Pour que ce système fonctionne correctement, l'utilisateur de cette classe doit porter une attention particulière à tout ce que le créateur de cette classe a établi. C'est l'accord contractuel avec cette classe non encapsulé: un ensemble de règles qui définissent quand chaque méthode peut être appelée et ce qu'elle est censé faire. Une règle peut spécifier que DoSomethingUseful ne peut être appelé après un appel à init () . La méthode DoSomethingUseful peut veiller à ce que la condition soit satisfaite.

- -

En plus du code correctement commenté pour les règles d'utilisation de Init() , le développeur peut prendre quelques mesures pour que ce contrat soit plus clair. Tout d'abord, le constructeur d'un objet peut être encapsulé, et une classe virtuelle DoSomethingUseful peut être mis à disposition. De cette façon, le constructeur et l'initialisation peuvent être complètement cachés des utilisateurs de la classe. Dans cette situation, "semi-encapsulé", la seule partie de la classe qui est exposé est une liste bien définie des méthodes appelables (i.e, l'interface). Une fois que la classe est encapsulé, la seule interface que le client verra est la suivante:

- -

Encapsulation de SomeInterface

- -
class SomeInterface{
-  public:
-    virtual void DoSomethingUseful() = 0;
-};
-
- -

La mise en œuvre peut alors dériver de cette classe par l'utilisation de la méthode virtuelle. Les utilisateurs de ce code peuvent ensuite créer l'objet (voir utilisation ) et encapsuler aussi la mise en œuvre. Avec XPCOM, les usagers sont ignorant du fonctionnement du composants et comptent sur ​​l'interface pour donner accès aux fonctionnalités nécessaires.

- -

L'interface de base nsISupports

- -

Les deux fondamentaux de la programmation composant sont basé sur component lifetime(durée de vie), appelé aussi object ownership, et interface querying, sois l'identification des interfaces d'un composant prises en charge lors de l'exécution. Ce chapitre présente la mère de toutes les interfaces XPCOM - nsISupports , qui fournit les solutions à ces deux problèmes pour les développeurs XPCOM.

- -

Object Ownership

- -

Avec XPCOM, parce que les composants peuvent mettre en œuvre un certain nombre d'interfaces, ils doivent être référencés . Quand un composant est créé, un entier interne au composant est incrémenté - connu comme compteur de référence. Au cours de la vie du composant, le compteur de référence augmente et diminue. Lorsque le composant n'a plus d'utilité, le compteur de références atteint zéro, et le composant est détruit.

- -

Lorsque les clients utilisent des interfaces de façon responsable, cela peut être un processus très simple. XPCOM dispose d'outils pour rendre encore cela plus facile. Il peut soulever des problèmes réels de maintenance lorsque, par exemple, un client utilise une interface et oublie de decrémenter le nombre de références. Lorsque cela se produit, les interfaces ne peuvent jamais être libérés et provoqueront des fuites de mémoire. Le système de comptage de référence est, comme beaucoup de choses dans XPCOM, un contrat entre les clients et les implémentations. Il fonctionne quand les utilisateur le respecte, mais quand ils ne le font pas, les choses peuvent aller mal. C'est le rôle de la fonction qui crée le pointeur d'interface pour ajouter la référence initiale, ou owning reference, d'éviter ces problemes.

- -
-

Pointeurs avec XPCOM

- -

Dans XPCOM, les pointeurs se réfèrent à l'interface pointeurs. La différence est subtile, puisque les pointeurs d'interface et les pointeurs réguliers sont tout simplement deux adresses dans la mémoire. Mais un pointeur d'interface est connu pour mettre en œuvre l'interface de base nsISupports, et peut donc être utilisé pour appeler des méthodes telles que AddRef, Release, ou QueryInterface.

-
- -

nsISupports, illustré ci-dessous, fournit les fonctionnalités de base pour faire face à la création d'interface et de comptage de référence. Les membres de cette interface, QueryInterface, AddRef et Release , fournissent les moyens de base pour obtenir la bonne interface d'un objet, incrémenter le compteur de référence, et de libérer les objets une fois qu'ils ne sont plus utilisés.

- -

L'interface nsISupports

- -
class Sample: public nsISupports{
-  private:
-    nsrefcnt mRefCnt;
-  public:
-    Sample();
-    virtual ~Sample();
-    NS_IMETHOD QueryInterface(const nsIID &aIID, void **aResult);
-    NS_IMETHOD_(nsrefcnt) AddRef(void);
-    NS_IMETHOD_(nsrefcnt) Release(void);
-};
-
- -

Les différents types utilisés de l'l'interface sont décrites dans la section Types XPCOM. La mise en œuvre complète de nsISupports est indiquée ci-dessous. Voir Une implémentation de référence de QueryInterface pour des informations détaillées.

- -

Mise en œuvre de l'interface nsISupports

- -
// Initialiser le compteur de référence à 0
-Sample::Sample() : mRefCnt(0){
-}
-Sample::~Sample(){
-}
-// la mise en œuvre générique de QI
-NS_IMETHODIMP Sample::QueryInterface(const nsIID &aIID,
-                                  void **aResult){
-  if (!aResult) {
-    return NS_ERROR_NULL_POINTER;
-  }
-  *aResult = NULL;
-  if (aIID.Equals(kISupportsIID)) {
-    *aResult = (void *) this;
-  }
-  if (!*aResult) {
-    return NS_ERROR_NO_INTERFACE;
-  }
-  // ajoute une reference
-  AddRef();
-  return NS_OK;
-}
-NS_IMETHODIMP_(nsrefcnt) Sample::AddRef(){
-  return ++mRefCnt;
-}
-NS_IMETHODIMP_(nsrefcnt) Sample::Release(){
-  if (--mRefCnt == 0) {
-    delete this;
-    return 0;
-  }
-  // optional: retourn le nombre de reference
-  return mRefCnt;
-}
-
- -

Object Interface Discovery

- -

Héritage est un autre sujet très important dans la programmation orientée objet. L'héritage est le moyen par lequel une classe est dérivée d'une autre. Quand une classe hérite d'une autre classe, la classe hérite peut remplacer les comportements par défaut de la classe de base sans avoir à copier tout le code de cette classe et créer ainsi une classe plus spécifique, comme dans l'exemple suivant:

- -

Héritage de classe simple

- -
class Shape{
-  private:
-    int m_x;
-    int m_y;
-  public:
-    virtual void Draw() = 0;
-    Shape();
-    virtual ~Shape();
-};
-class Circle : public Shape{
-  private:
-    int m_radius;
-  public:
-    virtual Draw();
-    Circle(int x, int y, int radius);
-    virtual ~Circle();
-};
-
- -

Circle(cercle) est une classe dérivée de Shape(forme) . Un cercle est une forme , en d'autres termes, mais une forme n'est pas nécessairement un cercle . Dans ce cas, forme est la classe de base et cercle est une sous-classe de forme .

- -

Avec XPCOM, toutes les classes dérivent de l'interface nsISupports, de sorte que tous les objets héritent de nsISupports. Avec Héritage Class simple , par exemple, vous êtes en mesure de savoir si la forme est un cercle et dans ce cas de l'utiliser comme un cercle. Ces à quoi la caractéristique QueryInterface de nsISupports est destinée: elle permet aux utilisateurs de trouver et d'accéder aux différentes interfaces en fonction de leurs besoins.

- -

En C++, vous pouvez utiliser une fonctionnalité assez avancé connu sous le nom de dynamic_cast<> , qui lève une exception si l'objet forme n'est un cercle . Mais les exceptions levants RTTI(Run-time type information) ne sont pas une option en raison de la lourdeur et de la compatibilité sur de nombreuses plates-formes, XPCOM fait les choses différemment.

- -
-

Exceptions avec XPCOM

- -

Les exceptions C++ ne sont pas pris en charge directement par XPCOM. Les exceptions doivent être manipulés dans le composant XPCOM, avant de franchir les frontières de l'interface. Toutes les méthodes de l'interface doivent retourner une valeur d'erreur nsresult (voir référence de l'API XPCOM pour une liste de ces codes d'erreur). Ces résultats de code d'erreur deviennent les «exceptions» que gère XPCOM.

-
- -

Au lieu de tirer parti de RTTI du C++, XPCOM utilise la méthode QueryInterface qui passe l'objet à la bonne interface, si cette interface est pris en charge.

- -

Chaque interface est pourvu d'un identifiant qui est généré à partir d'un outil nommée "uuidgen". Cet identifiant universel unique (UUID) est un numéro unique de 128 bits appelé IID. Ce n'est pas la même chose que l'ID d'un composant.

- -

Quand un client veut découvrir si un objet prend en charge une interface donnée, le client passe l'IID assignée à cette interface dans la méthode QueryInterface de cet objet. Si l'objet prend en charge l'interface demandée, il ajoute une référence à lui-même et repasse un pointeur sur cette interface. Si l'objet ne prend pas en charge l'interface une erreur est renvoyée.

- -
class nsISupports {
-  public:
-    long QueryInterface(const nsIID & uuid,
-                        void **result) = 0;
-    long AddRef(void) = 0;
-    long Release(void) = 0;
-};
-
- -

Le premier paramètre de QueryInterface est une référence à une classe nommée nsIID , qui est une encapsulation de base de l'IID. Parmi les trois méthodes sur de la classe nsIID, Equals ,Parse et ToString , Equal est de loin le plus important, car elle est utilisé pour comparer deux nsIID dans le processus d'interrogation d'interface.

- -

Lorsque vous implémentez la classe nsISupports (et vous le verrez dans le chapitre Utilitaires XPCOM pour faciliter les choses comment les macros peuvent rendre ce processus beaucoup plus facile), vous devez vous assurer que les méthodes de la classe renvoient un résultat valable lorsque le client appelle QueryInterface avec le nsISupports IID. QueryInterface devrait soutenir toutes les interfaces que le composant soutient.

- -

Dans les implémentations de QueryInterface, l'argument IID est comparer à la classe nsIID. Si il y a une corespondence, l'objet this pointeur est converti en void, le compteur de référence est incrémenté, et l'interface renvoyée à l'appelant. Si il n'y a pas de correspondance, la classe retourne une erreur et la valeur de sortie est null .

- -

Dans l'exemple ci-dessus, il est assez facile d'utiliser un C-style cast. Mais le casting peut devenir plus compliqué et vous devez d'abord passer void avec le type demandé, parce que vous devez retourner le pointeur d'interface dans la table virtuelle(vtable) correspondant à l'interface demandée. Castings peut devenir un problème quand il y a une hiérarchie d'héritage ambigu.

- -

Identifiants XPCOM

- -

En plus de l'identifiant d'interface IID discuté dans la section précédente, XPCOM utilise deux autres identificateurs très important pour distinguer les classes et les composants.

- -
-

Classes XPCOM Identifier

- -

La classe nsIID est en fait un typedef de la classe nsID. Les autres typedefs de nsID , CID et IID, se réfèrent respectivement à des implémentations spécifiques d'une classe concrète et d'une interface spécifique.

- -

La classe nsID fournit des méthodes comme Equals pour comparer les identificateurs dans le code. Voir identificateurs XPCOM pour plus d'information sur nsID.

-
- -

CID

- -

Un CID est un nombre de 128 bits qui identifie de manière unique une classe ou un composant de la même manière qu'un IID identifie de manière unique une interface. Le CID pour nsISupports ressemble à ceci:

- -

00000000-0000-0000-C000-000000000046

- -

La longueur d'un CID  peut être lourd à traiter dans le code, de sorte que très souvent, vous verrez #defines pour les CID et les autres identifiants utilisés, comme dans cet exemple:

- -
#define SAMPLE_CID \
-{ 0x777f7150, 0x4a2b, 0x4301, \
-{ 0xad, 0x10, 0x5e, 0xab, 0x25, 0xb3, 0x22, 0xaa}}
-
- -

Vous verrez utilisé aussi NS_DEFINE_CID. Cette macro déclare une constante avec la valeur du CID:

- -
static NS_DEFINE_CID(kWebShellCID, NS_WEB_SHELL_CID);
-
- -

Un CID est parfois aussi désigné comme un identificateur de classe . Si la classe à laquelle un CID se réfère a plus d'une interface, il garanties que la classe implémente cette ensemble d'interfaces quand elle est publiée ou fixée.

- -

Contrat ID

- -

Un contract ID est une chaîne lisible utilisé pour accéder à un composant. Un CID ou un contract ID peuvent être utilisés pour accéder à un composant dans gestionnaire de composant. Le contract ID est utilisé pour le composant LDAP Opération :

- -
"@mozilla.org/network/ldap-operation;1"
-
- -

Le format du contract ID est formé du domaine, du module, du nom du composant séparés par des barres obliques et du numéro de version.

- -

Comme un CID, un contract ID se réfère à une mise en œuvre plutôt qu'à une interface à l'instar IID. Mais un contract ID n'est pas liée à une mise en œuvre spécifique, contrairement au CID, il est donc plus général. Au lieu de cela, un contract ID spécifie seulement un ensemble donné d'interfaces qu'il met en œuvre, et un certain nombre de CID diffèrent peuvent intervenir en complément. Cette différence entre un contract ID et un CID est ce qui rend possible de remplacer des composants.

- -

Utilisation

- -

Une fois que le code est divisé en composants, le code client utilise habituellement l'opérateur new pour instancier des objets:

- -
SomeClass* component = new SomeClass();
-
- -

Ce modèle exige que le client connaisse le composant. Le factory design pattern peut être utilisé pour encapsuler la construction de l'objet. L'objectif du procédé est de créer un objet sans exposer les clients à la mise en œuvre et l'initialisation de cet objet. Dans l'exemple SomeClass, la construction et l'initialisation de SomeClass , qui implémente la classe abstraite SomeInterface, est contenu par la fonction New_SomeInterface:

- -

Encapsuler le constructeur

- -
int New_SomeInterface(SomeInterface** ret){
-  // Créer l'objet
-  SomeClass* out = new SomeClass();
-  if (!out) return -1;
-  // Initialisation de l'objet
-  if (out->Init() == FALSE){
-    delete out;
-    return -1;
-  }
-  // conversion de types de l'interface
-  *ret = static_cast<SomeInterface*>(out);
-  return 0;
-}
-
- -

Factory est la classe qui gère effectivement la création des instances distinctes d'un composant. Dans XPCOM, les factories sont mises en œuvre par l'interface nsIFactory. Le modèle de conception utilise l'abstraction et encapsulalion de la construction et de l'initialisation de l'objet.

- -

L'exemple de l'encapsulation du constructeur est une version simple et sans état ​​de factories, mais la programmation réel est généralement plus compliquée, ou les factories ont besoin de stocker l'état. Au minimum, la factory a besoin de préserver l'information des objets qu'elle a créée. Quand une factory gère les instances d'une classe construite dans une bibliothèque dynamique partagée, par exemple, elle doit savoir quand elle peut décharger la bibliothèque. Quand la factory conserve l'état, vous pouvez demander si il y a des références et savoir si la factory a créé des objets.

- -

Un autre état ​​utile est de savoir si oui ou non un objet est un singleton . Par exemple, si la factory crée un objet qui est censé être un singleton, les appels suivants doivent retourner le même objet. Bien qu'il existe des outils et de meilleures façons de gérer les singletons (dont nous parlerons lorsque nous parlons de l'nsIServiceManager), un développeur peut vouloir utiliser cette information pour s'assurer que seul un objet singleton peut exister quelque soit l'usage.

- -

Les exigences d'une classe factory peuvent être traitées de manière strictement fonctionnel, l'état étant détenu par des variables globales, mais il y a des avantages à utiliser des classes pour les factory. Lorsque vous utilisez une classe pour implémenter la fonctionnalité d'une factory, par exemple, vous utilisez nsISupports, qui vous permet de gérer la durée de vie de l'objets lui-mêmes. Ceci est important quand vous voulez regrouper des ensembles de factories et déterminer si elles peuvent être déchargées. Un autre avantage de l'utilisation de nsISupports est que vous pouvez supporter d'autres interfaces comme ils sont introduits. Comme nous allons le montrer lorsque nous aborderons nsIClassInfo, certaines factories soutiennent l'interrogation des informations sur la mise en œuvre sous-jacente, comme le langage d'écriture de l'objet dans les interfaces que l'objet prend en charge, etc. Ce genre d' "évolutivité" est un avantage clé qui est dérivé de nsISupports.

- -

XPIDL et bibliothèques de types

- -

Un moyen facile et puissant pour définir une interface - les interfaces dans un environnement de développement multi-plateforme, doit être indépendant du langage - est d'utiliser une interface définition langage(IDL). XPCOM utilise sa propre variante de la définition CORBA OMG Interface Langage (IDL) appelé XPIDL, qui vous permet de spécifier les méthodes, les attributs et les constantes d'une interface donnée, et aussi d'en définir héritage.

- -

Il y a quelques inconvénients à la définition de votre interface à l'aide XPIDL. Il n'y a pas d'héritage multiple possible. Si vous définissez une nouvelle interface, il ne peut pas provenir de plus d'une interface. Une autre limitation des interfaces dans XPIDL est que les noms de méthode doivent être uniques. Vous ne pouvez pas avoir deux méthodes avec le même nom qui prennent des paramètres différents, et la solution de contournement - avec plusieurs noms de fonction - n'est pas joli:

- -
void FooWithInt(in int x);
-void FooWithString(in string x);
-void FooWithURI(in nsIURI x);
-
- -

Cependant, ces lacunes sont peu de chose en comparaison des fonctionnalités acquises en utilisant XPIDL. XPIDL vous permet de générer des bibliothèques de types , ou typelibs, qui sont des fichiers avec l'extension .xpt. La bibliothèque de types est une représentation binaire d'une ou plusieurs interfaces. Elle fournit un contrôle programmatique et l'accès à l'interface, ce qui est crucial pour les interfaces utilisées d'autre langages que C++. Lorsque les composants sont accessibles à partir d'autres langages, car ils peuvent être en XPCOM, ils utilisent la bibliothèque de type binaire pour accéder à l'interface, trouver les méthodes supportées, et les appeler. Cet aspect de XPCOM est appelé XPConnect . XPConnect est la couche de XPCOM qui donne accès à des composants XPCOM à partir des langages tels que JavaScript. Voir connexion à des composants de l'interface pour plus d'informations à propos de XPConnect.

- -

Quand un composant est accessible à partir d'une langage autre que C ++, tels que JavaScript, son interface est dit "réfléchi" dans cette langage. Chaque interface réfléchie doit avoir une bibliothèque de type correspondant. Actuellement, vous pouvez écrire des composants en C, C++ ou JavaScript (et parfois Python ou Java, en fonction de l'état des liaisons respectives), et il y a des efforts en cours pour renforcer les liaisons XPCOM pour Ruby et Perl.

- -
-

Écriture dans d'autres langages

- -
-

Bien que vous ne disposez pas de l'accès à certains des outils que XPCOM prévoit pour C++ (comme les macros, les modèles, des pointeurs intelligents, et autres) lorsque vous créez des composants dans d'autres langages, vous pouvez être tellement à l'aise avec, que vous pouvez éviter complètement le C++ et construire, par exemple, les composants XPCOM en Python qui peuvent être utilisés à partir de JavaScript, ou vice versa.

- -

Voir les Ressources pour plus d'informations à propos de Python et d'autres langages utilisables avec XPCOM.

-
- -

Toutes les interfaces publiques en XPCOM sont définies en utilisant la syntaxe de XPIDL. Les bibliothèques de types et les fichiers d'en-tête de C++ sont générés à partir de ces fichiers IDL, et l'outil qui génére ces fichiers est appelé le compilateur xpidl . La section Définir l'interface de WEBLOCK dans XPIDL décrit la syntaxe de XPIDL en détail.

- -

Services de XPCOM

- -

Lorsque les clients utilisent des composants, ils instancient généralement un nouvel objet à chaque fois qu'ils ont besoin de la fonctionnalité du composant fournit. Tel est le cas lorsque, par exemple, les clients travaillent avec des fichiers: chaque fichier séparé est représenté par un objet différent, et plusieurs objets de fichier peut être utilisé à tout moment.

- -

Mais il y a aussi une sorte d'objet connu comme le service , dont il n'y a toujours qu'une seule copie (même si il peut y avoir de nombreux services en cours d'exécution à un moment donné).Chaque fois qu'un client veut accéder à la fonctionnalité fournie par un service, ils parlent à la même instance de ce service. Quand un utilisateur recherche un numéro de téléphone dans une base de données de l'entreprise, par exemple, probablement cette base de données est représentée par un «objet» qui est le même pour tous les collaborateurs. Si ce n'etait pas le cas, l'application aurait besoin de garder deux copies d'une grande base de données en mémoire, pour la même chose, et il pourrait aussi y avoir des incohérences entre les documents si les copies ont divergé.

- -

La fourniture de ce point d'accès unique à la fonctionnalité est mis en oeuvre par le singleton design pattern.

- -

Dans XPCOM, en plus de l'appui et de la gestion des composants, il y a un certain nombre de services qui aident les développeurs à l'écriture de composants. Ces services incluent un fichier abstrait multiplateforme qui offre un accès uniforme et puissant pour les fichiers, les services d'annuaire qui maintiennent l'emplacement application, gestion de la mémoire pour s'assurer que tout le monde utilise le même allocateur de mémoire, et un système de notification d'événement qui permet de passer des messages simples. Le tutoriel va vous montrer l'utilisation de chacun de ces composants et services, et de la Référence de l'API XPCOM avec une liste d'interface complète.

- -

Types XPCOM

- -

Il existe de nombreux types déclarés et de simples macros que nous allons utiliser dans les exemples suivants. La plupart de ces types sont des applications simples. Les types les plus courants sont décrits dans les sections suivantes.

- -

les types de méthode

- -

Ce qui suit est un ensemble de types qui veillent à la convention d'appel correcte et de type de méthodes XPCOM de retour.

-
- - - - - - - - - - - - - - - - - - - - - - - - -
NS_IMETHODType de retour de déclaration de méthode.
NS_IMETHODIMPType de retour de mise en œuvre de méthode. 
NS_IMETHODIMP_(type)Cas particulier de type de retour de mise en œuvre. Certaines méthodes telles que AddRef et Release ne renvoient pas le type de retour par défaut.
NS_IMPORTForce la résolution de la méthode en interne par la bibliothèque partagée.
NS_EXPORTForce l'exportation de la méthode par la bibliothèque partagée.
- -

Référence Comptage

- -

Ces macros gérer comptage de référence.

- - - - - - - - - - - - - - - - - - - - -
NS_ADDREFAppelle AddRef de nsISupports.
NS_IF_ADDREFVérifie l'etat null avant d'appeler AddRef.
NS_RELEASEAppelle Release de nsISupports.
NS_IF_RELEASEVérifie l'etat null avant d'appeler Release.
- -

Codes d'état

- -

Ces macros testent les codes d'état.

- - - - - - - - - - - - -
NS_FAILEDRetourne vrai si le code d'état passé est un échec
NS_SUCCEEDEDRetourne vrai est le code d'état passé est un succès.
- -

Variable Mappings

- - - - - - - - - - - - - - - - -
nsrefcntType de comptage de référence(entier de 32 bits).
nsresultType d'erreur par défaut(entier de 32 bits).
nsnullValeur null par défaut.
- -

Codes d'erreur XPCOM communes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NS_ERROR_NOT_INITIALIZEDInstance non initialisée.
NS_ERROR_ALREADY_INITIALIZEDInstance déjà initialisée.
NS_ERROR_NOT_IMPLEMENTEDMéthode non implémentée
NS_ERROR_NO_INTERFACEInterface non pris en charge.
NS_ERROR_NULL_POINTERPointeur valide nsnull.
NS_ERROR_FAILURELa méthode a échoué. Erreur générique.
NS_ERROR_UNEXPECTEDErreur inattendue.
NS_ERROR_OUT_OF_MEMORYAllocation de mémoire échouée.
NS_ERROR_FACTORY_NOT_REGISTEREDClasse inconnue du registre.
- -

-

« PrécédentSuivant »

-

diff --git a/files/fr/mozilla/tech/xpcom/guide/creating_components/index.html b/files/fr/mozilla/tech/xpcom/guide/creating_components/index.html deleted file mode 100644 index dbffe93c6e..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/creating_components/index.html +++ /dev/null @@ -1,281 +0,0 @@ ---- -title: Créer des composants XPCOM -slug: Mozilla/Tech/XPCOM/Guide/Creating_components -translation_of: Mozilla/Tech/XPCOM/Guide/Creating_components ---- -

-

Suivant »

-

- -

Ce guide a pour but de vous initier à Gecko, et de vous permettre de créer des composants XPCOM pour les applications Gecko. Bien que le principal objectif soit de vous permettre d'inclure du code C++ dans des composants utilisables dans Gecko, nous espérons pouvoir vous présenter tous les outils, techniques, et technologies qui constituent XPCOM. En conséquence, ce livre est agencé de telle sorte que vous puissiez suivre et créer vos propres composants ou en apprendre davantage sur les différents sujets XPCOM individuellement, comme un ouvrage de référence. Par exemple, l'introduction inclue une analyse des composants, et le premier chapitre - dans lequel vous compilerez le code de base et vous l'enregistrerez avec Mozilla - explique la relation entre les composants et les modules, les interfaces XPCOM, et le processus d'enregistrement de manière générale.

- -
-

Remarque: De manière générale, essayez d'éviter de créer des composants XPCOM. Les add-ons devraient utiliser le nouveau Add-on SDK autant que possible ; cependant, il est probable que dans certains cas cela soit inévitable.

-
- -
-

Remarque : Cet article décrit une méthode qui utilise xpidl mais vous devriez plutôt utiliser webidl.

-
- -

Preface

- -
-
Pour qui est ce tutoriel
-
Organisation du tutoriel
-
En Pratique
-
Conventions
-
Remerciements
-
- -

Un aperçu de XPCOM

- -
-
Solutions XPCOM
-
Gecko
-
Composants
-
Interfaces -
-
Interfaces et Encapsulation
-
L'interface de base nsISupports
-
-
-
XPCOM Identifiers -
-
CID
-
Contract ID
-
-
-
Factories -
-
XPIDL et bibliothèques de types
-
-
-
XPCOM Services
-
XPCOM Types -
-
Method Types
-
Reference Counting
-
Status Codes
-
Variable Mappings
-
Codes d'erreur XPCOM
-
-
-
- -

Utilisation des composants XPCOM

- -
-
Exemples de composants - -
-
gestionnaire de cookies
-
WebBrowserFind
-
WebLock
-
-
-
Utilisation de composant dans Mozilla -
-
Trouver des composants Mozilla
-
Utilisation de composants XPCOM dans votre Cpp
-
XPConnect: Utilisation de XPCOM avec un Script
-
-
-
- -

Composants Internes

- -
-
Creation de composants dans  Cpp
-
XPCOM Initialization -
-
XPCOM Registry Manifests
-
Registration Methods in XPCOM
-
Autoregistration
-
The Shutdown Process
-
Three Parts of a XPCOM Component Library
-
-
-
XPCOM Glue -
-
The Glue Library
-
XPCOM String Classes
-
-
-
- -

Creating the Component Code

- -
-
What We'll Be Working On
-
Component Registration -
-
The regxpcom Program
-
Registration Alternatives
-
-
-
Overview of the WebLock Module Source
-
Digging In: Required Includes and Constants -
-
Identifiers in XPCOM
-
Coding for the Registration Process
-
The Registration Methods
-
Creating an Instance of Your Component
-
-
-
webLock1.cpp
-
- -

Using XPCOM Utilities to Make Things Easier

- -
-
XPCOM Macros - -
-
Generic XPCOM Module Macros
-
Common Implementation Macros
-
Declaration Macros
-
-
-
webLock2.cpp
-
String Classes in XPCOM -
-
Using Strings
-
nsEmbedString and nsEmbedCString
-
-
-
Smart Pointers
-
- -

Starting WebLock

- -
-
Getting Called at Startup - -
-
Registering for Notifications
-
Getting Access to the Category Manager
-
-
-
Providing Access to WebLock
-
Creating the WebLock Programming Interface
-
Defining the WebLock Interface in XPIDL -
-
The XPIDL Syntax
-
Scriptable Interfaces
-
Subclassing nsISupports
-
The Web Locking Interface
-
-
-
Implementing WebLock -
-
Declaration Macros
-
Representing Return Values in XPCOM
-
XPIDL Code Generation
-
Getting the WebLock Service from a Client
-
Implementing the iWebLock Interface
-
The Directory Service
-
Modifying Paths with nsIFile
-
Manipulating Files with nsIFile
-
Using nsILocalFile for Reading Data
-
Processing the White List Data
-
-
-
iWebLock Method By Method -
-
Lock and Unlock
-
AddSite
-
RemoveSite
-
SetSites
-
GetNext
-
GetSites
-
HasMoreElements
-
-
-
- -

Finishing the Component

- -
-
Using Frozen Interfaces - -
-
Copying Interfaces Into Your Build Environment
-
Implementing the nsIContentPolicy Interface
-
Receiving Notifications
-
-
-
Implementing the nsIContentPolicy -
-
Uniform Resource Locators
-
Checking the White List
-
Creating nsIURI Objects
-
-
-
- -

Building the WebLock UI

- -
-
User Interface Package List
-
Client Code Overview
-
XUL -
-
The XUL Document
-
The Locking UI
-
Site Adding UI
-
weblock.xul
-
-
-
Overlaying New User Interface Into Mozilla -
-
webLockOverlay.xul
-
-
-
Other Resources -
-
weblock.css
-
Image Resources
-
-
-
- -

Packaging WebLock

- -
-
Component Installation Overview
-
Archiving Resources
-
The WebLock Installation Script
-
The WebLock Trigger Script
-
Distributing Your Component
-
- -

Appendix A - Setting up the Gecko SDK

- -
-
Downloading and Setting the SDK
-
Building a Microsoft Visual Cpp Project -
-
Creating a New Project
-
Adding the Gecko SDK to the Project Settings
-
-
-
Building a Windows Project
-
A Makefile for Unix
-
- -

Appendix B - Resources

- -
-
WebLock Resources
-
Gecko Resources
-
XPCOM Resources
-
General Development Resources
-
- -

-

Suivant »

-

-

Copyright (c) 2003 by Doug Turner and Ian Oeschger. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.02 or later. Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.

-

- -

diff --git a/files/fr/mozilla/tech/xpcom/guide/creating_components/preface/index.html b/files/fr/mozilla/tech/xpcom/guide/creating_components/preface/index.html deleted file mode 100644 index 478a139e2f..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/creating_components/preface/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Préface -slug: Mozilla/Tech/XPCOM/Guide/Creating_components/Preface -tags: - - Guide - - XPCOM -translation_of: Mozilla/Tech/XPCOM/Guide/Creating_components/Preface ---- -

-

Suivant »

-

- -

Cette section concerne Gecko et la création de composants XPCOM pour des applications basées sur Gecko. Bien que l'accent soit mis sur les mesures concrètes que vous prenez pour créer un code C ++ valide dans un composant qui peut être utilisé dans Gecko, nous espérons que ces mesures nous donneront également l'occasion de discuter de tous les outils, les techniques et les technologies qui composent XPCOM. En conséquence, le livre est agencé de telle sorte que vous puissiez suivre et créer vos propres composants et en apprendre davantage sur XPCOM, comme dans un ouvrage de référence. Par exemple, l'introduction comprend une discussion sur les composants, et le premier chapitre - dans laquelle vous compilez le code de base et l'enregistrer avec Mozilla - éclair sur la relation entre les composants et les modules, les interfaces XPCOM et le processus d'enregistrement en général.

- -

Le début de chaque chapitre fournit une liste des principaux sujets abordés. Des barres latérales sont incluses pour mettre en évidence les détails techniques. À la fin du livre, vous aurez appris comment construire un composant XPCOM et vous comprendrez sont fonctionnement dans Gecko.

- -

Pour qui est ce tutoriel ?

- -

La Création de composants XPCOM est destinée aux développeurs C ++. Bien que vous pouvez créer des composants XPCOM en JavaScript ou d'autres langages, le code de mise en œuvre des composants est écrit en C ++, et une grande partie de la discussion sur la façon de programmer un composant XPCOM utilise le C ++. Vous ne devez pas non plus être un expert C ++. Bien que les idées de base telles que l'héritage et l'encapsulation devraient vous être familiers. Leur utilisation est expliquée à chaque fois dans le tutoriel. En outre, beaucoup d'exemples sont en JavaScript,  utilisé dans Mozilla pour accéder aux composants XPCOM comme des objets scriptable, votre familiarité avec ce langage est également utile.

- -

XPCOM pour Cross Platform Component Object Model est similaire à Microsoft COM. Si vous avez une expérience avec ces technologies, beaucoup d'entre elles peuvent être appliquées à XPCOM. Cependant, ce tutoriel ne suppose aucune connaissance préalable du COM - toutes les idées de base seront présentés.

- -

Ce livre fournit un tutoriel sur la construction d'un composant XPCOM contrôlant le comportement d'un navigateur. Bien que XPCOM peux être utilisé dans de nombreux environnements qui sont sans rapport avec la navigation web, le principal client de XPCOM est Gecko. Il est open source, conforme aux standards, possède un navigateur Web embarquable, où il est plus facile et plus pratique d'illustrer les fonctionnalités d'XPCOM. Une description complète de ce composant peut être trouvé dans le chapitre ce que nous allons faire du didacticiel.

- -
-

Malgré ce que dit le vieux document, XPCOM ne devrait pas être utilisé pour faire des plugins NPAPI scriptable. A partir de Gecko 1.7.5 (Firefox 1.0) une extension spéciale NPAPI pour scriptabilité est prise en charge, voir plugins Scripting.

-
- -

Organisation du Tutoriel

- -

La liste suivante donne un aperçu des étapes que nous allons suivre pour construire un composant XPCOM appelé WebLock, qui prévoit une fonctionnalité de blocage de sites pour les navigateurs basés sur Gecko. Chacune de ces étapes a son propre chapitre, dans lequel un certain nombre de sujets liés à l'étape sont abordés.

- - - -

Continuons avec des exemples

- -

Il y a deux façons d'installer XPCOM sur votre machine pour que vous puissiez commencer à créer des composants. Si vous avez déjà Mozilla build ou le code source de Mozilla 1.2 ou ultérieure, vous pouvez utiliser le framework XPCOM disponible. Si non, la façon la plus simple d'obtenir et d'utiliser XPCOM est de télécharger le SDK Gecko, qui est un ensemble de bibliothèques et d'outils qui comporte le framework XPCOM.

- -

Que vous compiliez le code source ou utilisiez le SDK Gecko, vous pouvez construire vos propres composants en utilisant les composants existant dans Gecko. Le composant WebLock que nous décrirons dans ce tutoriel met ceci en pratique (et, nous l'espérons, de façon utile) en plus de la manipulation du navigateur. Pour que cela fonctionne, votre code source SDK Gecko ou Mozilla doit être de version 1.2 ou ultérieure (l'interface XPCOM n'a pas été entièrement fixée dans les versions antérieures).

- -

Ce livre suppose que vous utilisez SDK plutôt que de compiler le code source de Mozilla, bien que la différence entre ces deux approches soit minime. La construction, et l'obtention de l'accès à la programmation de composants Gecko est fournies en annexe à ce livre, Configuration du SDK Gecko .

- -

Conventions

- -

Les conventions de formats ci-dessous sont utilisées pour désigner des types d'informations spécifiques dans le livre et rendre les choses plus faciles à analyser. Le but est d'utiliser aussi peu de formats que possible, mais de distinguer clairement les différents types d'informations.

- - - - - - - - - - - - - - - - - - - - - - - - -
FormatDescription
grasnoms des composants apparaissent en gras dans le texte
monospacelignes de code , noms d'interface et membres d'interfaces (par exemple, createInstance()) apparaissent avec cette police. Les lignes de code sont placées dans des encarts séparés. En outre, les noms de fichiers et de répertoires possèdent également cette police.
italiqueles variables apparaissent en italique. Les termes importants et les nouveaux concepts sont également en italique la première fois qu'ils apparaissent dans le texte. Ces termes sont expliqués soit immédiatement après leur citation, ou bien le lecteur est renvoyé à une section dans le livre où ils sont décrits en détail.
lienRéférences à d'autres sections, figures ou tableaux et leur liens vers ces articles.
diff --git a/files/fr/mozilla/tech/xpcom/guide/creating_components/using_xpcom_components/index.html b/files/fr/mozilla/tech/xpcom/guide/creating_components/using_xpcom_components/index.html deleted file mode 100644 index 3a6b536ee6..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/creating_components/using_xpcom_components/index.html +++ /dev/null @@ -1,303 +0,0 @@ ---- -title: Utilisation des composants XPCOM -slug: Mozilla/Tech/XPCOM/Guide/Creating_components/Using_XPCOM_Components -translation_of: Mozilla/Tech/XPCOM/Guide/Creating_components/Using_XPCOM_Components ---- -

-

« PrécédentSuivant »

-
Une des meilleures façons de commencer à travailler avec XPCOM - surtout quand vous concevez l'interface d'un composant qui sera utilisé par d'autres(WebLock) - est de regarder comment les clients utilisent déjà des composants XPCOM.

- -

Les applications sophistiqués comme le navigateur Mozilla sont des utilisateurs de modules XPCOM. En fait, la quasi-totalité des fonctionnalités associees au navigateur - la navigation, la gestion des fenêtres, la gestion des cookies, les signets, la sécurité, la recherche, de rendu et d'autres caractéristiques - sont définies par des composants XPCOM et consultée par le biais de leurs interfaces. Mozilla est fait de composants XPCOM.

- -

Ce chapitre montre comment Mozilla utilise certains de ces objets XPCOM, tels que le CookieManager, et explique comment l'accès au composant de Weblock sera défini.

- -

Exemples de composants

- -

Pour en savoir plus sur l'utilisation de composant particulier référez vous à API XPCOM référence . Pour l'instant, ili est important de comprendre comment un composant est  utilisé par le navigateur Mozilla.

- -

Gestionnaire de Cookies

- -

Gestion des cookies est l'une des nombreux fonctionnalités qui est mise disposition du navigateur sous la forme de composant XPCOM et qui peut être réutilisé par les développeurs qui veulent des fonctionnalités similaires dans leurs applications. Chaque fois qu'un utilisateur accède à la boîte de dialogue de Cookie Manager pour afficher, organiser, ou supprimer les cookies qui ont été stockées sur le système, ils utilisent le composant CookieManager en coulisses. La boite de dialogue du gestionnaire de cookies montre interface utilisateur qui est présenté à l'utilisateur dans Mozilla pour l'utilisation du composant CookieManager.

- -

Boite de dialogue du gestionnaire de cookies

- -

Image:cookie_mgr_dlog.png

- -

Cette boite de dialogue est écrit en XUL et en JavaScript, et utilise une partie de XPCOM appelé XPConnect pour se connecter de manière transparente au composant CookieManager (voir Connexion à des interfaces de composants ci-dessous). XUL expose les fonctionnalités du composant CookieManager, il est tres utilisé dans l'environement Mozilla.

- -

La fonctionnalité du composant CookieManager est disponible à travers l'interface nsICookieManager, ses méthodes publiques sont exposées dans le tableau ci-dessous.

- -

Interface nsICookieManager

- - - - - - - - - - - - - - - - -
removeAllRetirez tous les cookies de la liste des cookies.
enumeratorÉnumérer la liste des cookies.
removeRetirer un cookie particulier de la liste.
- -

Linterface XPCOM garanti la stabilitée, même si il y a des changements sous-jacentes. Les interfaces sont publics et les implémentations sont privés. Lorsque l'utilisateur sélectionne l'un des cookies affichés dans la liste, puis clique sur le bouton Supprimer, la méthode Remove de nsICookieManager est appelée. La fonction est réalisée par le composant CookieManager, et le cookie sélectionné est supprimé du disque et retiré de la liste affichée.

- -

L'extrait Utiliser le composant CookieManager en JavaScript montre comment Remove() peut être appelé à partir de JavaScript:

- -

Utiliser le composant CookieManager en JavaScript

- -
// xpconnect to cookiemanager
-// get the cookie manager component in JavaScript
-var cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
-                     .getService();
-cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);
-
-// called as part of a largerDeleteAllCookies() function
-function FinalizeCookieDeletions() {
-  for (var c=0; c<deletedCookies.length; c++) {
-    cmgr.remove(deletedCookies[c].host,
-                deletedCookies[c].name,
-                deletedCookies[c].path);
-  }
-  deletedCookies.length = 0;
-}
-
- -
-

Connexion à l'interface d'un composant

- -
-

L'interface Mozilla utilise JavaScript pour accèder aux composants XPCOM par l'intermediaire de XPConnect.

- -

XPConnect via XPIDL est appeler à partir d'objets JavaScript, qui représentent des instances de composants comme CookieManager.

- -

XPConnect lie le code d'application de l'interface utilisateur du navigateur Mozilla(XUL basé sur Gecko), à l'environnement JavaScript(comme xpcshell)..

-
- -

Les arrangements contractuels que permet XPCOM ouvre la voie à l'interopérabilité binaire, pour l'accès, l'utilisation et la réutilisation des composants XPCOM. Ils permettent d'utiliser des composants écrits dans d'autres langages tels que JavaScript, Python et autres.

- -

Dans le navigateur Mozilla, les composants sont souvant utilisés à partir de JavaScript. En fait, une recherche du code source Mozilla révèle que le composant CookieManager est appelée seulement à partir de JavaScript. C'est ce que nous allons faire dans ce tutoriel.

-
- -
-

JavaScript et Mozilla

- -
-

JavaScript est la lingua franca du navigateur Mozilla, et les liaisons entre elle et XPCOM sont forts et bien définie. scriptabilité , cette capacité à obtenir et utiliser des composants XPCOM à partir de JavaScript et d'autres langages pour lesquels fixations XPConnect ont été créés, est une caractéristique essentielle de XPCOM.

-
- -

Le composant WebBrowserFind

- -

Les composants sont utilisés partout - dans les fonctionnalités du navigateur de haut niveau tels que nsWebBrowserFind , qui fournit les méthodes find() et findNext() pour trouver du contenu dans les pages Web, et dans les tâches de bas niveau tels que la manipulation des données.

- -

En plus du composant CookieManager, le composant WebBrowserFind est une autre partie d'un grand ensemble d'interfaces du navigation Web que vous pouvez utiliser. Son interface nsIWebBrowserFind est présentée dans L'interface nsIWebBrowserFind .

-
- -

Les méthodes de nsIWebBrowserFind

- - - - - - - - - - - - - - - - - - - - - - - - -
findNextTrouver la prochaine occurrence de la chaîne recherchée.
findBackwardsAttribut booléen qui ajuste findNext() pour rechercher vers le début du document.
searchFramesAttribut booléen qui indique si la recherche s'efectue dans les sous-fenêtres du document actuel.
matchCaseAttribut booléen qui indique la sensibilité à la casse.
entireWordAttribut booléen qui indique si le mot entier doit correspondre.
- -

Quand vous utilisez l'interface d'un composant, vous pouvez demander si il suportr d'autres interfaces. Ce service, qui est défini dans nsISupports est mis en œuvre par tous les composants XPCOM, vous permet d'interroger et de passer d'une interface à un composant dans le cadre des runtime object typing. Il est géré par QueryInterface, qui a été introduit dans le chapitre Vue d'ensemble du XPCOM . L'API de référence XPCOM fournit une référence complète des composants XPCOM disponibles dans Mozilla.

- -

The WebLock Component

- -

Now it's time to look at the WebLock component as another example of XPCOM components (since you'll be creating it shortly). In object-oriented programming, it's typical to design the interface first-to define the functionality that's going to be provided in the abstract, without worrying about how this functionality will be achieved. So we'll put aside the details of the implementation until the next chapter and look at the component from the outside-at the interface to the WebLock component.

- -

The IWebLock Interface

- - - - - - - - - - - - - - - - - - - - - - - - -
lockLock the browser to the current site (or to the whitelist of approved sites read from disk).
unlockUnlock the browser for unrestricted use.
addSiteAdd a new site to the whitelist.
removeSiteRemove a given site from the whitelist.
sitesEnumerator for the list of approved sites read in from the whitelist.
- -

The WebLock component is software that implements all of these methods in the way described by the interface definition. It registers itself for use when the browser starts up, and provides a factory that creates an instance of it for use when the user or administrator clicks the weblock icon in the browser's user interface.

- -

Component Use in Mozilla

- -

So how are components obtained and used in Mozilla? You've seen some enticing snippets of JavaScript in earlier sections of this chapter, but we haven't explained how XPCOM makes components available in general.

- -

This section discusses practical component use in Mozilla. It's divided into three subsections: one about actually finding all these binary components in Mozilla and two others corresponding to the two main ways that clients typically access XPCOM components:

- -

Finding Mozilla Components

- -

This book attempts to provide reference information for XPCOM components and their interfaces that are frozen as of the time of this writing. The Mozilla embedding project tracks the currently frozen interfaces.

- -

Mozilla also has some tools that can find and display information about the interfaces available in Gecko such as the XPCOM Component Viewer, described below, and MXR, which is a web-based source code viewing tool.

- -

The challenge to making good information about XPCOM components available to prospective clients, however, is that the process of freezing the interfaces that are implemented by these components is still ongoing. The Component Viewer does not distinguish between components that are frozen and those that are not. In the source code you view in MXR, interfaces that have been frozen are marked at the top with @status frozen.

- -
The XPCOM Component Viewer
- -

The XPCOM Component Viewer is an add-on you can install in your browser (in sandbox, not available for now).
- Alternatively, you can try XPCOMViewer, a similar add-on.

- -

XPCOM Component Viewer

- -

Image:using-component-viewer.png

- -

The left column shows the components - in this case a subset returned from a search on "gfx" as part of the contract ID and the right column a list of the interfaces. When you open a component on the left, you can see the interfaces it implements along with a list of the methods provided by each interface.

- -

The XPCOM Component Viewer can be extremely useful for this sort of gross interrogation, but again: it displays all of the components and interfaces in your build, many of which are not practical for actual reuse or stable enough to be used reliably in your own application development. Use comprehensive lists like this with caution.

- -

 

- -

Using XPCOM Components in Your Cpp

- -

XPConnect makes it easy to acecss XPCOM components as JavaScript objects, but using XPCOM components in C++ is not much more difficult.

- -

Managing Cookies from Cpp duplicates code from Getting the CookieManager Component in JavaScript, but in C++ instead of JavaScript.

- -

Managing Cookies from Cpp

- -
nsCOMPtr<nsIServiceManager> servMan;
-nsresult rv = NS_GetServiceManager(getter_AddRefs(servMan));
-if (NS_FAILED(rv))
-  return -1;
-
-nsCOMPtr<nsICookieManager> cookieManager;
-rv = servMan->GetServiceByContractID("@mozilla.org/cookiemanager",
-                                     NS_GET_IID(nsICookieManager),
-                                     getter_AddRefs(cookieManager));
-
-if (NS_FAILED(rv))
-  return -1;
-
-PRUint32 len;
-deletedCookies->GetLength(&len);
-
-for (int c=0; c<len; c++)
-    cookieManager->Remove(deletedCookies[c].host,
-                          deletedCookies[c].name,
-                          deletedCookies[c].path,
-                          PR_FALSE);
-
- -

XXX: In the original document, there were only the first three parameters to the |Remove| call. I added |PR_FALSE| as a fourth parameter because the interface seems to require it: http://lxr.mozilla.org/mozilla/source/netwerk/cookie/public/nsICookieManager.idl#64 This problem also appears in the JavaScript version below, and I've added |false| as a fourth parameter there as well.

- -

If your application is written in C++, then Managing Cookies from Cpp shows the steps you take to get an XPCOM component, specify the interface on that component you want to use, and call methods on that interface.

- -

XPConnect: Using XPCOM Components From Script

- -

The CookieManager component we discussed at the beginning of this chapter provides a good opportunity to talk further about using components from JavaScript. In the following code fragment from the Cookie Manager dialog in Mozilla, you can see a singleton of the CookieManager component being created with the getService() method and used to provide the functionality that lets users load and remove cookies from the user interface.

- -

Managing Cookies from JavaScript

- -
var cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
-                     .getService();
-cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);
-
-function loadCookies() {
-  // load cookies into a table
-  var enumerator = cmgr.enumerator;
-  var count = 0;
-  var showPolicyField = false;
-  while (enumerator.hasMoreElements()) {
-    var nextCookie = enumerator.getNext();
-    nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie);
-    /* .... */
-}
-function FinalizeCookieDeletions() {
-  for (var c=0; c<deletedCookies.length; c++) {
-    cmgr.remove(deletedCookies[c].host,
-                deletedCookies[c].name,
-                deletedCookies[c].path,
-                false);
-  }
-  deletedCookies.length = 0;
-}
-
- -

XXX: In the original document, there were only the first three parameters to the |remove| call. I added |false| as a fourth parameter because the interface seems to require it: http://lxr.mozilla.org/mozilla/source/netwerk/cookie/public/nsICookieManager.idl#64 This problem also appears in the C++ version above, and I've added |PR_FALSE| as a fourth parameter there as well.

- -

Beyond the methods that are being called on the CookieManager itself (e.g., cookiemanager.remove, which maps to the remove() function in The nsICookieManager Interface), note the special XPConnect objects and methods that reflect the XPCOM component into JavaScript.

- -

Components is the JavaScript object that controls the connection to components, and classes is an array of all of the classes you can ask for by contract ID. To instantiate an XPCOM component in JavaScript, you create a new Component object and pass in the contract ID for the component you want and ask for either a singleton or an instance of that component to be returned:

- -
var cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
-                     .getService();
-
- -

The resulting cookiemanager object then provides access to all of the methods for that component that have been defined in IDL and compiled into the type library. Using the CookieManager component, you could write code like this to delete all cookies from the system:

- -
cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
-                 .getService();
-cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);
-
-// delete all cookies
-function trashEm() {
-   cmgr.removeAll();
-}
-
- -

Another vital feature of the XPConnect glue this example shows is the availability of the QueryInterface method on all objects that are reflected into JavaScript from XPCOM. As in C++, you can use this method to ask for other interfaces that are available on the given object.

- -
-

Services Versus Regular Instances

- -

Whether to have clients use your component as an instance or a service is a design question, really, and something you should be clear about in the documentation for your component. Actually, the getService() method in the example here calls through to the createInstance() method that is also available from the Component object and caches the result, making it a singleton rather than a normal instance.

- -

The singleton design pattern that is used to create services is described in XPCOM Services.

-
- -

Remember, QueryInterface allows you to query an object for the interfaces it supports. In the case of the snippet in The nsICookieManager Interface, the QueryInterface method is being used to get the nsICookie interface from the enumerator so that, for instance, the JavaScript code can access the value and name attributes for each cookie.

- -
    -
  1. Note : cookie-manager-ui
    Note that the interface is not part of the component itself. XPCOM makes it easy to use components like CookieManager from Mozilla's Cross Platform Front End (XPFE) and other user interfaces, but the component itself doesn't provide its own UI.
  2. -
  3. Note : private-xpcom-interfaces
    There are exceptions to this. Some XPCOM interfaces are also private and not made for general use. Private interfaces do not have the same requirements as the ones that are made available publicly in IDL.
  4. -
  5. Note : cookie-manager-in-tutorial
    The CookieManager component is used to persist for the web locking functionality described in this tutorial.
  6. -
- -

-

« PrécédentSuivant »

-

-

Copyright (c) 2003 by Doug Turner and Ian Oeschger. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.02 or later. Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.

-

diff --git a/files/fr/mozilla/tech/xpcom/guide/index.html b/files/fr/mozilla/tech/xpcom/guide/index.html deleted file mode 100644 index 748a2784b5..0000000000 --- a/files/fr/mozilla/tech/xpcom/guide/index.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: XPCOM guide -slug: Mozilla/Tech/XPCOM/Guide -tags: - - Landing - - Mozilla - - NeedsTranslation - - TopicStub - - XPCOM -translation_of: Mozilla/Tech/XPCOM/Guide ---- -

These articles provide tutorials and usage documentation for XPCOM, including how to use it in your own projects and how to build XPCOM components for your Firefox add-ons and the like.

-

-
Compiler un composant XPCOM javascript
Créer des composants XPCOM
Ce guide a pour but de vous initier à Gecko, et de vous permettre de créer des composants XPCOM pour les applications Gecko.
-
-

diff --git a/files/fr/mozilla/tech/xpidl/index.html b/files/fr/mozilla/tech/xpidl/index.html deleted file mode 100644 index 6f7e3d2425..0000000000 --- a/files/fr/mozilla/tech/xpidl/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: XPIDL -slug: Mozilla/Tech/XPIDL -tags: - - XPCOM -translation_of: Mozilla/Tech/XPIDL ---- -

XPIDL est un langage de description d'interfaces utilisé pour spécifier les classes de l'interface XPCOM.

-

Les langages de description d'interfaces (IDL) sont utilisés pour décrire des interfaces d'une manière indépendante d'un langage et d'une machine. Les IDL permettent de définir des interfaces qui peuvent alors être employées par des outils pour générer automatiquement des spécifications d'interfaces propres à un langage donné.

-

Un de ces outils est xpidl, utilisé pour générer des fichiers d'en-têtes C++, des informations typelib et plusieurs autres choses.

-

Écriture de fichiers interface XPIDL

-

XPIDL ressemble fortement à OMG IDL avec une syntaxe étendue pour traiter les IID et des types supplémentaires. Quelques exemples sont disponibles dans les répertoires xpcom/base et xpcom/ds des sources de Mozilla.

- -

Ressources

- diff --git a/files/fr/mozilla/testing/asan_nightly_project/index.html b/files/fr/mozilla/testing/asan_nightly_project/index.html deleted file mode 100644 index c7937ca41b..0000000000 --- a/files/fr/mozilla/testing/asan_nightly_project/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Projet Nightly ASan -slug: Mozilla/Testing/ASan_Nightly_Project -tags: - - Bug - - Firefox - - Testing - - asan - - bogue - - nightly - - test -translation_of: Mozilla/Testing/ASan_Nightly_Project ---- -

{{ApiRef}}

- -
-

Documentation déplacée dans la documentation de Firefox:
- https://firefox-source-docs.mozilla.org/tools/sanitizer/asan_nightly.html

-
- -

Le Projet Nightly ASan consiste à créer un navigateur Firefox Nightly incluant l'outil populaire AddressSanitizer et à l'améliorer avec des capacités de génération de rapports de plantage à distance pour toutes erreurs détectées.

- -

Le but du projet est de trouver de subtiles altérations de la mémoire survenant lors d'une navigation normale qui ne feraient pas planter du tout le navigateur ou qui feraient planter de telle sorte que nous ne puissions pas déterminer quel est le problème exact à partir du vidage de la mémoire sur incident. Nous disposons de beaucoup de rapports de plantage inopérants et les traces AddressSanitizer sont généralement beaucoup plus exploitables par elles-mêmes (en particulier les traces d'utilisation après libération). Une partie de ce projet consiste à déterminer si des rapports de plantage d'ASan sont exploitables et combien uniquement en surfant. Le succès du projet dépend bien entendu aussi du nombre de participants.

- -

Vous pouvez télécharger la dernière version en utilisant l'un des liens ci-dessous. Les builds sont mises à jour quotidiennement comme les builds nocturnes régulières (comme pour les builds régulières, vous pouvez aller sur "Help" → "About Nightly" pour forcer une vérification de mise à jour ou confirmer que vous utilisez la dernière version).

- -
-

Si vous êtes venu ici à la recherche de versions ASan standard (par exemple pour le fuzzing ou comme développeur voulant reproduire un plantage), vous devriez probablement aller ici à la place.

-
- -

Exigences

- -

Les exigences actuelles sont :

- - - -

Si vous utilisez déjà Nightly, il devrait être possible de partager le profil avec l'instance Nightly ordinaire. Si vous utilisez normalement une version bêta ou version finale (et que vous souhaitez pouvoir y revenir), vous devriez envisager d'utiliser un second profil.

- -
-

Utilisateurs Windows : Veuillez noter que les versions de Windows affichent actuellement une erreur lors de l'installation (voir la section "Problèmes connus" ci-dessous), mais l'installation fonctionne néanmoins. Nous travaillons sur la problème.

-
- -
-

Si vous exécutez dans un environnement avec toutes sortes de restrictions de sécurité supplémentaires (par exemple le sandboxing de processus personnalisé), assurez-vous que votre répertoire /tmp est accessible en écriture et que le binaire  llvm-symbolizer livré est exécutable depuis le processus de Firefox.

-
- -

Préférences

- -

Si vous souhaitez que votre rapport d'accident soit identifiable, vous pouvez aller dans about:config et définir asanreporter.clientid avec votre adresse e-mail valide. Ce n'est pas obligatoire, vous pouvez bien sûr signaler des traces de pantage de manière anonyme. Si vous décidez d'envoyer des rapports avec votre adresse e-mail et que vous avez un compte Bugzilla, pensez à utiliser la même adresse e-mail que celle utilisée pour votre compte Bugzilla. Nous vous mettrons en CC sur les bogues déposés à partir de vos rapports de plantage Si votre adresse e-mail n'appartient pas à un compte Bugzilla, nous ne la publierons pas mais nous l'utiliserons uniquement pour trouver des réponses aux questions soulevées par vos rapports de plantage.

- -
-

La définition de cette préférence nous permet de vous contacter au cas où nous aurions des questions sur votre configuration/système d'exploitation. Veuillez envisager de l'utiliser afin que nous puissions revenir vers vous si nécessaire.

-
- -

Programme de Bug Bounty

- -

Comme récompense spéciale pour participer au programme, nous avons décidé de traiter tous les rapports soumis comme s'ils étaient enregistrés directement dans Bugzilla. Cela signifie que les rapports :

- - - -

sont éligibles pour une prime de bogue selon les règles de notre programme de Bug Bounty. Comme le rapport n'inclura généralement aucune étape de reproduction ou de test, il recevra très probablement une prime inférieure. Comme avec les rapports de bogue habituels, nous récompensons généralement le premier signalement (identifiable) d'un problème.

- -
-

Si vous souhaitez participer au programme de récompense, assurez-vous de régler votre préférence asanreporter.clientid comme indiqué ci-dessus. Nous ne pouvons pas récompenser les rapports soumis sans adresse e-mail.

-
- -

Problèmes connus

- -

Cette section répertorie toutes les limitations actuellement connues des versions Nightly ASan considérées comme des bogues.

- - - -

Notez que ces bogues sont specifiques à ASan Nightly comme indiqué dans la liste des dépendances de suivi de bogues. Pour la liste complète des bogues trouvés par ce projet, voir plutôt cette liste et notez que certains bogues peuvent ne pas être affichés parce qu'ils sont des bogues de sécurité.

- -

Si vous rencontrez un bogue qui ne figure pas dans cette liste, veuillez déposer un bogue sur bugzilla.mozilla.org ou envoyer un courriel à choller@mozilla.com. Lorsque vous déposez un rapport de bogue, cela aide grandement, si vous mettez en CC cette adresse e-mail et marquez le bogue comme bloquant le bug 1386297.

- -

FAQ

- -

Quelles sont les données supplémentaires collectées ?

- -

Le projet ne collecte que les traces ASan et (si vous le définissez dans les préférences) votre adresse e-mail. Nous ne collectons aucune autre donnée de navigateur, en particulier ni les sites que vous consultez ni le contenu de la page. Il s'agit vraiment de traces de plantage soumises à un emplacement distant.

- -
-

Le navigateur Nightly ASan possède également toutes les capacités de collecte de données d'un navigateur Nightly normal. La réponse ci-dessus se réfère uniquement à ce que ce projet recueille en plus de ce que le navigateur Nightly normal peut collecter.

-
- -

Quel est l'impact sur les performances ?

- -

La version Nightly ASan ne s'accompagne que d'un léger ralentissement au démarrage et à la navigation, parfois même pas perceptible. La consommation de RAM est cependant beaucoup plus élevée qu'avec une version normale. Soyez prêt à redémarrer parfois votre navigateur, surtout si vous utilisez beaucoup d'onglets à la fois. En outre, les mises à jour sont plus volumineuses que les mises à jour ordinaires, ce qui signifie que les temps de téléchargement des mises à jour seront plus longs, en particulier si votre connexion Internet est plus lente.

- -
-

Si vous rencontrez des problèmes de performance, voir aussi la section "Problèmes connus" ci-dessus, en particulier le problème du ralentissement de la vitesse de rafraîchissement de l'écran de Firefox.

-
- -

Et la stabilité ?

- -

Le navigateur est aussi stable qu'une version Nightly standard. Différentes personnes ont surfé avec pour leur travail au quotidien depuis des semaines maintenant et nous avons à peine reçu que quelques rapports de plantage.

- -

Comment puis-je confirmer que j'utilise la bonne version ?

- -

Si vous ouvrez about:support et tapez "asanreporter" dans le champ de recherche, vous devriez voir une entrée appelée asanreporter.apiurl associée à une URL. Ne modifiez pas cette valeur.

- -
-

Depuis Firefox 64, la fonctionnalité "ASan Crash Reporter"  n'est plus listée dans le répertoire about:support

-
- -

Y aura-t-il prise en charge de macOS ?

- -

Nous travaillons sur le support pour Mac, mais cela pourrait prendre plus de temps parce que nous n'avons pas de couverture ASan CI sur Mac en raison de contraintes matérielles. Si vous travaillez sur l'ingénierie de publication et que vous souhaitez contribuer à ce que Mac, par exemple, arrive plus tôt, n'hésitez pas à me contacter.

diff --git a/files/fr/mozilla/testing/firefox_and_address_sanitizer/index.html b/files/fr/mozilla/testing/firefox_and_address_sanitizer/index.html deleted file mode 100644 index 77db938413..0000000000 --- a/files/fr/mozilla/testing/firefox_and_address_sanitizer/index.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Firefox et Address Sanitizer -slug: Mozilla/Testing/Firefox_and_Address_Sanitizer -tags: - - Debugging - - Developing Mozilla - - Guide - - Testing -translation_of: Mozilla/Testing/Firefox_and_Address_Sanitizer ---- -

Déplacé dans la documentation de Firefox: https://firefox-source-docs.mozilla.org/tools/sanitizer/asan.html

diff --git a/files/fr/mozilla/testing/index.html b/files/fr/mozilla/testing/index.html deleted file mode 100644 index eaf633a72e..0000000000 --- a/files/fr/mozilla/testing/index.html +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Testing Mozilla code -slug: Mozilla/Testing -tags: - - Landing - - Mozilla - - Testing -translation_of: Mozilla/Testing ---- -

Tester votre code est important ! Avant même de pouvoir intégrer votre code dans l'arborescence des sources, vous devez le tester, et les correctifs de plus grande taille doivent avoir des tests automatisés. Ces articles vous aideront à maîtriser (et à continuer à exceller) le test du code Mozilla.

- -

{{LandingPageListSubpages}}

diff --git a/files/fr/mozilla/thunderbird/account_examples/index.html b/files/fr/mozilla/thunderbird/account_examples/index.html deleted file mode 100644 index 5b0af43c05..0000000000 --- a/files/fr/mozilla/thunderbird/account_examples/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Account examples -slug: Mozilla/Thunderbird/Account_examples -tags: - - Extensions - - thunderbird -translation_of: Mozilla/Thunderbird/Account_examples ---- -
-

Brouillon
- Cette page n'est pas complète

-
- -
-

Ce contenu couvre les fonctionnalités introduites dans Thunderbird 3

-
- -

Cet article fournit des exemples d'accès et de manipulation des comptes Thunderbird. Les interfaces de compte fournissent une vue d'ensemble des interfaces associées. Voir Présention des composants Thunderbird pour une description générale de l'interface utilisateur de Thunderbird et des interfaces de programmation associées.

- -

Itérer sur tous les comptes connus

- -
var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"]
-                        .getService(Components.interfaces.nsIMsgAccountManager);
-var accounts = acctMgr.accounts;
-if (accounts.queryElementAt) {
-  // Gecko 17+
-  for (var i = 0; i < accounts.length; i++) {
-    var account = accounts.queryElementAt(i, Components.interfaces.nsIMsgAccount);
-    // Faire quelque chose avec le compte
-  }
-} else {
-  // Gecko < 17
-  for (var i = 0; i < accounts.Count(); i++) {
-    var account = accounts.QueryElementAt(i, Components.interfaces.nsIMsgAccount);
-    // Faire quelque chose avec le compte
-  }
-}
-
- -

Introspectez les détails de certains comptes (noms, paramètres, etc.)

- -
var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"]
-                        .getService(Components.interfaces.nsIMsgAccountManager);
-var accounts = acctMgr.accounts;
-for (var i = 0; i < accounts.length; i++) {
-  var account = accounts.queryElementAt(i, Components.interfaces.nsIMsgAccount);
-  Application.console.log(account.key);
-  // account.incomingServer est un nsIMsgIncomingServer
-  // account.identities est un nsISupportsArray de nsIMsgIdentity objects
-  //                    vous pouvez le parcourir comme acctMgr.accounts ci-dessus
-  // account.defaultIdentity est un nsIMsgIdentity
-}
-
- -

Parcourir les dossiers d'un compte

- -
var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"]
-                        .getService(Components.interfaces.nsIMsgAccountManager);
-var accounts = acctMgr.accounts;
-for (var i = 0; i < accounts.length; i++) {
-  var account = accounts.queryElementAt(i, Components.interfaces.nsIMsgAccount);
-  var rootFolder = account.incomingServer.rootFolder; // nsIMsgFolder
-  Application.console.log(rootFolder.prettiestName);
-  if (rootFolder.hasSubFolders) {
-    var subFolders = rootFolder.subFolders; // nsIMsgFolder
-    while(subFolders.hasMoreElements()) {
-      var folder = subFolders.getNext().QueryInterface(Components.interfaces.nsIMsgFolder);
-      Application.console.log(folder.prettiestName);
-    }
-  }
-}
diff --git a/files/fr/mozilla/thunderbird/autoconfiguration/index.html b/files/fr/mozilla/thunderbird/autoconfiguration/index.html deleted file mode 100644 index 3deb8fa43d..0000000000 --- a/files/fr/mozilla/thunderbird/autoconfiguration/index.html +++ /dev/null @@ -1,173 +0,0 @@ ---- -title: Autoconfiguration dans Thunderbird -slug: Mozilla/Thunderbird/Autoconfiguration -translation_of: Mozilla/Thunderbird/Autoconfiguration ---- -

Autheur: Ben Bucksch
- Veuillez ne pas modifier ce document sans consulter l'auteur

- -

Traduction Française par Kimpe Andy association heberge-kimpe

- -

l'association heberge-kimpe et une association qui s'engage dans l'open source.

- -

C'est la raison de le traduction de ce document très pratique pour les webmaster

- -

Si vous utilisez zpanel sur votre serveur voici comment mettre en place automatiquement l'autoconfiguration de thunderbrid

- -

 

- -

attention le lien ci dessous ne fonctionne plus.

- -

car le site de la comunauté française de zpanel a fermer c'est porte (merci yousse)

- -

je ferais a nouveau ce tutoriel (avec une mise à jours a sentora) des que j'aurais plus de temp libre.

- -

merci de votre compréhention

- -

cordialement andy

- -

http://www.zpanel-fr.com/forum/10-infos-importantes-mise-a-jour/115-tuto-perssonalisez-les-dns-par-defaut

- -

 

- -

A partir de la version Thunderbird 3.1 et versions ultérieures (et 3,0 dans une certaine mesure) inclut la fonctionnalité de configuration automatique de compte de courriel. Le but de l'autoconfiguration est de le rendre très facile pour les utilisateurs la configuration et la connexion de Thunderbird à leurs serveurs de messagerie. Dans de nombreux cas, les gens devraient être en mesure de télécharger et d'installer Thunderbird, d'entrer leur vrai nom, adresse e-mail et mot de passe dans l'Assistant Configuration du compte et d' avoir un client de messagerie qui fonctionne pleinement et d'envoyer et recevoir leur courrier de manière aussi sécurisée que possible.

- -

voir aussi:

- - - -

Ce document décrit comment la configuration automatique dans Thunderbird fonctionne et ce qu'il faut faire pour permettre aux serveurs de messagerie d'être configurées automatiquement.

- -

Mécanismes

- -

Thunderbird obtient les paramètres de serveur par l'intermédiaire de divers moyens, dont chacun est prévu pour un cas de figure particulier :

- - - -

Tous les mécanismes lookup utilisent le domaine de l'adresse e-mail en tant que base pour la recherche. Par exemple, pour l'adresse email fred@example.com, la recherche est effectuée comme (dans cet ordre):

- -
    -
  1. tb-install-dir/isp/example.com.xml sur le disque dur
  2. -
  3. vérifier autoconfig.example.com
  4. -
  5. rechercher des "example.com" dans le ISPDB
  6. -
  7. rechercher "MX example.com" dans le DNS, et pour mx1.mail.hoster.com, consultez la rubrique "hoster.com" dans le ISPDB
  8. -
  9. essayer de deviner (imap.example.com, smtp.example.com etc)
  10. -
- -

Nous pouvons à l'avenir ajouter des enregistrements DNS SRV en tant que mécanisme pris en charge à l'avenir, mais nous n'avons actuellement pas.

- -

Comment ajouter le support pour votre nom de domaine

- -

Classification

- -

Si vous êtes un grand fournisseur de services Internet (> 100.000 utilisateurs) fournir des adresses email uniquement sous quelques domaines tels que "example.com" et "example.de", vous pouvez soit envoyer la configuration à la ISPDB ou mettre en place un serveur de configuration.
-
- Si vous soutenez alias de messagerie et le nom de connexion de l'utilisateur ne fait pas partie de l'adresse de courrier électronique (par exemple, les utilisateurs peuvent avoir "hero@example.com" comme adresse e-mail, mais le nom de connexion IMAP / POP / SMTP n'est ni «héros» ni "hero@example.com", mais "u67578"), vous devez configurer un serveur de configuration, qui fait l'adresse mail -> nom de connexion lookup.
-
- Si vous hébergez domaines clients, c'est à dire que vous êtes "hoster.com», mais vos clients ont "fred@flintstone.com" et "louis@kent.com" comme des domaines, avec seulement quelques utilisateurs par domaine, vous devez configurer un serveur de configuration (ou s'appuyer sur DNS MX).
-
- Si vous êtes une petite entreprise d'installer Thunderbird sur les postes de travail de vos employés, vous pouvez placer un fichier de configuration dans le dossier d'installation de Thunderbird.

- -

ISPDB

- -

L'URL de base de données est <https://live.mozillamessaging.com/autoconfig/v1.1/>, append nom de domaine, par exemple. <https://live.mozillamessaging.com/autoconfig/v1.1/freenet.de>.
-
- Le processus actuel: Remplissez un bug dans Bugzilla, Produit "Outils web", "composants ISPDB Base de données d'entrées», avec un fichier de configuration qui correspond aux exigences décrites ci-dessous. Demander une révision de bwinton, gozer ou ben.bucksch.
-
- Future: ajouter la configuration à l' ISPDB server app.

- -

 

- -

je finirait la traduction demain merci de votre compréhention

- -

Configuration du serveur avec ISP

- -

Given the email address "fred@example.com", Thunderbird first checks <http://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=fred@example.com> and then <http://example.com/.well-known/autoconfig/mail/config-v1.1.xml>.

- -

Small company

- -

If you are a small company, you can put the XML configuration file on your web server, at URL <http://example.com/.well-known/autoconfig/mail/config-v1.1.xml>. (This is not yet finalized and subject to change.)

- -

Domain hoster

- -

If you are an ISP that hosts domains for your customers - for example, you are hoster.com and your customer registers fancy.com or example.com, and your servers accept and serve the mail for example.com -, you should set up an autoconfig server.

- -

DNS

- -

For each customer domain, you add a DNS record (in addition to the existing MX, A www etc. DNS records):
- autoconfig IN A 10.2.3.4
- or
- autoconfig IN CNAME autoconfig.hoster.com.
- ... where 10.2.3.4 and autoconfig.hoster.com are IP addresses / hostnames you own.
- This allows Thunderbird to find you as hoster.

- -

To make the Version without an autoconfig DNS Entry work you have to make sure that example.com points to the Webserver you will place the config-v1.1.xml on.

- -

Example: example.com A 10.2.3.4

- -

Web server

- -

You set up a web server bound to a physical IP address. This may be on the same machine as other web servers, but the web server must be configured to the content to any requested domain.
-
- You must use an virtual host that match all autoconfig.* domains of your customers. In Apache terms, you can use a "ip-based virtual host". In the Apache configuration files, that means something like: Listen 10.2.3.4:80 (of course, you use a public IP address that you own)

- -
<VirtualHost 10.2.3.4:80> #Must be the first and only virtual host with this ip!
-    DocumentRoot /var/www/autoconfig/
-    ServerName autoconfig.hoster.com
-    <Directory /var/www/autoconfig>
-	Order allow,deny
-	allow from all
-    </Directory>
-</VirtualHost>
- -

Place the configuration file at the URL /mail/config-v1.1.xml on that host.

- -

All config files must be served as Content-Type: text/xml (or application/xml), otherwise the file will be ignored. Also, they must use charset UTF-8 (esp. if there are any non-ASCII-characters).

- -

If you like to use name-based virtual hosts. You probably don't want to setup the autoconfig subdomain for every domain of your customers.
- You can add a Rewriterule in the default virtual host (on debian /etc/apache2/sites-enabled/000-default)  to match all autoconfig.* subdomains:

- -
<VirtualHost *:80> #Must be the first Virtual host
-	ServerAdmin webmaster@hoster.com
-	ServerName www
-	DocumentRoot /var/www
-	RewriteEngine On
-	RewriteCond %{HTTP_HOST} ^autoconfig\. [NC]
-	RewriteRule ^/(.*)	http://autoconfig.hoster.com/$1 [L,R=301,NE]
-        #...
-</VirtualHost>
-<VirtualHost *:80>
-    DocumentRoot /var/www/autoconfig/
-    ServerName autoconfig.hoster.com
-    <Directory /var/www/autoconfig>
- 	Order allow,deny
-	allow from all
-    </Directory>
-</VirtualHost>
-
- -

 

- -

 

- -

Configuration file

- -

This is described at How to create a configuration file and defined on the sub-pages.

- -

{{ languages( { "ja": "ja/Thunderbird/Autoconfiguration" } ) }}

diff --git a/files/fr/mozilla/thunderbird/index.html b/files/fr/mozilla/thunderbird/index.html deleted file mode 100644 index f05663cdbd..0000000000 --- a/files/fr/mozilla/thunderbird/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Thunderbird -slug: Mozilla/Thunderbird -tags: - - TopicStub - - thunderbird -translation_of: Mozilla/Thunderbird ---- -

Thunderbird est l'application de mail/messagerie de Mozilla. Ces pages documentent Thunderbird et fournissent également des liens vers la documentation sur le backend MailNews qui est également utilisé dans d'autres projets tels que Eudora/Penelope, Seamonkey, Correo, etc.

- -

Thunderbird est le petit frère de Firefox et est construit sur la même plate-forme technique que le navigateur Web. En développement depuis de nombreuses années, et actuellement l'un des clients de messagerie open source les plus populaires, il est utilisé par des millions de personnes à travers le monde pour rassembler tous leurs comptes de messagerie, groupes de discussion et lecture de flux dans un environnement familier à haute productivité.  (Du début 2007 au début 2011, Thunderbird a été développé par Mozilla Messaging, une filiale appartenant à Mozilla.)

- - - - - - - - -
-

Documentation

- -
-
Construire Thunderbird
-
Informations sur la construction de Thunderbird avec le référentiel comm-central. Il y a aussi des informations sur le fonctionnement de comm-central, comment le processus de révision fonctionne et comment utiliser le serveur de symboles Mozilla pour aider au débogage.
-
Protocoles MailNews
-
Documentation approximative sur les protocoles de messagerie..
-
Vues de la base de données
-
Information de backend sur {{ Interface("nsIMsgDBView") }} et les interfaces associées..
-
Documentation de l'API Thunderbird
-
Documentation de l'API Thunderbird
-
Documentation d'extension
-
Tutoriels et astuces pour créer des extensions Thunderbird
-
Test automatisé
-
Détails des installations de test automatisées de Thunderbird
-
Thunderbird dans l'entreprise
-
Aide au déploiement de Thunderbird dans les grandes organisations
-
- -

Voir tout...

-
-

Communauté

- - - -

Outils

- - - - - - -
diff --git a/files/fr/mozilla/thunderbird/index/index.html b/files/fr/mozilla/thunderbird/index/index.html deleted file mode 100644 index e8d18b61a8..0000000000 --- a/files/fr/mozilla/thunderbird/index/index.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Index -slug: Mozilla/Thunderbird/Index -tags: - - Index -translation_of: Mozilla/Thunderbird/Index ---- -

{{Index("/fr/docs/Mozilla/Thunderbird")}}

diff --git a/files/fr/mozilla/trouver_trace_appels_pour_rapport_bug/index.html b/files/fr/mozilla/trouver_trace_appels_pour_rapport_bug/index.html deleted file mode 100644 index 98b0d6c0e1..0000000000 --- a/files/fr/mozilla/trouver_trace_appels_pour_rapport_bug/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Comment trouver la trace d'appels pour envoyer un rapport de bug -slug: Mozilla/Trouver_trace_appels_pour_rapport_bug -tags: - - Bugzilla -translation_of: Mozilla/How_to_get_a_stacktrace_for_a_bug_report ---- -

Si vous envoyez un rapport de plantage sur le Bugzilla vous devriez joindre la trace d'appels (en anglais stacktrace). C'est grâce à elle que les développeurs de Mozilla sauront ce qui s'est mal passé et auront un point de départ pour mener leurs investigations. Cet article vous explique comment utiliser le rapporteur de plantage de Mozilla (le Breakpad, un bloc-notes des incidents) pour obtenir un identifiant de plantage que nos ingénieurs peuvent utiliser pour obtenir la trace d'appels. Vous apprendre également de quels autres moyens vous disposez pour obtenir une trace d'appels si vous ne connaissez pas l'identifiant de plantage.

- -

Conditions nécessaires

- -

Vous avez besoin d'une version de Firefox téléchargée sur Mozilla.org. SeaMonkey et Thunderbird comportent également une assistance au rapport de plantage.

- -

Le serveur du rapporteur de bug de Mozilla ne dispose d'informations de débogage que pour les versions produites par Mozilla. Par conséquent le rapporteur de bug ne peut pas fonctionner si vous utilisez votre propre compilation du code source ou une version issue de certaines distributions Linux. Auquel cas vous devrez utiliser une des méthodes alternatives exposées ci-dessous.

- -
Remarque : lorsqu'on traite un rapport de plantage, il est important se savoir si le plantage s'est produit avec Firefox en mode sans échec. C'est ce qui aide les ingénieurs à déterminer si une extension quelconque ou un plugin particulier est à l'origine du problème.
- -

Trouver l'identifiant de plantage avec le rapporteur de plantage de Mozilla

- - - - - - - - -
-

1. Le plantage et l'envoi d'un rapport au système.

- -

La fenêtre du rapporteur de plantage de Mozilla devrait apparaître automatiquement après un plantage de Firefox. Si vous disposez d'autres informations complémentaires sur le plantage, comme des détails sur ce que vous étiez en train de faire au moment critique et qui peut avoir déclenché le plantage, n'hésitez pas à l'écrire dans la zone de saisie des commentaires. Vérifiez que vous avez bien coché la case « Informer Firefox de ce problème pour qu’il puisse être corrigé » et cliquez sur le bouton de redémarrage. Le rapporteur de plantage devrait alors soumettre le rapport de plantage, puis Firefox va s'ouvrir à nouveau.

- -
Le bouton "Détails" permet d'accéder à des données supplémentaires sur l'incident, cependant elles ne sont pas très utiles dans un rapport de bug.
-
-

reporter.jpg

-
- - - - - - - - -
-

2. Communiquez-nous l'identifiant du rapport que vous avez soumis.

- -

Pour accéder à tous vos rapports de bug, saisissez "about:crashes" dans la barre d'adresse de Firefox et appuyez sur Entrée. Firefox should open a list of IDs for your submitted crash reports. Copy two or three of the IDs for the appropriate crashes and paste them into your Bugzilla report. Please check the listed times to avoid copying the ID of an unrelated crash report.

- -
You can prefix a "bp-" to the beginning of an ID to make Bugzilla turn it into a link: bp-a70759c6-1295-4160-aa30-bc4772090918
-
-

crashlist.jpg

-
- -

Trouver l'identifiant d'un plantage au démarrage

- -

Si Firefox tombe en panne au démarrage, vous pouvez toujours accéder à vos rapports d'incident soumis. Les rapports Crash sont accessibles depuis tous les profils de Firefox, new profile ne se bloque pas, vous pouvez l'utiliser pour y accéder par "about: crashes" as above.

- -

Accès aux ID de rapport d'incident en dehors de Firefox

- -

Si vous ne pouvez pas charger Firefox du tout, vous pouvez trouver les fichiers de rapport d'incident à cet emplacement en fonction de votre système d'exploitation:

- -

Windows : %APPDATA%\Mozilla\Firefox\Crash Reports\submitted\
- OS X : ~/Library/Application Support/Firefox/Crash Reports/submitted/
- Linux : ~/.mozilla/firefox/Crash Reports/submitted/

- -

Chaque fichier de ce dossier contient un ID de rapport d'incident envoyé. Vous pouvez vérifier l'heure modifiée ou la création pour chaque fichier afin de déterminer quels rapports d'incident sont pertinents pour votre rapport de bogue.

- -

D'autres moyens de trouver la trace d'appels

- -

Si le journal de crash Mozilla ne s'affiche pas ou n'est pas disponible, vous devrez obtenir manuellement une trace de pile:

- -

Windows

- -

Voir l'article Create a stacktrace with Windbg pour plus d'information à ce propos.

- -

For a full process dump, see How to get a process dump with Windows Task Manager [en-US]

- -

OS X

- -

Exécuter /Applications/Utilities/Console.app.  Ouvrir "~/Library/Logs" et "CrashReporter", et rechercher les logs pour "firefox-bin".

- -

Linux

- -

Note that for most distros the package you need to get symbols for will be something like "xulrunner", not "firefox".

- -

Les fichiers de rapports de plantage dans votre ordinateur

- -

Lorsque Breakpad initialement attrape un plantage, il écrit d'abord les fichiers de rapport d'incident (par exemple les fichiers .dump et .extra) dans le sous-répertoire «pending» de son annuaire «Crash Reports».
-
- Si Breakpad envoie avec succès le rapport d'incident au serveur de rapports, par défaut, les fichiers ajoutés au sous-répertoire «en attente» de la panne sont supprimés et un fichier .txt est placé dans le répertoire «soumis» contenant l'ID d'incident Serveur de rapports a enregistré le crash sous. Si vous voulez que Breakpad quitte les fichiers .dump et .extra sur votre ordinateur pour pouvoir les examiner localement,
MOZ_CRASHREPORTER_NO_DELETE_DUMP variable d'environnement à 1.

- - diff --git a/files/fr/mozilla/working_with_windows_in_chrome_code/index.html b/files/fr/mozilla/working_with_windows_in_chrome_code/index.html deleted file mode 100644 index 7f4c49a097..0000000000 --- a/files/fr/mozilla/working_with_windows_in_chrome_code/index.html +++ /dev/null @@ -1,250 +0,0 @@ ---- -title: Travailler avec des fenêtres dans le chrome -slug: Mozilla/Working_with_windows_in_chrome_code -tags: - - Extensions -translation_of: Mozilla/Working_with_windows_in_chrome_code ---- -

-Cet article décrit la manière de travailler avec des fenêtres multiples dans le code chrome de Mozilla (applications XUL et extensions). Il donne des astuces et des exemples de code sur l'ouverture de nouvelles fenêtres, la recherche de fenêtres déjà ouvertes, et la transmission de données entre différentes fenêtres. -

-

Ouverture de fenêtres

-

Pour ouvrir une nouvelle fenêtre, on utilise habituellement un appel DOM window.open ou window.openDialog, comme ceci : -

-
var win = window.open("chrome://myextension/content/about.xul",
-                      "aproposDeMonExtension", "chrome,centerscreen");
-
-

Le premier paramètre de window.open est l'URI du fichier XUL décrivant la fenêtre et son contenu. -

Le second paramètre est le nom de la fenêtre ; il peut être utilisé par des liens ou formulaires dans leur attribut target. Il est différent du titre de la fenêtre tel que vu par l'utilisateur, qui est spécifié en XUL. -

Le troisième paramètre, facultatif, est une liste de fonctionnalités spéciales que la fenêtre doit avoir. -

La fonction window.openDialog fonctionne de manière similaire, mais permet de spécifier des paramètres optionnels qui peuvent être référencés depuis le code JavaScript. Elle gère également les fonctionnalités de la fenêtre légèrement différemment, supposant notamment toujours que la fonctionnalité dialog est spécifiée. -

Si l'objet window est indisponible (par exemple, lors de l'ouverture d'une fenêtre depuis le code d'un composant XPCOM), vous pouvez avoir besoin de l'interface nsIWindowWatcher. Ses paramètres sont similaires à ceux de window.open, en fait l'implémentation de window.open appelle les méthodes de nsIWindowWatcher. -

-
var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
-                   .getService(Components.interfaces.nsIWindowWatcher);
-var win = ww.openWindow(null, "chrome://myextension/content/about.xul",
-                        "aboutMyExtension", "chrome,centerscreen", null);
-
-

L'objet window

-

Notez la variable win dans la section ci-dessus, à laquelle est assignée la valeur de retour de window.open. Elle peut être utilisée pour accéder à la fenêtre ouverte. La valeur renvoyée par window.open (et les méthodes similaires) est un objet Window (habituellement ChromeWindow), du même type que la variable window. -

Du point de vue technique, elle implémente un certain nombre d'interfaces, dont nsIDOMJSWindow et nsIDOMWindowInternal, mais elle contient également les propriétés définies par l'utilisateur pour les variables globales et fonctions de la fenêtre. Donc, par exemple, pour accéder au document DOM correspondant à la fenêtre, vous pouvez utiliser win.document. -

Notez cependant que le retour de l'appel à open() se fait avant que la fenêtre ne soit totalement chargée, donc certains appels comme win.document.getElementById() ne fonctionneront pas. Pour contourner cette difficulté, vous pouvez déplacer le code d'initialisation vers un gestionnaire load de la fenêtre ouverte, ou passer une fonction de callback comme décrit ci-dessous. -

Vous pouvez obtenir un objet Window depuis un document à l'aide de document.defaultView. -

-

Fenêtres de contenu

-

Lorsqu'une fenêtre XUL contient un élément d'interface capable d'afficher une page, comme <browser> ou <iframe>, le document à l'intérieur de celui-ci est, naturellement, séparé du document de la fenêtre chrome elle-même. Il y a également un objet Window pour chaque sous-document, bien qu'il n'y ait pas de fenêtre dans le sens commun pour le sous-document. -

C'est également valable pour les fenêtres chrome ouvertes dans un onglet ou <tt><tabbrowser></tt>. Les éléments au dessus du document chrome ouvert dans l'onglet sont séparés de votre document chrome. -

Les deux sous-sections qui suivent décrivent la manière de passer les frontières du contenu chrome dans les deux sens, c'est-à-dire d'accéder à des éléments qui sont les ancêtres de votre document chrome, ou des éléments qui sont descendants de votre document chrome, mais néanmoins dans un contexte différent. -

-

Accès aux documents contenus

-

Supposons que vous avez un document chargé dans un élément <tt><tabbrowser></tt>, <tt><browser></tt> ou <tt><iframe></tt> dans votre document. -Vous pouvez utiliser browser.contentDocument pour accéder à ce document et browser.contentWindow pour accéder à l'objet Window de ce document.

Il est nécessaire de prendre en compte la fonctionnalité XPCNativeWrapper si l'on n'opère pas dans du contenu de confiance. -

Dans le cas de <browser type="content-primary"/>, vous pouvez utiliser la propriété raccourcie content pour accéder à l'objet Window du document contenu. Par exemple : -

-
// affiche le titre du document affiché dans l'élément de contenu principal
-alert(content.document.title);
-
-

Par exemple, vous pouvez utiliser content.document dans un overlay à browser.xul pour accéder à la page Web dans l'onglet sélectionné. -

-
Certains exemples utilisent _content au lieu de content. La première forme est déconseillée depuis longtemps, et vous devriez utiliser content dans tout nouveau code.
-

Accès à un document dans un panneau latéral

-

Firefox permet d'accéder à un panneau latéral, qui est implémenté comme un élément <browser> avec id="sidebar". Pour accéder aux éléments et variables à l'intérieur du panneau, il est nécessaire d'utilier document.getElementById("sidebar").contentDocument ou .contentWindow, comme pour l'{{ Anch("Accès aux documents contenus") }}. -

-

Accès aux éléments du document de la fenêtre principale depuis une fenêtre fille

-

Le cas opposé est l'accès au document chrome depuis un script privilégié chargé dans un <tt><browser></tt> ou un <tt><iframe></tt>. -

Un cas typique où cela peut s'avérer utile est lorsque du code exécuté dans un panneau latéral de la fenêtre principale de Firefox doit pouvoir accéder aux éléments de cette fenêtre. -

L'arbre DOM, tel qu'il apparaît dans l'Inspecteur DOM, peut ressembler à ceci : -

-
#document
-  window                 main-window
-    ...
-      browser
-        #document
-          window         myExtensionWindow
-
-

où la fenêtre fille est celle où se trouve votre code. -

Le but est d'accéder aux éléments situés au dessus du document chrome, c'est-à-dire de sortir de la fenêtre chrome et d'accéder à ses ancêtres. Cela peut se faire à l'aide de l'instruction suivante : -

-
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
-                   .getInterface(Components.interfaces.nsIWebNavigation)
-                   .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
-                   .rootTreeItem
-                   .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
-                   .getInterface(Components.interfaces.nsIDOMWindow)
-
-

Ceci permet de passer les limites du contenu chrome, et renvoie l'objet de la fenêtre principale. -

-

Recherche de fenêtres déjà ouvertes

-

Le composant XPCOM window mediator (interface nsIWindowMediator) fournit des informations à propos des fenêtres existantes. Deux de ses méthodes sont souvent utilisées pour obtenir des informations à propos des fenêtres actuellement ouvertes : getMostRecentWindow et getEnumerator. Consultez la page nsIWindowMediator pour plus d'informations sur nsIWindowMediator. -=== Example: Opening a window only if it's not opened already === XXX TBD -

-

Transfert de données entre fenêtres

-

Lorsque l'on travaille avec plusieurs fenêtres, il est souvent nécessaire de faire passer des informations d'une fenêtre à une autre. Comme des fenêtres séparées ont des documents DOM et objets globaux différents pour les scripts, il n'est pas possible d'utiliser une seule variable globale JavaScript dans des scripts de fenêtres différentes.

Plusieurs techniques existent, de puissance et de simplicité variables, pour partager des données. Nous les présenterons de la plus simple à la plus complexe dans les quelques sections suivantes. -

-

Exemple 1 : Passage de données à une fenêtre à son ouverture avec openDialog

-

Lorsque vous ouvrez une fenêtre à l'aide de window.openDialog ou nsIWindowWatcher.openWindow, vous pouvez fournir un nombre d'arguments arbitraires à cette fenêtre. Les arguments sont des objets JavaScript simples, accessibles au travers de la propriété window.arguments dans la fenêtre ouverte. -

Dans cet exemple, on utilise window.openDialog pour ouvrir un dialogue de progression. On lui passe le texte d'état ainsi que les valeurs maximale et courante de la barre de progression. (Notez qu'utiliser nsIWindowWatcher.openWindow est un peu moins trivial .) -

Code d'ouverture : -

-
window.openDialog("chrome://test/content/progress.xul",
-                  "myProgress", "chrome,centerscreen",
-                  {status: "Lecture des données distantes", maxProgress: 50, progress: 10} );
-
-

progress.xul: -

-
<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-
-<window onload="onLoad();" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-<script><![CDATA[
-  var gStatus, gProgressMeter;
-  var maxProgress = 100;
-  function onLoad() {
-    gStatus = document.getElementById("status");
-    gProgressMeter = document.getElementById("progressmeter");
-
-    if("arguments" in window && window.arguments.length > 0) {
-      maxProgress = window.arguments[0].maxProgress;
-      setProgress(window.arguments[0].progress);
-      setStatus(window.arguments[0].status);
-    }
-  }
-
-  function setProgress(value) {
-    gProgressMeter.value = 100 * value / maxProgress;
-  }
-
-  function setStatus(text) {
-    gStatus.value = "Status: " + text + "...";
-  }
-]]></script>
-
-<label id="status" value="(Aucun état)"/>
-<hbox>
-  <progressmeter id="progressmeter" mode="determined"/>
-  <button label="Annuler" oncommand="close();"/>
-</hbox>
-
-</window>
-
-

Exemple 2 : Interaction avec la fenêtre ouvrante

-

Il arrive qu'une fenêtre ouverte doive interagir avec celle qui a déclenché son ouverture (opener). Par exemple, cela peut avoir pour but de lui indiquer que l'utilisateur a effectué des changements dans la fenêtre. On peut trouver la fenêtre qui en a ouvert une autre à l'aide de sa propriété window.opener ou via une fonction de callback passée à la fenêtre, de la façon décrite dans la section précédente. -

Ajoutons un peu de code à l'exemple précédent pour avertir la fenêtre ouvrante lorsque l'utilisateur appuie sur Annuler dans la fenêtre de progression. -

- -
<button label="Annuler" oncommand="opener.cancelOperation(); close();"/>
-
- -
function onCancel() {
-  alert("Opération annulée.");
-}
-
-...
-
-window.openDialog("chrome://test/content/progress.xul",
-                  "myProgress", "chrome,centerscreen",
-                  {status: "Lecture des données distantes", maxProgress: 50, progress: 10},
-                  onCancel);
-
-

Le dialogue de progression peut alors exécuter le callback de cette façon : -

-
<button label="Cancel" oncommand="window.arguments[1](); close();"/>
-
-

Exemple 3 : Utilisation de nsIWindowMediator lorsque opener ne suffit pas

-

La propriété window.opener est très facile à utiliser, mais elle n'est utile que lorsque vous pouvez vous assurer que la fenêtre a été ouverte depuis un endroit connu. Dans des cas plus compliqués, vous devez utiliser l'interface nsIWindowMediator dont il est fait état plus haut. -

Une situation dans laquelle nsIWindowMediator peut être utilisé est dans la fenêtre d'options d'une extension. Supposons que vous développez une extension au navigateur qui consiste en un overlay sur browser.xul et une fenêtre d'options. Supposons que l'overlay contient un bouton pour ouvrir la fenêtre d'options de l'extension, qui doit lire certaines données depuis la fenêtre de navigation. Comme vous vous en souvenez peut-être, le gestionnaire d'extensions de Firefox peut également être utilisé pour ouvrir votre fenêtre d'options. -

Cela signifie que la valeur de window.opener dans votre dialogue d'options n'est pas forcément la fenêtre de navigation, il peut s'agir à la place de la fenêtre du gestionnaire d'extensions. Vous pourriez vérifier la propriété location de l'opener et utiliser opener.opener dans le cas de la fenêtre du gestionnaire d'extensions, mais une meilleure manière de faire est d'utiliser nsIWindowMediator : -

-
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
-                   .getService(Components.interfaces.nsIWindowMediator);
-var browserWindow = wm.getMostRecentWindow("navigator:browser");
-// lecture de valeurs depuis |browserWindow|
-
-

Il peut être tentant d'utiliser une technique similaire pour appliquer les changements effectués par l'utilisateur dans la fenêtre d'options, mais une meilleur manière de le faire est d'utiliser les observateurs de préférences. -

-

Partage de données avancé

-

Le code ci-dessus est utile lorsque vous avez besoin de passer des données d'une fenêtre à une autre ou vers un ensemble de fenêtres, mais dans certains cas vous voulez simplement partager une variable JavaScript commune à différentes fenêtres. Vous pourriez déclarer une variable locale dans chaque fenêtre ainsi que les fonctions nécessaires pour garder les « instances » de la variable synchronisées entre les différentes fenêtres, mais par chance il existe une meilleure solution. -

Pour déclarer une variable partagé, il est nécessaire de trouver un endroit qui existe tout au long de l'exécution de l'application et qui est facilement accessible depuis le code dans différentes fenêtres du chrome. En fait, quelques endroits comme celui-ci existent. -

-

Utilisation d'un composant singleton XPCOM

-

La manière la plus propre et la plus puissante est de définir votre propre composant XPCOM (vous pouvez en écrire un en JavaScript) et y accéder depuis n'importe quel endroit à l'aide d'un appel à getService : -

-
Components.classes["@domain.org/mycomponent;1"].getService();
-
- -

Plusieurs articles et livres sur la création de composants XPCOM existent en ligne. -

-

Stockage de données partagées dans les préférences

-

Si vous avez simplement besoin de stocker une chaîne ou un nombre, l'écriture d'un composant XPCOM complet peut être une complication inutile. Vous pouvez utiliser le service de préférences dans de tels cas. -

- -

Consultez Extraits de code:Préférences pour une description détaillée du système de préférences et des exemples de code. -

Exemple : -

-
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
-                      .getService(Components.interfaces.nsIPrefService);
-var branch = prefs.getBranch("extensions.myext.");
-var var1 = branch.getBoolPref("var1"); // obtient une préférence
-
-

L'astuce de la fenêtre cachée

-

Certains auteurs d'extensions utilisent la fenêtre cachée spéciale (hidden window) pour stocker leurs données et leur code. La fenêtre cachée est similaire à une fenêtre normale, mais contrairement à celles-ci elle est disponible à tout moment de la vie de l'application et n'est pas visible pour l'utilisateur. Le document chargé dans cette fenêtre est chrome://browser/content/hiddenWindow.xul sous Mac OS X où il est utilisé pour implémenter les menus et resource://gre/res/hiddenWindow.html pour les autres systèmes d'exploitation. À terme, cette fenêtre sera retirée des systèmes d'exploitation où elle n'est pas nécessaire ({{ Bug(71895) }}). -

Une référence à la fenêtre cachée peut être obtenue depuis l'interface nsIAppShellService. Comme tout objet DOM, elle vous permet de définir des propriétés personnalisées : -

-
var hiddenWindow = Components.classes["@mozilla.org/appshell/appShellService;1"]
-         .getService(Components.interfaces.nsIAppShellService)
-         .hiddenDOMWindow;
-hiddenWindow.myExtensionStatus = "ready";
-
-

Cependant, les objets placés dans la fenêtre cachée appartiendront toujours à la fenêtre qui les a créés. Si une méthode d'un tel objet accède à des propriétés de l'objet window comme XMLHttpRequest, vous pouvez être confronté à un message d'erreur parce que la fenêtre originale a été fermée. Pour éviter cela, vous pouvez charger les objets avec un fichier script dans la fenêtre cachée: -

-
var hiddenWindow = Components.classes["@mozilla.org/appshell/appShellService;1"]
-         .getService(Components.interfaces.nsIAppShellService)
-         .hiddenDOMWindow;
-hiddenWnd.Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
-         .getService(Components.interfaces.mozIJSSubScriptLoader)
-         .loadSubScript("chrome://my-extension/content/globalObject.js");
-hiddenWnd.myExtensionObject.doSomething();
-
-

globalObject.js contient quelque chose comme : -

-
var myExtensionObject = {
-  doSomething: function() {
-    return new XMLHttpRequest();
-  }
-}
-
- -

Voir aussi

-

Extraits de code:Dialogues et invites -


-

-
-
-{{ languages( { "en": "en/Working_with_windows_in_chrome_code", "es": "es/Trabajar_con_ventanas_desde_c\u00f3digo_chrome", "ja": "ja/Working_with_windows_in_chrome_code" } ) }}
-- cgit v1.2.3-54-g00ecf