From efee41a6a7d6ad7ca6c0940c6b64c551404a38d6 Mon Sep 17 00:00:00 2001 From: A1lo Date: Tue, 14 Nov 2023 21:38:05 +0800 Subject: [PATCH 001/130] zh-cn: update the translation of `Element.setCapture()` (#16957) --- .../zh-cn/web/api/element/setcapture/index.md | 79 +++++++++++-------- 1 file changed, 48 insertions(+), 31 deletions(-) diff --git a/files/zh-cn/web/api/element/setcapture/index.md b/files/zh-cn/web/api/element/setcapture/index.md index b804120c86bec7..0c174b772b951c 100644 --- a/files/zh-cn/web/api/element/setcapture/index.md +++ b/files/zh-cn/web/api/element/setcapture/index.md @@ -1,45 +1,61 @@ --- -title: element.setCapture +title: Element:setCapture() 方法 slug: Web/API/Element/setCapture +l10n: + sourceCommit: acfe8c9f1f4145f77653a2bc64a9744b001358dc --- -{{ ApiRef() }} +{{Deprecated_Header}}{{non-standard_header}}{{ APIRef("DOM") }} -### 概要 +在处理 mousedown 事件的期间调用此方法以将所有的鼠标事件的目标都设置为该元素,直到释放鼠标按钮或者调用 {{domxref("document.releaseCapture()")}}。 -在处理一个 mousedown 事件过程中调用这个方法来把全部的鼠标事件重新定向到这个元素,直到鼠标按钮被释放或者 {{ domxref("document.releaseCapture()") }} 被调用。 +> **警告:** 这个接口从未得到过很好的跨浏览器支持,你也许应使用 {{domxref("element.setPointerCapture")}}(来自指针事件 API)代替。 -### 语法 +## 语法 -```plain -element.setCapture(retargetToElement); +```js-nolint +setCapture(retargetToElement) ``` +### 参数 + - `retargetToElement` - - : 如果被设置为 `true`, 所有事件被直接定向到这个元素; 如果是 `false`, 事件也可以在这个元素的子元素上触发。 + - : 如果为 `true`,所有事件的目标都会被设置为这个元素;如果为 `false`,则事件也可以在这个元素的子元素上触发。 + +### 返回值 + +无({{jsxref("undefined")}})。 ### 示例 -在这个例子中,当你在一个元素中点击并且按住鼠标,然后再使用鼠标拖动的时候,当前鼠标位置的坐标就会被绘制出来。 +在此示例中,当你在点中一个元素并且按住鼠标,然后再移动鼠标的时候,会显示鼠标的当前位置。 ```html - + + - 鼠标捕捉示例 - -

这是一个关于如何在 Gecko 2.0 中针对元素使用鼠标捕捉的示例。

-

- 点我并且按住鼠标滑动 -

-
还没有任何事件哦!
+

在这里测试

+
还没有任何事件
``` -[查看在线演示](/samples/domref/mousecapture.html) +[查看在线演示](https://mdn.dev/archives/media/samples/domref/mousecapture.html) + +## 备注 + +这个元素可能无法被完全滚动到顶部或底部,这取决于其他元素的布局。 -### 注意 +## 规范 -这个元素可能不会完全被滚动到顶部或者底部,这取决于其他元素的布局。 +不属于任何规范。 -### 规范 +## 浏览器兼容性 -无 +{{Compat}} ## 参见 -- {{ domxref("document.releaseCapture()") }} +- {{domxref("document.releaseCapture()")}} +- {{domxref("element.setPointerCapture")}} From 492e5c512a783019a82c4200d8fb3c2f5eb50cdf Mon Sep 17 00:00:00 2001 From: SphinxKnight Date: Tue, 14 Nov 2023 15:55:23 +0100 Subject: [PATCH 002/130] fr: Initial translation for CycleTracker - Secure connection (#16773) Initial translation --- .../cycletracker/secure_connection/index.md | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 files/fr/web/progressive_web_apps/tutorials/cycletracker/secure_connection/index.md diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/secure_connection/index.md b/files/fr/web/progressive_web_apps/tutorials/cycletracker/secure_connection/index.md new file mode 100644 index 00000000000000..10d0f2c8a9b465 --- /dev/null +++ b/files/fr/web/progressive_web_apps/tutorials/cycletracker/secure_connection/index.md @@ -0,0 +1,97 @@ +--- +title: "CycleTracker : connexion sécurisée" +short-title: Connexion sécurisée +slug: Web/Progressive_web_apps/Tutorials/CycleTracker/Secure_connection +l10n: + sourceCommit: 633b73367768588e7c2e93f35b470c503aede19e +--- + +{{PreviousMenuNext("Web/Progressive_web_apps/Tutorials/CycleTracker/HTML_and_CSS", "Web/Progressive_web_apps/Tutorials/CycleTracker/JavaScript_functionality", "Web/Progressive_web_apps/Tutorials/CycleTracker")}} + +{{PWASidebar}} + +Les service workers, et par extension les PWA, sont [restreints aux contextes sécurisés](/fr/docs/Web/Security/Secure_Contexts/features_restricted_to_secure_contexts). Les contextes sécurisés incluent notamment les contextes TLS servis avec le protocole `https://` et les ressources servies localement (par exemple les URL avec l'hôte `127.0.0.1` ou `localhost`, servies avec le protocole `http://`). Dans cette section, nous aborderons les façons de servir une application localement et à distance avec une connexion sécurisée. + +Dans l'article précédent, nous avons utilisé HTML et CSS pour créer le squelette de notre application. Dans ce chapitre, nous ouvrirons le contenu statique de CycleTracker dans un navigateur, nous en verrons le contenu depuis un environnement de développement local, mais aussi depuis un serveur distant, avec une connexion sécurisée. + +## Voir l'application avec le protocole `file://` + +N'importe quel navigateur peut afficher du contenu HTML. Pour voir le fichier HTML avec le CSS correspondant appliqué, par exemple ce que nous avons créé dans le chapitre précédent, ouvrez le fichier `index.html` en navigant dans l'explorateur de fichier de votre ordinateur ou depuis votre navigateur en utilisant l'option de menu « Ouvrir un fichier… ». + +Avec le fichier `index.html` mis à jour et le fichier `style.css` dans le même répertoire, si vous consultez le fichier dans un navigateur, vous devriez obtenir quelque chose ressemblant à cette capture d'écran : + +![Une page web verte avec un grand titre, un formulaire avec une légende, deux sélecteurs de date et un bouton.](filefile.jpg) + +Ici, on voit la page à l'aide du protocole `file://`. Cela fonctionne bien pour notre projet dans l'état actuel, et suffira encore lorsque [nous ajouterons des fonctionnalités à l'aide de JavaScript](/fr/docs/Web/Progressive_web_apps/Tutorials/CycleTracker/JavaScript_functionality). Toutefois, les fichiers de manifeste et les service workers, qui sont des composants clés d'une PWA, ne fonctionnent qu'avec une connexion sécurisée (comme d'autres API). Une PWA doit donc être servie depuis un serveur web en HTTPS ou dans un environnement de développement local avec un hôte comme `localhost` ou `127.0.0.1` (avec ou sans numéro de port). Si nous consultons l'application finalisée avec le protocole `file://`, notre [manifeste](/fr/docs/Web/Progressive_web_apps/Tutorials/CycleTracker/Manifest_file) sera ignoré et [les service workers](/fr/docs/Web/Progressive_web_apps/Tutorials/CycleTracker/Service_workers) ajoutés échoueront. + +> **Note :** Servir l'application avec HTTPS est une bonne chose, qu'il s'agisse d'une PWA ou d'un site web. Cela permet que l'information qui transite entre le serveur web et le navigateur de la personne soit chiffrée de bout en bout. [Plusieurs API web ne fonctionnent qu'avec un contexte sécurisé](/fr/docs/Web/Security/Secure_Contexts/features_restricted_to_secure_contexts). Autrement dit, même si on ne crée par de PWA installable, on pourra avoir besoin d'un contexte sécurisé lorsqu'on ajoute des fonctionnalités. + +Il nous faut un environnement de développement local pour suivre ce tutoriel. Pour que [notre PWA soit installable](/fr/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable), il nous faut un serveur sécurisé. Les fichiers nécessaires devront être servis via une connexion sécurisée sur le Web pour tirer parti des avantages d'une PWA et pour distribuer l'application comme telle. + +## `localhost` + +La méthode par défaut pour mettre en place un environnement de développement local varie d'un système d'exploitation à un autre. L'emplacement par défaut de la page de départ (l'indexe) et des fichiers de configuration peut changer d'un système à l'autre, mais la plupart fournissent une configuration serveur accessible pour le développement. + +Ainsi, sur macOS Sierra ou Monterey, saisir `sudo apachectl start` dans une invite de commande démarrera un serveur web HTTP Apache. Lorsque le serveur est démarré, si vous saisissez l'URL `http://localhost` dans votre navigateur, vous pourrez voir une page web basique qui indique « It works! ». Par défaut, le fichier HTML qui s'affiche est situé dans le répertoire `Library/WebServer/Documents/index.html.en`. Pour activer d'autres extensions de fichier que `.html.en` ou pour changer le répertoire racine, vous devrez éditer le fichier de configuration situé à l'emplacement `/etc/apache2/httpd.conf`. Le serveur peut être arrêté avec la commande `sudo apachectl stop`. + +Le serveur web par défaut du système d'exploitation fournit certes un nom d'hôte simple à retenir, `localhost`, mais il faut connaître l'emplacement racine du serveur et savoir comment le configurer. Il peut aussi être limité à un seul serveur, situé à un emplacement donné. Heureusement, il existe d'autres méthodes, plus intuitives, pour créer un ou plusieurs environnements de développement, accessibles sur différents ports. + +## `localhost`, avec un numéro de port + +Il existe plusieurs extensions d'[IDE](/fr/docs/Glossary/IDE) et paquets propres à certains langages de programmation qui vous permettent de démarrer un environnement de développement à l'aide d'un clic ou d'une commande. Vous pouvez même démarrer plusieurs serveurs locaux, chacun ayant un numéro de port différent. + +Vous pouvez lancer un serveur HTTP local à [l'aide d'une extension Visual Studio Code plugin](/fr/docs/Learn/Common_questions/Tools_and_setup/set_up_a_local_testing_server#using_an_extension_in_your_code_editor), qui permet d'exécuter un serveur local sur un port donné.[L'extension Preview on Web Server](https://marketplace.visualstudio.com/items?itemName=yuichinukiyama.vscode-preview-server) de l'IDE [Visual Studio Code](https://code.visualstudio.com/download) permet de créer un serveur à la racine du répertoire ouvert dans l'éditeur, en utilisant le port `8080` oar défaut. Les extensions peuvent être configurées et on pourra donc changer le paramètre `previewServer.port` pour utiliser un autre port. Par défaut, si on saisit `localhost:8080` dans la barre d'URL du navigateur, on pourra voir la page. + +> **Note :** L'extension Preview on Web Server utilise [Browsersync](https://browsersync.io/). Lorsque vous avez un environnement de développement démarré avec cette extension, l'adresse `localhost:3001` vous permet d'accéder à l'interface utilisateur de Browsersync. + +Vous pouvez également créer [un serveur local avec l'IDE IntelliJ](https://www.jetbrains.com/help/idea/creating-local-server-configuration.html), qui intègre un [serveur web PHP configurable](https://www.jetbrains.com/help/idea/php-built-in-web-server.html#configuring-built-in-web-server). + +Sur MDN, vous pouvez consulter d'autres guides pour apprendre à [mettre en place un serveur de test local](/fr/docs/Learn/Common_questions/Tools_and_setup/set_up_a_local_testing_server) avec [Python](/fr/docs/Learn/Common_questions/Tools_and_setup/set_up_a_local_testing_server#using_python) ou avec [un langage de programmation serveur](/fr/docs/Learn/Common_questions/Tools_and_setup/set_up_a_local_testing_server#running_server-side_languages_locally) comme PHP. + +## `localhost` avec npx + +Si vous avez installé Node.js, vous avez probablement installé npm et npx avec. Dans une invite de commande, saisissez `npx -v`. Si vous voyez un numéro de version, cela signifie que vous pouvez utiliser le paquet [http-server](https://www.npmjs.com/package/http-server). Il s'agit d'un serveur HTTP sans configuration qui peut être installé sans prérequis particulier. Pour démarrer le serveur, saisissez `npx http-server [chemin]` dans votre invite de commande, avec `[chemin]` correspondant au répertoire où se situe votre fichier d'index. + +Par défaut, si vous saisissez `localhost:8080` dans la barre d'URL de votre navigateur, la page sera chargée. Si vous avez déjà un serveur démarré sur le port `8080`, http-server choisira automatiquement un autre port disponible pour servir l'environnement de développement, comme `8081`. + +Vous pouvez aussi choisir un autre numéro de port au démarrage. Par exemple, en saisissant `npx http-server /user/votreNom/CycleTracker -p 8787`, cela démarrera un serveur local sur le port `8787` si ce dernier est disponible. Si vous avez sélectionné un port déjà utilisé, vous aurez une erreur `address already in use` (adresse déjà utilisée) ou un message similaire. Si cela fonctionne, vous pourrez saisir `localhost:8787` dans la barre d'URL de votre navigateur pour afficher le fichier d'index situé à l'emplacement `~/user/votreNom/CycleTracker/index.html`. Si aucun fichier d'index n'est présent, le serveur affichera le contenu du répertoire `~/user/votreNom/CycleTracker/`. + +Ce serveur HTTP statique sans configuration suffira pour notre application. Les applications servies sur `localhost` et `127.0.0.1`, même servies sans HTTPS, sont considérées comme sécurisées. Si les navigateurs affichent des avertissements de sécurité, ceux-ci peuvent être ignorés _pour ces adresses_. Bien que ça ne soit pas nécessaire, vous pouvez configurer votre serveur web local pour utiliser HTTPS, en [ajoutant un certificat TLS intégré](https://github.com/lwsjs/local-web-server/wiki/How-to-get-the-%22green-padlock%22-using-the-built-in-certificate). Avec le certificat, vous pourrez installer et exécuter [local-web-server]() en ligne de commande pour servir votre projet en HTTPS et éviter tout avertissement de sécurité. + +```bash +npm install -g local-web-server +cd ~/user/votreNom/CycleTracker/ +ws --https +``` + +Vous devrez peut-être utiliser `sudo` pour la commande d'installation globale précédente. + +> **Note :** Si vous faites attention à la confidentialité et à la vie privée, vous verrez ici que vous pouvez construire votre PWA vous-même et l'installer sur votre machine depuis votre propre environnement de développement, sans jamais avoir besoin d'Internet. Cette application ne contient aucun pistage et aussi respectueuse de la vie privée que possible. + +## Serveurs externes sécurisés + +Les options précédentes sont acceptables et nécessaires pour tester une application lorsqu'on la développe (que ce soit celle de ce tutoriel ou une autre). Toutefois, même s'il est parfois possible d'héberger soi-même l'application sur un de ses appareils pour la rendre disponible sur Internet, ce n'est pas l'approche recommandée. + +Pour bénéficier des fonctionnalités propres aux PWA comme l'installation rapide, une interface utilisateur dédiée et une éventuelle publication sur un magasin d'application, l'application doit être une PWA, ce qui signifie qu'elle doit utiliser un service worker, ce qui implique d'utiliser une connexion sécurisée. Pour distribuer votre application et permettre à d'autres de la voir, de l'utiliser et de l'installer, vous aurez besoin que votre contenu soit hébergé et disponible sur un serveur _distant_. + +Pour publier officiellement une PWA, vous souhaiterez peut-être investir dans [un nom de domaine et un hébergement web](/fr/docs/Learn/Common_questions/Tools_and_setup/How_much_does_it_cost#hébergement). Pour les projets open source, où le code est disponible publiquement pour que toutes et tous puissent l'étudier et y contribuer, vous pouvez héberger votre projet sur [GitHub Pages](https://pages.github.com/). + +## GitHub Pages + +L'application CycleTracker actuelle peut être vue sur GitHub de façon sécurisée à l'URL [https://mdn.github.io/pwa-examples/cycletracker/html_and_css](https://mdn.github.io/pwa-examples/cycletracker/html_and_css). Nous avons mis en place les fichiers grâce à un dépôt GitHub de MDN. De même, si vous avez un compte [GitHub](https://github.com), vous pouvez mettre en place votre projet ainsi. On notera toutefois que, même si le contenu est servi de façon sécurisée avec TLS, tout ce qui est sur GitHub Pages est public. Si vous vivez dans une région où votre gouvernement peut vous poursuivre si vous suivez vos cycles menstruels, n'hésitez pas à copier-coller le code plutôt que de faire un fork du dépôt sur GitHub. + +Pour créer un site disponible publiquement et servi de façon sécurisée, créez un [site GitHub Pages](https://docs.github.com/fr/pages/getting-started-with-github-pages/creating-a-github-pages-site). Créez un dépôt intitulé `.github.io`, où `` est votre nom de compte GitHub. Créez ensuite une branche `gh-pages`. Le contenu de cette branche sera alors disponible publiquement à l'adresse `https://.github.io`. + +Comme nous l'avons indiqué, les sites hébergés sur GitHub Pages sont disponibles publiquement sur Internet, même si le dépôt est privé. Pour notre application, les données relatives aux cycles sont stockées dans le stockage local. Aussi, même si l'application est disponible via une URL GitHub, les données des utilisatrices et utilisateurs seront uniquement stockées dans le navigateur de l'appareil où les données auront été saisies. Supprimer le contenu du stockage local via l'interface du navigateur suffira à supprimer toutes les données enregistrées. + +Si vous ne souhaitez pas que votre PWA soit disponible à la racine de votre page, vous pouvez créer un sous-répertoire au sein du dépôt `.github.io` ou publier votre PWA dans un dépôt séparé. En [configurant une source de publication](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site) au sein du dépôt de votre PWA, votre application sera visible à l'URL `https://.github.io/`, où `` est le nom du dépôt Git. Vous pouvez configurer GitHub pour publier automatiquement une nouvelle version de votre site quand vous [publiez des changements sur une branche donnée](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-from-a-branch) du dépôt (qui peut être la branche `main`). + +Pour le cas de l'application de démonstration CycleTracker au fur et à mesure des différentes étapes du développement, `` sera `mdn` et le dépôt est `pwa-examples`. Comme ce dépôt contient plusieurs exemples de PWA, chacune avec le code correspondant à différentes étapes du processus de développement, les fichiers (et donc les PWA correspondantes) sont disponibles avec des URL ayant plusieurs niveaux de profondeur. + +> **Note :** [Vous pouvez configurer un domaine personnalisé pour les sites GitHub Pages](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site). + +## Pour la suite + +Nous voici capables de voir la version statique du squelette de notre application CycleTracker dans un navigateur de façon sécurisée. Nous pouvons désormais passer à la construction de cette application. Dans le chapitre suivant, nous créerons le fichier `app.js` qui contiendra le code JavaScript qui permettra de passer de cet état statique à une application web fonctionnelle, qui stocke les données localement. + +{{PreviousMenuNext("Web/Progressive_web_apps/Tutorials/CycleTracker/HTML_and_CSS", "Web/Progressive_web_apps/Tutorials/CycleTracker/JavaScript_functionality", "Web/Progressive_web_apps/Tutorials/CycleTracker")}} From 87b5fda3a6b4a87d9f1b396412f69dedea0cc646 Mon Sep 17 00:00:00 2001 From: Jason Ren <40999116+jasonren0403@users.noreply.github.com> Date: Wed, 15 Nov 2023 15:50:11 +0800 Subject: [PATCH 003/130] [zh-cn] Update 'chrome incompatibilities' (#16945) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: A1lo --- .../chrome_incompatibilities/index.md | 261 +++++++++++++----- .../browser_specific_settings/index.md | 42 +-- 2 files changed, 211 insertions(+), 92 deletions(-) diff --git a/files/zh-cn/mozilla/add-ons/webextensions/chrome_incompatibilities/index.md b/files/zh-cn/mozilla/add-ons/webextensions/chrome_incompatibilities/index.md index 1bf0140546d9b1..1320779b09a4a5 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/chrome_incompatibilities/index.md +++ b/files/zh-cn/mozilla/add-ons/webextensions/chrome_incompatibilities/index.md @@ -1,145 +1,258 @@ --- title: Chrome 不兼容情况 slug: Mozilla/Add-ons/WebExtensions/Chrome_incompatibilities +l10n: + sourceCommit: 311a791dde7caf8039bbc09bd81347a747f703b2 --- {{AddonSidebar}} -使用 WebExtension API 构建的扩展旨在与 Chrome 和 Opera 扩展兼容:尽可能为这些浏览器编写的扩展应该在 Firefox 上运行,并且只需进行极少的更改。 +WebExtension API 的目标是提供对所有主要浏览器的兼容性,因此扩展程序只需最小的改动即可在任何浏览器上运行。 -但是,Firefox 目前仅支持 Chrome 和 Opera 支持的有限功能和 API。我们正在努力增加更多的支持,但许多功能尚未得到支持,我们可能永远不会支持某些功能。 +不过,Chrome 浏览器(以及基于 Chromium 的浏览器)、Firefox 浏览器和 Safari 浏览器之间存在很大差异。特别是: -## JavaScript APIs +- 不同浏览器对 WebExtension API 的支持各不相同。详情请参阅[浏览器对 JavaScript API 的支持](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs)。 +- 不同浏览器对 `manifest.json` 键的支持有所不同。请参阅 [`manifest.json`](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json#浏览器兼容性) 页面上的[“浏览器兼容性”部分](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json)了解更多详情。 +- 扩展 API 命名空间: -### 回调与 chrome.\* 命名空间 + - **在 Firefox 和 Safari 中**:扩展 API 在 `browser` 命名空间下访问。为了与 Chrome 浏览器兼容,还支持 `chrome` 命名空间。 + - **在 Chrome 浏览器中**:扩展 API 在 `chrome` 命名空间下访问。(参见 [Chrome bug 798169](https://crbug.com/798169)) -在 Chrome 中,扩展通过使用 `chrome` 命名空间来访问私有 JavaScript API: +- 异步 API: -```js -chrome.browserAction.setIcon({ path: "path/to/icon.png" }); -``` + - **在 Firefox 和 Safari 中**:异步 API 使用 Promise 实现。 + - **在 Chrome 浏览器中**:在 Manifest V2 中,异步 API 使用回调实现。在 Manifest V3 中,大多数适当的方法都支持 [promise](https://developer.chrome.com/docs/extensions/mv3/intro/mv3-overview/#promises)。(参见 [Chrome bug 328932](https://crbug.com/328932))Manifest V3 支持回调,以实现向后兼容。 -WebExtensions 通过使用 `browser` 命名空间来访问等价的 API: +本页其余部分将详细介绍这些不兼容性和其他不兼容性。 -```js -browser.browserAction.setIcon({ path: "path/to/icon.png" }); -``` +## JavaScript API + +### chrome.\* 和 browser.\* 命名空间 + +- **在 Firefox 和 Safari 中**:API 使用 `browser` 命名空间访问。 -许多 API 是异步的。在 Chrome 中,异步的 API 使用回调来返回值,使用 {{WebExtAPIRef("runtime.lastError")}} 来与传达错误: + ```js + browser.browserAction.setIcon({ path: "path/to/icon.png" }); + ``` + +- **在 Chrome 中**:API 使用 `chrome` 命名空间访问。 + + ```js + chrome.browserAction.setIcon({ path: "path/to/icon.png" }); + ``` -```js -function logCookie(c) { - if (chrome.extension.lastError) { - console.error(chrome.extension.lastError); - } else { +### 回调与 Promise + +- **在 Firefox 和 Safari(所有版本)以及 Chrome 浏览器(从 Manifest 版本 3 开始)中**:异步 API 使用 [promise](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise) 返回值。 + + ```js + function logCookie(c) { console.log(c); } -} -chrome.cookies.set({ url: "https://developer.mozilla.org/" }, logCookie); -``` + function logError(e) { + console.error(e); + } -在 WebExtensions 中应使用 [promises](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise) 来访问等价的 API: + let setCookie = browser.cookies.set({ + url: "https://developer.mozilla.org/", + }); + setCookie.then(logCookie, logError); + ``` -```js -function logCookie(c) { - console.log(c); -} +- **在 Chrome 中**:在 Manifest V2 中,异步 API 使用回调来返回值,并使用 {{WebExtAPIRef("runtime.lastError")}} 来返回错误。在 Manifest V3 中,为实现向后兼容,支持回调,并在大多数适当的方法中支持 [promise](https://developer.chrome.com/docs/extensions/mv3/intro/mv3-overview/#promises)。 -function logError(e) { - console.error(e); -} + ```js + function logCookie(c) { + if (chrome.runtime.lastError) { + console.error(chrome.runtime.lastError); + } else { + console.log(c); + } + } -var setCookie = browser.cookies.set({ url: "https://developer.mozilla.org/" }); -setCookie.then(logCookie, logError); -``` + chrome.cookies.set({ url: "https://developer.mozilla.org/" }, logCookie); + ``` + +### Firefox 支持 chrome 和 browser 命名空间 -### Firefox 支持 `chrome` 和 `browser` 命名空间 +作为一种移植辅助工具,WebExtensions 的 Firefox 实现支持使用回调的 `chrome` 和使用 Promise 的 `browser`。这意味着许多 Chrome 扩展无需更改即可在 Firefox 中运行。 -为了帮助移植,Firefox 的 WebExtension 实现支持 `chrome` 与回调和 `browser` 与 promise。这意味着许多 Chrome 扩展无须修改就能在 Firefox 上运行。然而并不是 WebExtension 标准的一部分,也许不会被所有兼容 WebExtension 的浏览器支持。 +> **备注:** `browser` 命名空间由 Firefox 和 Safari 支持。在 [Chrome bug 798169](https://crbug.com/798169) 解决之前,Chrome 浏览器不提供 `browser` 命名空间。 -如果你在编写 WebExtension 时确实要用到 `browser` 和 promise,我们也开发了 polyfill 来保证扩展可以在 Chrome 里运行:. +如果你在编写 WebExtension 时确实要用到 `browser` 和 promise,我们也开发了 polyfill 来保证扩展可以在 Chrome 里运行:。 -### 部分受支持的 API +### 部分支持的 API 页面 [JavaScript API 的浏览器支持情况](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs) 包含了介绍受 Firefox 任意程度支持的 API 的兼容性表格。若对 API 的支持存在须要注意的事项,并标有星号“\*”,且在 API 的参考页面会介绍注意事项。 -这些表格由 [在 GitHub 上以 JSON 文件存储的兼容性数据](https://github.com/mdn/browser-compat-data)生成。 +这些表格由[在 GitHub 上以 JSON 文件存储的兼容性数据](https://github.com/mdn/browser-compat-data)生成。 -本节剩余部分介绍了表格未涵盖的兼容性问题。 +本节其余部分将介绍在构建跨浏览器扩展时可能需要考虑的主要兼容性问题。此外,请记得查看浏览器兼容性表,因为其中可能包含更多兼容性信息。 -#### notifications +#### Notifications API -- For `notifications.create(), with the "basic"` [`type`](/zh-CN/Add-ons/WebExtensions/API/notifications/TemplateType), `iconUrl` is optional in Firefox. It is required in Chrome. -- Notifications are cleared immediately when the user clicks on them. This is not the case in Chrome. -- If you call `notifications.create()` more than once in rapid succession, Firefox may end up not displaying any notification at all. Waiting to make subsequent calls until within the `chrome.notifications.create() callback` function is not a sufficiently long delay to prevent this from happening. +对于 `type "basic"` 的 `notifications.create()`: -#### proxy +- **在 Firefox 中**:`iconUrl` 为可选项。 +- **在 Chrome 中**:`iconUrl` 为必需项。 -- This API is completely different to the design of the Chrome API. With Chrome's API an extension can register a PAC file, but can also define explicit proxying rules. Since this is also possible using the extended PAC files, this API only supports the PAC file approach. Because this API is incompatible with the Chrome `proxy` API, this API is only available through the `browser` namespace. +当用户点击通知时: -#### tabs +- **在 Firefox 中**:通知会立即清除。 +- **在 Chrome 中**:情况并非如此(通知并不会立即清除)。 -- In Firefox, relative URLs passed into `tabs.executeScript()` or `tabs.insertCSS()` are resolved relative to the current page URL. In Chrome, these URLs are resolved relative to the add-on's base URL. To work cross-browser, you can specify the path as an absolute URL, starting at the add-on's root, like this: +如果连续多次调用 `notifications.create()`: - ```html - /path/to/script.js - ``` +- **在 Firefox 中**:通知可能不会显示。在 `notifications.create()` 回调函数中等待后续调用不足以防止出现这种情况。 + +#### Proxy API + +Firefox 和 Chrome 浏览器都包含代理 API。不过,这两个 API 的设计并不兼容。 + +- **在 Firefox 中**:使用 [proxy.settings](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/proxy/settings) 属性或 [proxy.onRequest](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/proxy/onRequest) 属性设置代理,以动态提供 [ProxyInfo](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/proxy/ProxyInfo)。 + 有关 API 的更多信息,请参阅 [proxy](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/proxy)。 +- **在 Chrome 中**:代理设置在 [`proxy.ProxyConfig`](https://developer.chrome.com/docs/extensions/reference/proxy/#type-ProxyConfig) 对象中定义。根据 Chrome 浏览器的代理设置,该设置可能包含 [`proxy.ProxyRules`](https://developer.chrome.com/docs/extensions/reference/proxy/#type-ProxyRules) 或 [`proxy.PacScript`](https://developer.chrome.com/docs/extensions/reference/proxy/#type-PacScript)。代理设置使用 [proxy.settings](https://developer.chrome.com/docs/extensions/reference/proxy/#property-settings) 属性。 + 有关 API 的更多信息,请参阅 [chrome.proxy](https://developer.chrome.com/docs/extensions/reference/proxy/)。 + +#### Tabs API + +使用 `tabs.executeScript()` 或 `tabs.insertCSS()` 时: + +- **在 Firefox 中**:传递的相对 URL 将相对于当前页面 URL 解析。 +- **在 Chrome 中**:相对网址是相对于扩展的基本网址解析的。 + +若要跨浏览器运行,可将路径指定为绝对 URL,从扩展根目录开始,如下所示: + +```plain +/path/to/script.js +``` + +调用 `tabs.remove()` 时: + +- **在 Firefox 中**:`tabs.remove()` promise 在 `beforeunload` 事件后兑现。 +- **在 Chrome 中**:回调不等待 `beforeunload`。 -- 在 Firefox 中,用 `tabs.query()` 根据 URL 查询标签页需要有`"tabs"` 权限。在 Chrome 中,没有`"tabs"`权限也可以,但结果将限制在 URL 匹配主机权限的标签页。 +#### WebRequest API -#### webRequest +- **在 Firefox 中**: -- 在 Firefox 中,只有原网址使用 `http:` 或 `https:` 协议时所请求的重定向才有效。 -- In Firefox, events are not fired for system requests (for example, extension upgrades or searchbar suggestions). From Firefox 57 onwards, Firefox makes an exception for extensions that need to intercept {{WebExtAPIRef("webRequest.onAuthRequired")}} for proxy authorization. See the documentation for {{WebExtAPIRef("webRequest.onAuthRequired")}}. -- In Firefox, if an extension wants to redirect a public (e.g. HTTPS) URL to an [extension page](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/user_interface/Extension_pages), the extension's manifest.json file must contain a [web_accessible_resources](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources) key that lists the URL for the extension page. Note that any website may then link or redirect to that url, and extensions should treat any input (POST data, for examples) as if it came from an untrusted source, just as a normal web page should. + - 只有当原始 URL 使用了 `http:` 或 `https:` 协议时,请求才能被重定向。 + - `activeTab` 权限不允许拦截当前标签页中的网络请求。(参见 [bug 1617479](https://bugzil.la/1617479)) + - 系统请求(如扩展升级或搜索栏建议)不会触发事件。 -#### windows + - **从 Firefox 57 开始**:Firefox 对需要拦截 {{WebExtAPIRef("webRequest.onAuthRequired")}} 代理授权的扩展例外处理。请参阅 {{WebExtAPIRef("webRequest.onAuthRequired")}} 的文档。 -- Firefox 中 `onFocusChanged` 对于指定的焦点变化将触发多次。 + - 如果扩展希望将公共(如 HTTPS)URL 重定向到[扩展页面](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/user_interface/Extension_pages),扩展的 `manifest.json` 文件必须包含 [`web_accessible_resources`](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources) 键,其中包含扩展页面的 URL。 + + > **备注:** 任何网站都可以链接或重定向到该 URL,扩展应将任何输入(例如 POST 数据)视为来自不可信任的来源,就像普通网页一样。 + + - 某些 `browser.webRequest.*` API 允许异步返回解析为 `webRequest.BlockingResponse` 的 Promise。 + +- **在 Chrome 中**:只有在提供 `'asyncBlocking'` 选项的情况下,`webRequest.onAuthRequired` 才(通过回调而非 Promise)支持异步的 `webRequest.BlockingResponse`。 + +#### Windows API + +- **在 Firefox 中**:{{WebExtAPIRef("windows")}} API 的 `onFocusChanged` 对于指定的焦点变化将触发多次。 + +### 不支持的 API + +#### DeclarativeContent API + +- **在 Firefox 中**:Chrome 浏览器的 [declarativeContent](https://developer.chrome.com/docs/extensions/reference/declarativeContent/) API [未被实现](https://bugzil.la/1435864)。此外,Firefox [将不支持](https://bugzil.la/1323433#c16) `declarativeContent.RequestContentScript` API(该 API 很少使用,在 Chrome 浏览器的稳定版本中也不可用)。 ### 其他不兼容情况 #### CSS 中的 URL -Firefox 解析 CSS 中嵌入的 URL 时,若 URL 时相对地址,将是相对 CSS 文件,而不是被嵌入的网页文件。 +- **在 Firefox 中**:被注入的 CSS 文件中的 URL 会相对于*该 CSS 文件*进行解析。 +- **在 Chrome 中**:被注入的 CSS 文件中的 URL 会相对于*被注入的页面*进行解析。 -#### 更多不兼容情况 +#### 持后台页面中对话框的支持情况 -Firefox 不支持从后台标签页使用 `alert()、confirm()` 或 [`prompt()`](/zh-CN/docs/Web/API/Window/prompt)。 +- **在 Firefox 中**:[`alert()`](/zh-CN/docs/Web/API/Window/alert)、[`confirm()`](/zh-CN/docs/Web/API/Window/confirm) 和 [`prompt()`](/zh-CN/docs/Web/API/Window/prompt) 在后台页面中不受支持。 #### web_accessible_resources -在 Chrome 中,若资源在 web_accessible_resources 中列出,即可通过 chrome-extension://\/\ 访问。每个扩展的 ID 都是固定的。 +- **在 Firefox 中**:资源会被分配一个随机的 {{Glossary("UUID")}},在 Firefox 的每个实例中都会改变:`moz-extension://«random-UUID»/«path»`。这种随机性可能会阻止你做一些事情,比如将扩展的 URL 添加到另一个域的 CSP 策略中。 +- **在 Chrome 中**:当资源被列在 `web_accessible_resources` 中时,它的访问方式为 `chrome-extension://«your-extension-id»/«path»`。扩展 ID 对于扩展来说是固定的。 + +#### Manifest“key”属性 + +- **在 Firefox 中**:由于 Firefox 对 `web_accessible_resources` 使用随机 UUID,因此不支持此属性。Firefox 扩展可通过 `browser_specific_settings.gecko.id` 清单键(请参阅 [browser_specific_settings.gecko](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings#firefox_gecko_属性) 来固定其扩展 ID)。 +- **在 Chrome 中**:在使用未打包的扩展时,清单可能包含一个 [`"key"` 属性](https://developer.chrome.com/docs/extensions/mv3/manifest/key/),以便在不同机器上固定扩展 ID。这主要在使用 `web_accessible_resources` 时有用。 + +#### 内容脚本 HTTP(S) 请求 + +- **在 Firefox 中**:内容脚本发出 HTTP(S) 请求时,必须提供绝对 URL。 +- **在 Chrome 中**:当内容脚本向相对 URL(如 `/api`)发出请求(例如,使用 [`fetch()`](/zh-CN/docs/Web/API/Fetch_API/Using_Fetch))时,该请求将被发送到 `https://example.com/api`。 + +#### 内容脚本环境 + +- **在 Firefox 中**:[内容脚本环境](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#内容脚本环境)的全局作用域并不严格等于 `window`([Firefox bug 1208775](https://bugzil.la/1208775))。更具体地说,全局作用域(`globalThis`)照例由标准 JavaScript 功能组成,另外还有作为全局作用域原型的 `window`。大多数 DOM API 都通过 `window` 从页面继承,通过 [Xray vision](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Sharing_objects_with_page_scripts#xray_vision_in_firefox) 来屏蔽内容脚本对网页的修改。内容脚本可能会遇到来自其全局作用域的 JavaScript 对象或来自网页的 Xray 封装版本。 +- **在 Chrome 中**:全局作用域为 `window`,可用的 DOM API 一般独立于网页(除了共享底层 DOM 外)。内容脚本无法直接访问网页中的 JavaScript 对象。 -Firefox 以不同方式进行实现。它使用一个随机的 UUID,在每个 Firefox 实例中都不同:moz-extension://\/\。这一随机性可能会让你无法实现某些东西,例如你无法将特定扩展的 URL 添加到另一个域名的 CSP 策略中。 +#### 通过内容脚本在网页中执行代码 -#### Manifest "key" 属性 +- **在 Firefox 中**:{{jsxref("Global_Objects/eval", "eval")}} 在内容脚本的上下文中运行代码,而 `window.eval` 在页面的上下文中运行代码。请参阅[在内容脚本中使用`eval`](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#在内容脚本中使用_eval)。 +- **在 Chrome 中**:{{jsxref("Global_Objects/eval", "eval")}} 和 `window.eval` 总是在内容脚本的上下文而非页面的上下文中运行代码。 -对于解包了的扩展,Chrome 允许将 ["key" 属性](https://developer.chrome.com/extensions/manifest/key)添加到 manifest,以确保在不同机器上的扩展 ID 不变。这主要在使用 web_accessible_resources 时有用。鉴于 Firefox 为 web_accessible_resources 使用随机的 UUID,此属性不受支持。 +#### 在内容脚本之间共享变量 -#### Content script requests happen in the context of extension, not content page +- **在 Firefox 中**:无法通过在一个脚本中将变量赋值给 `this.{variableName}` 并尝试在另一个脚本中使用 `window.{variableName}` 访问它们来在内容脚本之间共享变量。这是 Firefox 沙盒环境造成的限制。该限制可能会被移除;请参阅 [Firefox bug 1208775](https://bugzil.la/1208775)。 -In Chrome when request is called (for example, using [`fetch()`](/zh-CN/docs/Web/API/Fetch_API/Using_Fetch)) to relative URL like `/api` from content script, it will be sent to `https://example.com/api`. In Firefox you have to provide absolute URLs. +#### 导航时内容脚本的生命周期 + +- **在 Firefox 中**:内容脚本在用户离开网页后仍会注入网页。但是,window 对象属性会被销毁。例如,如果内容脚本设置了 `window.prop1 = "prop"`,而用户导航离开并返回页面时,`window.prop1` 是未定义的。此问题在 [Firefox bug 1525400](https://bugzil.la/1525400) 中被跟踪。 + + 要模仿 Chrome 浏览器的行为,请监听 [pageshow](/zh-CN/docs/Web/API/Window/pageshow_event) 和 [pagehide](/zh-CN/docs/Web/API/Window/pagehide_event) 事件。然后模拟注入或销毁内容脚本。 + +- **在 Chrome 中**:当用户离开网页时,内容脚本会被销毁。如果用户点击返回按钮通过历史记录返回页面,则内容脚本会被注入网页。 + +#### “逐标签”缩放行为 + +- **在 Firefox 中**:缩放级别会在页面加载和标签页导航时持续存在。 +- **在 Chrome 中**:缩放更改会在导航时重置;在标签页中导航时,页面始终以其各自的缩放系数加载。 + +请参阅 {{WebExtAPIRef("tabs.ZoomSettingsScope")}} 。 ## manifest.json 键 -The main [manifest.json](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json) page includes a table describing browser support for manifest.json keys. Where there are caveats around support for a given key, this is indicated in the table with an asterisk "\*" and in the reference page for the key, the caveats are explained. +[`manifest.json`](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json) 主页面包含一个表格,说明浏览器对 `manifest.json` 键的支持情况。如果对某个键的支持存在注意事项,则会在表中用星号"\*"表示。选择星号会展开表格,显示解释注意事项的说明。 + +这些表格是根据 [GitHub 中的 JSON 文件](https://github.com/mdn/browser-compat-data)中存储的兼容性数据生成的。 -These tables are generated from compatibility data stored as [JSON files in GitHub](https://github.com/mdn/browser-compat-data). +## 原生通信 -## Native messaging +### 基于连接的信息传递参数 -### Command-line arguments +**在 Linux 和 Mac 上**:Chrome 浏览器会向本地应用程序传递一个参数,即启动它的扩展的来源,其形式为 `chrome-extension://"extensionID/"`(需要使用斜线)。这样,应用程序就能识别扩展。 -On Linux and Mac, Chrome passes one argument to the native app, which is the origin of the extension that started it, in the form: `chrome-extension://[extensionID]`. This enables the app to identify the extension. +**在 Windows 上**:Chrome 浏览器会传递两个参数: -On Windows, Chrome passes two arguments: the first is the origin of the extension, and the second is a handle to the Chrome native window that started the app. +1. 扩展的源 +2. 启动应用程序的 Chrome 浏览器本地窗口的句柄 ### allowed_extensions -In Chrome, the `allowed_extensions` key in the app manifest is called `allowed_origins` instead. +- **在 Firefox 中**:清单键名为 `allowed_extensions`。 +- **在 Chrome 中**:清单键名为 `allowed_origins`。 + +### 应用清单位置 + +- **在 Chrome 中**:应用程序清单预计会放在不同的位置。请参阅 Chrome 文档中的[本地消息主机位置](https://developer.chrome.com/docs/apps/nativeMessaging/#native-messaging-host-location)。 + +### 应用持久化 + +- **在 Firefox 中**:本机消息传输连接关闭时,如果子进程没有脱离,Firefox 会将其杀死。在 Windows 系统中,浏览器会将本机应用程序的进程放入[作业对象]()并杀死该作业。假设本地应用程序启动了其他进程,并希望这些进程在本地应用程序被杀死后继续打开。在这种情况下,本地应用程序必须使用 `CreateProcess` 而不是 `ShellExecute` 来启动其他进程,并使用 [`CREATE_BREAKAWAY_FROM_JOB`]() 标志。 + +## 数据克隆算法 + +某些扩展 API 允许扩展从扩展的一部分向另一部分发送数据,例如 {{WebExtAPIRef("runtime.sendMessage()")}}、{{WebExtAPIRef("tabs.sendMessage()")}}、{{WebExtAPIRef("runtime.onMessage")}}、{{WebExtAPIRef("runtime.port")}} 的 `postMessage()` 方法和 {{WebExtAPIRef("tabs.executeScript()")}}。 + +- **在 Firefox 中**:使用[结构化克隆算法](/zh-CN/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)。 +- **在 Chrome 中**:使用 [JSON 序列化算法](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#描述)。将来可能会切换到结构化克隆([issue 248548](https://crbug.com/248548))。 -### App manifest location +结构化克隆算法比 JSON 序列化算法支持更多类型。一个明显的例外是具有 `toJSON` 方法的(DOM)对象。DOM 对象默认情况下不可克隆,也不可进行 JSON 序列化,但使用 `toJSON()` 方法,这些对象可以进行 JSON 序列化(但仍不能使用结构化克隆算法进行克隆)。不可结构化克隆的 JSON 序列化对象示例包括 {{domxref("URL")}} 和 {{domxref("PerformanceEntry")}} 的实例。 -Chrome expects to find the app manifest in a different place. See [Native messaging host location](https://developer.chrome.com/extensions/nativeMessaging#native-messaging-host-location) in the Chrome docs. +依赖于 JSON 序列化算法中的 `toJSON()` 方法的扩展可使用 {{jsxref("JSON.stringify()")}} 后接 {{jsxref("JSON.parse()")}} 来确保可以交换消息,因为解析后的 JSON 值在结构上始终是可克隆的。 diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_specific_settings/index.md b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_specific_settings/index.md index 0a38cda62d82a9..81b35eadd3786a 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_specific_settings/index.md +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_specific_settings/index.md @@ -1,5 +1,5 @@ --- -title: applications +title: browser_specific_settings slug: Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings --- @@ -17,19 +17,19 @@ slug: Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings 强制性 通常不做强制性要求(详细参见When do you need an Add-on ID?)。在 Firefox 48 版本之前为强制要求。 + href="https://extensionworkshop.com/documentation/develop/extensions-and-the-add-on-id/#when-do-you-need-an-add-on-id" + >什么时候需要附加组件 ID?。)如果扩展 ID 不能确定,则必需,参见 browser_specific_settings.gecko.id。 示例
-"applications": {
+"browser_specific_settings": {
   "gecko": {
     "id": "addon@example.com",
     "strict_min_version": "42.0"
@@ -41,30 +41,36 @@ slug: Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings
   
 
 
-`applications` key 包含特定于主机应用程序的键。
+## 描述
 
-目前只包含了一个 key:`gecko`,其中包含了 4 个 attributes:
+`browser_specific_settings` 键包含特定于主机应用程序的键。
 
-- `id`即[extension ID](/zh-CN/Add-ons/Install_Manifests#id)。从 Firefox 48 起为可选项,在此之前为强制必须项。参看[WebExtensions and the Add-on ID](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID)来确认何时需要定义附加组件 ID。
+### Firefox(Gecko)属性
+
+- `id` 即扩展 ID。从 Firefox 48 起为可选项,在此之前为强制必须项。参见 [WebExtensions 和附加组件 ID](https://extensionworkshop.com/documentation/develop/extensions-and-the-add-on-id/) 来确认何时需要定义附加组件 ID。
 - `strict_min_version`: Gecko 所能支持的最小版本号。不允许使用"\*"来定义版本号。默认值为 "42a1"。
 - `strict_max_version`: Gecko 所能支持的最大版本号。如果安装或运行附加组件的 Firefox 版本号高于这个最大版本号,附加组件将不能运行或不允许被安装。默认值为"\*",意思为不对最大版本号做检查。
-- `update_url`为链接到[add-on update manifest](/zh-CN/Add-ons/Updates)的链接。注意链接必须以"https"开头。这是为了使你自己就能够管理附加组件的更新 (如不通过 AMO)。
-
-## Chrome 不兼容性
-
-你不能在 Chrome 附加组件中使用这个 key。
+- `update_url` 为链接到[扩展更新清单](https://extensionworkshop.com/documentation/manage/updating-your-extension/)的链接。注意链接必须以“https”开头。这是为了使你自己就能够管理附加组件的更新(如不通过 AMO)。
 
 ## 示例
 
-示例中包含了所有可能的 key。注意你通常不会包含`strict_max_version`或`update_url`key 在大部分附加组件中。
+示例中包含了所有可能的 key。注意你通常不会在大部分附加组件中包含 `strict_max_version` 和 `update_url`。
 
 ```json
-"applications": {
+"browser_specific_settings": {
   "gecko": {
     "id": "addon@example.com",
     "strict_min_version": "42.0",
     "strict_max_version": "50.*",
     "update_url": "https://example.com/updates.json"
+  },
+  "safari": {
+    "strict_min_version": "14",
+    "strict_max_version": "20"
   }
 }
 ```
+
+## 浏览器兼容性
+
+{{Compat}}

From 1289cfd63daf16a16ad6688333898626a2e5f439 Mon Sep 17 00:00:00 2001
From: hanyujie2002 
Date: Wed, 15 Nov 2023 17:33:04 +0800
Subject: [PATCH 004/130] zh-cn: init the translation of mathml table (#16963)

Co-authored-by: Allo 
---
 .../learn/mathml/first_steps/tables/index.md  | 311 ++++++++++++++++++
 1 file changed, 311 insertions(+)
 create mode 100644 files/zh-cn/learn/mathml/first_steps/tables/index.md

diff --git a/files/zh-cn/learn/mathml/first_steps/tables/index.md b/files/zh-cn/learn/mathml/first_steps/tables/index.md
new file mode 100644
index 00000000000000..1696365f5602bb
--- /dev/null
+++ b/files/zh-cn/learn/mathml/first_steps/tables/index.md
@@ -0,0 +1,311 @@
+---
+title: MathML 表格
+slug: Learn/MathML/First_steps/Tables
+---
+
+{{LearnSidebar}}{{PreviousMenuNext("Learn/MathML/First_steps/Scripts", "Learn/MathML/First_steps/Three_famous_mathematical_formulas", "Learn/MathML/First_steps")}}
+
+掌握了所有基本的数学符号后,接下来要考虑的是用于矩阵式表达和其他高级数学布局的表格布局。
+
+
+  
+    
+      
+      
+    
+    
+      
+      
+    
+  
+
前提: + 基本的计算机操作能力,安装基本软件,基本的文件操作知识,以及 HTML 基础知识(学习 HTML 简介HTML 表格) +
目标: + 了解 MathML 表格元素,并了解一些使用案例。 +
+ +## MathML 表格元素 + +MathML 表格元素与 [HTML 表格](/zh-CN/docs/Learn/HTML/Tables)的元素类似:`` 元素表示数学表格,它的子元素是 `` 元素(表示行),每个 `` 元素都有 `` 元素作为其子元素(表示单元格)。`` 元素可以在 MathML 公式的任何位置插入。`` 元素可以包含任意数量的 MathML 子元素,并将它们布局为 `` 容器。 + +表格通常用于矩阵式表达式(包括向量)。以下是一个基本示例,该示例取自[有关 CSS `matrix()` 函数的文章](/zh-CN/docs/Web/CSS/transform-function/matrix): + +```html hidden + +``` + +```html + + + ( + + + + a + + + c + + + 0 + + + + t + x + + + + + + b + + + d + + + 0 + + + + t + y + + + + + + 0 + + + 0 + + + 1 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 1 + + + + ) + + +``` + +{{ EmbedLiveSample('MathML 表格元素', 700, 200) }} + +## 允许单元格跨多行多列 + +与 [HTML 表格](/zh-CN/docs/Learn/HTML/Tables/Basics#allowing_cells_to_span_multiple_rows_and_columns)类似,`` 元素具有 `columnspan` 和 `rowspan` 属性,以指示单元格跨多行和多列。下面的内部矩阵跨越外部矩阵的两列: + +```html hidden + + + + + 横跨多列的矩阵 + + + + + + ( + + + + + ( + + + + a + + + c + + + + + b + + + d + + + + ) + + + + 0 + + + T + + + + + 0 + + + 0 + + + 1 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 1 + + + + ) + + + + +``` + +{{EmbedLiveSample('允许单元格横跨多行多列', 700, 200)}} + +> **备注:** 出于历史原因,MathML 中用于跨列的属性被称为 `columnspan` 而不是 `colspan`。 + +## 高级布局用法 + +除了表示类似矩阵的对象外,MathML 表格有时也用于数学公式中的高级布局,例如在[维基百科对勒让德符号的定义](https://zh.wikipedia.org/wiki/勒让德符号)中,公式被分隔在三行中,而值和条件则分隔于两列。 + +```html + + + + + 第一个矩阵 + + + + + + + ( + + a + b + + ) + + = + + { + + + + 1 + + + 如果  + a +  是模  + p +  的二次剩余且不是  + p +  的倍数  + + + + + + + 1 + + + 如果  + a +  是模  + p +  的非二次剩余  + + + + + + 0 + + + 如果  + a +  是  + p +  的倍数  + + + + + + + + + +``` + +{{ EmbedLiveSample('高级布局用法', 700, 200) }} + +> **警告:** [``](/zh-CN/docs/Web/MathML/Element/mtable) 文档中记录了更多高级布局选项,如对齐或间距等特殊属性。这些属性起源于 CSS 一类事物之前,最初设计用于不支持 CSS 的渲染器。然而,并非所有浏览器都实现了这些属性。将来,可能会用基于 CSS 的替代方案取代仅用于布局目的(即非实际矩阵对象)的 `` 的用法。 + +## 总结 + +在本文中,我们回顾了 ``、`` 和 `` 元素,它们是用于表格的 HTML 元素的等效元素。我们学习了如何使用它们表示类似矩阵的对象,以及如何用它们实现高级布局。 + +你已经接近完成本单元了——我们只剩下最后一件事要做。在[三个著名数学公式测验](/zh-CN/docs/Learn/MathML/First_steps/Three_famous_mathematical_formulas)中,你需要运用新学到的知识,使用 HTML 和 MathML 重写一个小型数学文章。 + +{{LearnSidebar}}{{PreviousMenuNext("Learn/MathML/First_steps/Scripts", "Learn/MathML/First_steps/Three_famous_mathematical_formulas", "Learn/MathML/First_steps")}} + +## 参见 + +- [学习 HTML 表格](/zh-CN/docs/Learn/HTML/Tables) +- [`` 元素](/zh-CN/docs/Web/MathML/Element/mtable) +- [`` 元素](/zh-CN/docs/Web/MathML/Element/mtr) +- [`` 元素](/zh-CN/docs/Web/MathML/Element/mtd) From 25aaeb19fa8fae627f18289d001b291e7df05e4b Mon Sep 17 00:00:00 2001 From: MDN Web Docs GitHub Bot <108879845+mdn-bot@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:06:24 +0100 Subject: [PATCH 005/130] [zh-tw] sync translated content (#16971) Co-authored-by: Allo --- files/zh-tw/_redirects.txt | 1 + files/zh-tw/_wikihistory.json | 2 +- .../api/console/{assert => assert_static}/index.md | 13 +++++++++---- 3 files changed, 11 insertions(+), 5 deletions(-) rename files/zh-tw/web/api/console/{assert => assert_static}/index.md (92%) diff --git a/files/zh-tw/_redirects.txt b/files/zh-tw/_redirects.txt index 517795de7b7537..3e3a65f2ca2b40 100644 --- a/files/zh-tw/_redirects.txt +++ b/files/zh-tw/_redirects.txt @@ -427,6 +427,7 @@ /zh-TW/docs/Web/API/WindowOrWorkerGlobalScope/setInterval /zh-TW/docs/Web/API/setInterval /zh-TW/docs/Web/API/XMLHttpRequest/FormData /zh-TW/docs/Web/API/FormData /zh-TW/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest /zh-TW/docs/Web/API/XMLHttpRequest_API/Using_XMLHttpRequest +/zh-TW/docs/Web/API/console/assert /zh-TW/docs/Web/API/console/assert_static /zh-TW/docs/Web/Apps/Progressive /zh-TW/docs/Web/Progressive_web_apps /zh-TW/docs/Web/CSS/-moz-border-image /zh-TW/docs/Web/CSS/border-image /zh-TW/docs/Web/CSS/@viewport /zh-TW/docs/Web/CSS diff --git a/files/zh-tw/_wikihistory.json b/files/zh-tw/_wikihistory.json index 7287408b8301f7..ac9ae2cfc23ae8 100644 --- a/files/zh-tw/_wikihistory.json +++ b/files/zh-tw/_wikihistory.json @@ -2400,7 +2400,7 @@ "modified": "2020-10-15T22:03:31.329Z", "contributors": ["Syihoy", "porfirion"] }, - "Web/API/console/assert": { + "Web/API/console/assert_static": { "modified": "2020-10-15T22:03:27.482Z", "contributors": ["lin826", "iigmir"] }, diff --git a/files/zh-tw/web/api/console/assert/index.md b/files/zh-tw/web/api/console/assert_static/index.md similarity index 92% rename from files/zh-tw/web/api/console/assert/index.md rename to files/zh-tw/web/api/console/assert_static/index.md index 4d0eb05d8dfcd9..c0d03894bbec7a 100644 --- a/files/zh-tw/web/api/console/assert/index.md +++ b/files/zh-tw/web/api/console/assert_static/index.md @@ -1,6 +1,6 @@ --- title: Console.assert() -slug: Web/API/console/assert +slug: Web/API/console/assert_static --- {{APIRef("Console API")}} @@ -13,9 +13,14 @@ slug: Web/API/console/assert ## 語法 -```plain -console.assert(assertion, obj1 [, obj2, ..., objN]); -console.assert(assertion, msg [, subst1, ..., substN]); // c-like message formatting +```js-nolint +assert(assertion, obj1) +assert(assertion, obj1, obj2) +assert(assertion, obj1, obj2, /* …, */ objN) + +assert(assertion, msg) +assert(assertion, msg, subst1) +assert(assertion, msg, subst1, /* …, */ substN) ``` ### 參數 From b95aeed709d457c334a288bb25a664786e4a5769 Mon Sep 17 00:00:00 2001 From: MDN Web Docs GitHub Bot <108879845+mdn-bot@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:51:21 +0100 Subject: [PATCH 006/130] [zh-cn] sync translated content (#16975) * zh-cn: sync translated content * zh-cn: sync upstream changes ref: mdn/content#30065 --------- Co-authored-by: Allo --- files/zh-cn/_redirects.txt | 44 ++++++--- files/zh-cn/_wikihistory.json | 44 ++++----- .../{assert => assert_static}/index.md | 10 +- .../console/{clear => clear_static}/index.md | 6 +- .../console/{count => count_static}/index.md | 6 +- .../index.md | 15 +-- .../console/{debug => debug_static}/index.md | 4 +- .../api/console/{dir => dir_static}/index.md | 6 +- .../{dirxml => dirxml_static}/index.md | 4 +- .../console/{error => error_static}/index.md | 5 +- .../console/{group => group_static}/index.md | 4 +- .../index.md | 4 +- .../{groupend => groupend_static}/index.md | 14 +-- files/zh-cn/web/api/console/index.md | 96 +++++++++---------- .../console/{info => info_static}/index.md | 12 ++- .../api/console/{log => log_static}/index.md | 4 +- .../{profile => profile_static}/index.md | 12 +-- .../index.md | 18 ++-- .../console/{table => table_static}/index.md | 4 +- .../console/{time => time_static}/index.md | 15 +-- .../{timeend => timeend_static}/index.md | 11 ++- .../{timelog => timelog_static}/index.md | 13 ++- .../{timestamp => timestamp_static}/index.md | 20 ++-- .../console/{trace => trace_static}/index.md | 15 +-- .../console/{warn => warn_static}/index.md | 14 +-- 25 files changed, 216 insertions(+), 184 deletions(-) rename files/zh-cn/web/api/console/{assert => assert_static}/index.md (76%) rename files/zh-cn/web/api/console/{clear => clear_static}/index.md (80%) rename files/zh-cn/web/api/console/{count => count_static}/index.md (92%) rename files/zh-cn/web/api/console/{countreset => countreset_static}/index.md (88%) rename files/zh-cn/web/api/console/{debug => debug_static}/index.md (94%) rename files/zh-cn/web/api/console/{dir => dir_static}/index.md (89%) rename files/zh-cn/web/api/console/{dirxml => dirxml_static}/index.md (88%) rename files/zh-cn/web/api/console/{error => error_static}/index.md (92%) rename files/zh-cn/web/api/console/{group => group_static}/index.md (89%) rename files/zh-cn/web/api/console/{groupcollapsed => groupcollapsed_static}/index.md (89%) rename files/zh-cn/web/api/console/{groupend => groupend_static}/index.md (79%) rename files/zh-cn/web/api/console/{info => info_static}/index.md (86%) rename files/zh-cn/web/api/console/{log => log_static}/index.md (96%) rename files/zh-cn/web/api/console/{profile => profile_static}/index.md (83%) rename files/zh-cn/web/api/console/{profileend => profileend_static}/index.md (56%) rename files/zh-cn/web/api/console/{table => table_static}/index.md (97%) rename files/zh-cn/web/api/console/{time => time_static}/index.md (76%) rename files/zh-cn/web/api/console/{timeend => timeend_static}/index.md (85%) rename files/zh-cn/web/api/console/{timelog => timelog_static}/index.md (89%) rename files/zh-cn/web/api/console/{timestamp => timestamp_static}/index.md (75%) rename files/zh-cn/web/api/console/{trace => trace_static}/index.md (66%) rename files/zh-cn/web/api/console/{warn => warn_static}/index.md (76%) diff --git a/files/zh-cn/_redirects.txt b/files/zh-cn/_redirects.txt index e21a7737fc0bc5..47f9de86039c7e 100644 --- a/files/zh-cn/_redirects.txt +++ b/files/zh-cn/_redirects.txt @@ -304,11 +304,11 @@ /zh-CN/docs/DOM/XMLHttpRequest/Sending_and_Receiving_Binary_Data /zh-CN/docs/Web/API/XMLHttpRequest_API/Sending_and_Receiving_Binary_Data /zh-CN/docs/DOM/XMLHttpRequest/Synchronous_and_Asynchronous_Requests /zh-CN/docs/Web/API/XMLHttpRequest_API/Synchronous_and_Asynchronous_Requests /zh-CN/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest /zh-CN/docs/Web/API/XMLHttpRequest_API/Using_XMLHttpRequest -/zh-CN/docs/DOM/console.dir /zh-CN/docs/Web/API/console/dir -/zh-CN/docs/DOM/console.group /zh-CN/docs/Web/API/console/group -/zh-CN/docs/DOM/console.groupCollapsed /zh-CN/docs/Web/API/console/groupCollapsed -/zh-CN/docs/DOM/console.log /zh-CN/docs/Web/API/console/log -/zh-CN/docs/DOM/console.trace /zh-CN/docs/Web/API/console/trace +/zh-CN/docs/DOM/console.dir /zh-CN/docs/Web/API/console/dir_static +/zh-CN/docs/DOM/console.group /zh-CN/docs/Web/API/console/group_static +/zh-CN/docs/DOM/console.groupCollapsed /zh-CN/docs/Web/API/console/groupcollapsed_static +/zh-CN/docs/DOM/console.log /zh-CN/docs/Web/API/console/log_static +/zh-CN/docs/DOM/console.trace /zh-CN/docs/Web/API/console/trace_static /zh-CN/docs/DOM/document /zh-CN/docs/Web/API/Document /zh-CN/docs/DOM/document.URL /zh-CN/docs/Web/API/Document/URL /zh-CN/docs/DOM/document.activeElement /zh-CN/docs/Web/API/Document/activeElement @@ -1915,12 +1915,34 @@ /zh-CN/docs/Web/API/XMLHttpRequestEventTarget/onload /zh-CN/docs/Web/API/XMLHttpRequest/load_event /zh-CN/docs/Web/API/XMLHttpRequestEventTarget/onloadstart /zh-CN/docs/Web/API/XMLHttpRequest/loadstart_event /zh-CN/docs/Web/API/XMLHttpRequestEventTarget/onprogress /zh-CN/docs/Web/API/XMLHttpRequest/progress_event -/zh-CN/docs/Web/API/console.dir /zh-CN/docs/Web/API/console/dir -/zh-CN/docs/Web/API/console.group /zh-CN/docs/Web/API/console/group -/zh-CN/docs/Web/API/console.groupCollapsed /zh-CN/docs/Web/API/console/groupCollapsed -/zh-CN/docs/Web/API/console.log /zh-CN/docs/Web/API/console/log -/zh-CN/docs/Web/API/console.time /zh-CN/docs/Web/API/console/time -/zh-CN/docs/Web/API/console.trace /zh-CN/docs/Web/API/console/trace +/zh-CN/docs/Web/API/console.dir /zh-CN/docs/Web/API/console/dir_static +/zh-CN/docs/Web/API/console.group /zh-CN/docs/Web/API/console/group_static +/zh-CN/docs/Web/API/console.groupCollapsed /zh-CN/docs/Web/API/console/groupcollapsed_static +/zh-CN/docs/Web/API/console.log /zh-CN/docs/Web/API/console/log_static +/zh-CN/docs/Web/API/console.time /zh-CN/docs/Web/API/console/time_static +/zh-CN/docs/Web/API/console.trace /zh-CN/docs/Web/API/console/trace_static +/zh-CN/docs/Web/API/console/assert /zh-CN/docs/Web/API/console/assert_static +/zh-CN/docs/Web/API/console/clear /zh-CN/docs/Web/API/console/clear_static +/zh-CN/docs/Web/API/console/count /zh-CN/docs/Web/API/console/count_static +/zh-CN/docs/Web/API/console/countReset /zh-CN/docs/Web/API/console/countreset_static +/zh-CN/docs/Web/API/console/debug /zh-CN/docs/Web/API/console/debug_static +/zh-CN/docs/Web/API/console/dir /zh-CN/docs/Web/API/console/dir_static +/zh-CN/docs/Web/API/console/dirxml /zh-CN/docs/Web/API/console/dirxml_static +/zh-CN/docs/Web/API/console/error /zh-CN/docs/Web/API/console/error_static +/zh-CN/docs/Web/API/console/group /zh-CN/docs/Web/API/console/group_static +/zh-CN/docs/Web/API/console/groupCollapsed /zh-CN/docs/Web/API/console/groupcollapsed_static +/zh-CN/docs/Web/API/console/groupEnd /zh-CN/docs/Web/API/console/groupend_static +/zh-CN/docs/Web/API/console/info /zh-CN/docs/Web/API/console/info_static +/zh-CN/docs/Web/API/console/log /zh-CN/docs/Web/API/console/log_static +/zh-CN/docs/Web/API/console/profile /zh-CN/docs/Web/API/console/profile_static +/zh-CN/docs/Web/API/console/profileEnd /zh-CN/docs/Web/API/console/profileend_static +/zh-CN/docs/Web/API/console/table /zh-CN/docs/Web/API/console/table_static +/zh-CN/docs/Web/API/console/time /zh-CN/docs/Web/API/console/time_static +/zh-CN/docs/Web/API/console/timeEnd /zh-CN/docs/Web/API/console/timeend_static +/zh-CN/docs/Web/API/console/timeLog /zh-CN/docs/Web/API/console/timelog_static +/zh-CN/docs/Web/API/console/timeStamp /zh-CN/docs/Web/API/console/timestamp_static +/zh-CN/docs/Web/API/console/trace /zh-CN/docs/Web/API/console/trace_static +/zh-CN/docs/Web/API/console/warn /zh-CN/docs/Web/API/console/warn_static /zh-CN/docs/Web/API/document.URL /zh-CN/docs/Web/API/Document/URL /zh-CN/docs/Web/API/document.activeElement /zh-CN/docs/Web/API/Document/activeElement /zh-CN/docs/Web/API/document.anchors /zh-CN/docs/Web/API/Document/anchors diff --git a/files/zh-cn/_wikihistory.json b/files/zh-cn/_wikihistory.json index 804f95d2103b78..316a781e06e56e 100644 --- a/files/zh-cn/_wikihistory.json +++ b/files/zh-cn/_wikihistory.json @@ -16159,7 +16159,7 @@ "jiereal" ] }, - "Web/API/console/assert": { + "Web/API/console/assert_static": { "modified": "2020-10-15T21:49:40.751Z", "contributors": [ "zhangchen", @@ -16169,51 +16169,51 @@ "ZhangKaiqiang" ] }, - "Web/API/console/clear": { + "Web/API/console/clear_static": { "modified": "2020-01-12T03:19:48.000Z", "contributors": ["853419196", "ZhangKaiqiang"] }, - "Web/API/console/count": { + "Web/API/console/count_static": { "modified": "2019-08-15T04:00:38.089Z", "contributors": ["teemoooo", "gaowhen"] }, - "Web/API/console/countReset": { + "Web/API/console/countreset_static": { "modified": "2020-10-15T22:08:08.444Z", "contributors": ["Paapaapa", "807573515"] }, - "Web/API/console/debug": { + "Web/API/console/debug_static": { "modified": "2020-10-15T22:15:26.417Z", "contributors": ["hefang"] }, - "Web/API/console/dir": { + "Web/API/console/dir_static": { "modified": "2019-10-08T07:08:14.257Z", "contributors": ["SphinxKnight", "teoli", "AshfaqHossain", "ziyunfei"] }, - "Web/API/console/dirxml": { + "Web/API/console/dirxml_static": { "modified": "2019-03-23T22:11:46.371Z", "contributors": ["zzw918"] }, - "Web/API/console/error": { + "Web/API/console/error_static": { "modified": "2019-08-15T04:02:05.738Z", "contributors": ["pluwen", "kameii"] }, - "Web/API/console/group": { + "Web/API/console/group_static": { "modified": "2019-03-24T00:18:26.661Z", "contributors": ["teoli", "khalid32", "ziyunfei"] }, - "Web/API/console/groupCollapsed": { + "Web/API/console/groupcollapsed_static": { "modified": "2019-03-24T00:18:28.377Z", "contributors": ["teoli", "khalid32", "ziyunfei"] }, - "Web/API/console/groupEnd": { + "Web/API/console/groupend_static": { "modified": "2019-03-18T21:46:40.075Z", "contributors": ["hhxxhg", "luohe"] }, - "Web/API/console/info": { + "Web/API/console/info_static": { "modified": "2020-02-02T00:13:13.877Z", "contributors": ["Headog", "tsingwong", "Jaanai-Ewain", "yogoshary"] }, - "Web/API/console/log": { + "Web/API/console/log_static": { "modified": "2020-07-27T04:01:25.975Z", "contributors": [ "alan10332000", @@ -16228,19 +16228,19 @@ "ziyunfei" ] }, - "Web/API/console/profile": { + "Web/API/console/profile_static": { "modified": "2019-03-18T21:41:07.871Z", "contributors": ["clwm01"] }, - "Web/API/console/profileEnd": { + "Web/API/console/profileend_static": { "modified": "2020-10-15T22:04:42.916Z", "contributors": ["JQ_Chan"] }, - "Web/API/console/table": { + "Web/API/console/table_static": { "modified": "2020-10-15T21:54:27.285Z", "contributors": ["RainSlide", "dondevi", "eeeeeeeason", "zzw918"] }, - "Web/API/console/time": { + "Web/API/console/time_static": { "modified": "2020-10-15T21:27:17.192Z", "contributors": [ "zhangchen", @@ -16251,23 +16251,23 @@ "freemen" ] }, - "Web/API/console/timeEnd": { + "Web/API/console/timeend_static": { "modified": "2020-10-15T21:50:04.648Z", "contributors": ["luisleee", "hhxxhg", "Dcfm", "regiondavid"] }, - "Web/API/console/timeLog": { + "Web/API/console/timelog_static": { "modified": "2020-10-15T22:16:19.657Z", "contributors": ["lifankohome", "Reaper622"] }, - "Web/API/console/timeStamp": { + "Web/API/console/timestamp_static": { "modified": "2019-03-23T22:08:57.552Z", "contributors": ["tsingwong", "ershing"] }, - "Web/API/console/trace": { + "Web/API/console/trace_static": { "modified": "2020-10-15T21:04:54.511Z", "contributors": ["zhangchen", "airt", "teoli", "jsx", "ziyunfei"] }, - "Web/API/console/warn": { + "Web/API/console/warn_static": { "modified": "2019-03-23T22:12:15.122Z", "contributors": ["pluwen", "choukin"] }, diff --git a/files/zh-cn/web/api/console/assert/index.md b/files/zh-cn/web/api/console/assert_static/index.md similarity index 76% rename from files/zh-cn/web/api/console/assert/index.md rename to files/zh-cn/web/api/console/assert_static/index.md index 703ecf547b4fd9..c94220b568556d 100644 --- a/files/zh-cn/web/api/console/assert/index.md +++ b/files/zh-cn/web/api/console/assert_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.assert() -slug: Web/API/console/assert +title: console:assert() 静态方法 +slug: Web/API/console/assert_static --- {{APIRef("Console API")}} @@ -9,7 +9,7 @@ slug: Web/API/console/assert {{AvailableInWorkers}} -`console.assert()`方法在 Node.js 中的实现和浏览器中可用的`console.assert()`方法实现是不同的。在浏览器中当`console.assert()`方法接受到一个值为假断言的时候,会向控制台输出传入的内容,但是并不会中断代码的执行,而在 Node.js v10.0.0 之前,一个值为假的断言也将会导致一个`AssertionError`被抛出,使得代码执行被打断。v10.0.0 修复了此差异,所以现在`console.assert()`在 Node 和浏览器中执行行为相同。 +`console.assert()` 方法在 Node.js 中的实现和浏览器中可用的 `console.assert()` 方法实现是不同的。在浏览器中当 `console.assert()` 方法接受到一个值为假断言的时候,会向控制台输出传入的内容,但是并不会中断代码的执行,而在 Node.js v10.0.0 之前,一个值为假的断言也将会导致一个 `AssertionError` 被抛出,使得代码执行被打断。v10.0.0 修复了此差异,所以现在 `console.assert()` 在 Node 和浏览器中执行行为相同。 ## 语法 @@ -57,7 +57,7 @@ console.log("the word is %s try number %d", "foo", 123); // 输出:the word is foo try number 123 ``` -`但是 console.assert` 在不同浏览器中可能获得不同的效果: +但是 `console.assert` 在不同浏览器中可能获得不同的效果: ```js console.assert(false, "the word is %s", "foo"); @@ -69,7 +69,7 @@ console.assert(false, "the word is %s", "foo"); // Assertion failed: the word is %s foo ``` -有关详细信息,请参阅 {{Domxref("console")}} 文档中的 [输出文本到控制台](/zh-CN/docs/Web/API/Console#%E8%BE%93%E5%87%BA%E6%96%87%E6%9C%AC%E5%88%B0%E6%8E%A7%E5%88%B6%E5%8F%B0)。 +有关详细信息,请参阅 {{Domxref("console")}} 文档中的 [输出文本到控制台](/zh-CN/docs/Web/API/console#输出文本到控制台)。 ## 规范 diff --git a/files/zh-cn/web/api/console/clear/index.md b/files/zh-cn/web/api/console/clear_static/index.md similarity index 80% rename from files/zh-cn/web/api/console/clear/index.md rename to files/zh-cn/web/api/console/clear_static/index.md index 8bf0077a2411ce..b185676776baaa 100644 --- a/files/zh-cn/web/api/console/clear/index.md +++ b/files/zh-cn/web/api/console/clear_static/index.md @@ -1,6 +1,6 @@ --- -title: clear() -slug: Web/API/console/clear +title: console:clear() 静态方法 +slug: Web/API/console/clear_static --- {{APIRef("Console API")}} @@ -19,7 +19,7 @@ clear(); ### 返回值 -无 ({{jsxref("undefined")}})。 +无({{jsxref("undefined")}})。 ## 规范 diff --git a/files/zh-cn/web/api/console/count/index.md b/files/zh-cn/web/api/console/count_static/index.md similarity index 92% rename from files/zh-cn/web/api/console/count/index.md rename to files/zh-cn/web/api/console/count_static/index.md index ae8187136457b4..483b7cb3df8b09 100644 --- a/files/zh-cn/web/api/console/count/index.md +++ b/files/zh-cn/web/api/console/count_static/index.md @@ -1,6 +1,6 @@ --- -title: console:count() 方法 -slug: Web/API/console/count +title: console:count() 静态方法 +slug: Web/API/console/count_static --- {{APIRef("Console API")}} @@ -23,7 +23,7 @@ count(label) ### 返回值 -无 ({{jsxref("undefined")}})。 +无({{jsxref("undefined")}})。 ## 示例 diff --git a/files/zh-cn/web/api/console/countreset/index.md b/files/zh-cn/web/api/console/countreset_static/index.md similarity index 88% rename from files/zh-cn/web/api/console/countreset/index.md rename to files/zh-cn/web/api/console/countreset_static/index.md index 54502e6ac4984f..8c63bd1629faed 100644 --- a/files/zh-cn/web/api/console/countreset/index.md +++ b/files/zh-cn/web/api/console/countreset_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.countReset() -slug: Web/API/console/countReset +title: console:countReset() 静态方法 +slug: Web/API/console/countreset_static --- {{APIRef("Console API")}} @@ -15,8 +15,9 @@ slug: Web/API/console/countReset ## 语法 -``` -console.countReset([label]); +```js-nolint +countReset() +countReset(label) ``` ### 参数 @@ -41,7 +42,7 @@ default: 0 ### 异常情况 -若传入一个不存在的 `label`, `countReset` 返回下面的警告信息: +若传入一个不存在的 `label`,`countReset` 返回下面的警告信息: ``` Counter "counter-name" doesn’t exist. @@ -119,10 +120,10 @@ console.count("alice"); 调用 countReset("bod") 只是重置了 "bob" 的计数器值 而 "alice" 的计数器值没有改变。 -## Specifications +## 规范 {{Specifications}} -## Browser compatibility +## 浏览器兼容性 {{Compat}} diff --git a/files/zh-cn/web/api/console/debug/index.md b/files/zh-cn/web/api/console/debug_static/index.md similarity index 94% rename from files/zh-cn/web/api/console/debug/index.md rename to files/zh-cn/web/api/console/debug_static/index.md index 2ae3d6824438af..d87fd3a7b5ccc1 100644 --- a/files/zh-cn/web/api/console/debug/index.md +++ b/files/zh-cn/web/api/console/debug_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.debug() -slug: Web/API/console/debug +title: console:debug() 静态方法 +slug: Web/API/console/debug_static --- {{APIRef("Console API")}} diff --git a/files/zh-cn/web/api/console/dir/index.md b/files/zh-cn/web/api/console/dir_static/index.md similarity index 89% rename from files/zh-cn/web/api/console/dir/index.md rename to files/zh-cn/web/api/console/dir_static/index.md index dff09f53c7ea06..62ca929c126050 100644 --- a/files/zh-cn/web/api/console/dir/index.md +++ b/files/zh-cn/web/api/console/dir_static/index.md @@ -1,6 +1,6 @@ --- -title: console.dir -slug: Web/API/console/dir +title: console:dir() 静态方法 +slug: Web/API/console/dir_static --- {{APIRef("Console API")}} @@ -26,7 +26,7 @@ dir(object); ### 返回值 -无 ({{jsxref("undefined")}})。 +无({{jsxref("undefined")}})。 ## 规范 diff --git a/files/zh-cn/web/api/console/dirxml/index.md b/files/zh-cn/web/api/console/dirxml_static/index.md similarity index 88% rename from files/zh-cn/web/api/console/dirxml/index.md rename to files/zh-cn/web/api/console/dirxml_static/index.md index c7ff2caccb68c4..b1ead6e81f6fb1 100644 --- a/files/zh-cn/web/api/console/dirxml/index.md +++ b/files/zh-cn/web/api/console/dirxml_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.dirxml() -slug: Web/API/console/dirxml +title: console:dirxml() 静态方法 +slug: Web/API/console/dirxml_static --- {{APIRef("Console API")}}{{Non-standard_header}} diff --git a/files/zh-cn/web/api/console/error/index.md b/files/zh-cn/web/api/console/error_static/index.md similarity index 92% rename from files/zh-cn/web/api/console/error/index.md rename to files/zh-cn/web/api/console/error_static/index.md index 147febb5218a9f..1814fa69b0c3c9 100644 --- a/files/zh-cn/web/api/console/error/index.md +++ b/files/zh-cn/web/api/console/error_static/index.md @@ -1,6 +1,7 @@ --- -title: Console.error() -slug: Web/API/console/error +title: console:error() 静态方法 +slug: Web/API/console/error_static +original_slug: Web/API/console/error --- {{APIRef("Console API")}} diff --git a/files/zh-cn/web/api/console/group/index.md b/files/zh-cn/web/api/console/group_static/index.md similarity index 89% rename from files/zh-cn/web/api/console/group/index.md rename to files/zh-cn/web/api/console/group_static/index.md index 726447227ed76d..15a2b8864d0931 100644 --- a/files/zh-cn/web/api/console/group/index.md +++ b/files/zh-cn/web/api/console/group_static/index.md @@ -1,6 +1,6 @@ --- -title: console.group() -slug: Web/API/console/group +title: console:group() 静态方法 +slug: Web/API/console/group_static --- {{APIRef("Console API")}} diff --git a/files/zh-cn/web/api/console/groupcollapsed/index.md b/files/zh-cn/web/api/console/groupcollapsed_static/index.md similarity index 89% rename from files/zh-cn/web/api/console/groupcollapsed/index.md rename to files/zh-cn/web/api/console/groupcollapsed_static/index.md index a00857c5c39c9d..3c3f39e62356dc 100644 --- a/files/zh-cn/web/api/console/groupcollapsed/index.md +++ b/files/zh-cn/web/api/console/groupcollapsed_static/index.md @@ -1,6 +1,6 @@ --- -title: console.groupCollapsed() -slug: Web/API/console/groupCollapsed +title: console:groupCollapsed() 静态方法 +slug: Web/API/console/groupcollapsed_static --- {{APIRef("Console API")}} diff --git a/files/zh-cn/web/api/console/groupend/index.md b/files/zh-cn/web/api/console/groupend_static/index.md similarity index 79% rename from files/zh-cn/web/api/console/groupend/index.md rename to files/zh-cn/web/api/console/groupend_static/index.md index 36e579e8d08269..3dacb21745aafd 100644 --- a/files/zh-cn/web/api/console/groupend/index.md +++ b/files/zh-cn/web/api/console/groupend_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.groupEnd() -slug: Web/API/console/groupEnd +title: console:groupEnd() 静态方法 +slug: Web/API/console/groupend_static --- {{APIRef("Console API")}} @@ -11,15 +11,15 @@ slug: Web/API/console/groupEnd ## 语法 -```plain -console.groupEnd(); +```js-nolint +groupEnd() ``` ## 参数 -None. +无。 -## Specifications +## 规范 {{Specifications}} @@ -27,6 +27,6 @@ None. {{Compat}} -## See also +## 参见 - [Opera Dragonfly documentation: Console](http://www.opera.com/dragonfly/documentation/console/) diff --git a/files/zh-cn/web/api/console/index.md b/files/zh-cn/web/api/console/index.md index a1d761035e7278..6e4a2ae71d460e 100644 --- a/files/zh-cn/web/api/console/index.md +++ b/files/zh-cn/web/api/console/index.md @@ -1,78 +1,76 @@ --- -title: Console +title: console slug: Web/API/console --- {{APIRef("Console API")}} -**`Console`** 对象提供了浏览器控制台调试的接口(如:Firefox 的 [Web Console](/zh-CN/docs/Tools/Web_Console))。在不同浏览器上它的工作方式可能不一样,但通常都会提供一套共性的功能。 +**`console`** 对象提供了浏览器控制台调试的接口(如:Firefox 的 [Web console](https://firefox-source-docs.mozilla.org/devtools-user/web_console/index.html))。在不同浏览器上它的工作方式可能不一样,但通常都会提供一套共性的功能。 -`Console` 对象可以从任何全局对象中访问到,如 浏览器作用域上的 {{domxref("Window")}},以及通过属性控制台作为 workers 中的特定变体的 {{domxref("WorkerGlobalScope")}}。可以通过 {{domxref("Window.console")}} 引用,也可以简单的通过 `console` 引用。例: +`console` 对象可以从任何全局对象中访问到,如 浏览器作用域上的 {{domxref("Window")}},以及通过属性控制台作为 worker 中的特定变体的 {{domxref("WorkerGlobalScope")}}。可以通过 {{domxref("Window.console")}} 引用,也可以简单的通过 `console` 引用。例: ```js console.log("Failed to open the specified link"); ``` -本页面记录了 `Console` 对象上的[方法](#方法)并给出了几个 [Usage](#usage) (用例)。 +本页面记录了 `console` 对象上的[方法](#方法)并给出了几个 [Usage](#usage) (用例)。 {{AvailableInWorkers}} -> **备注:** 实际的 `console` 接口被定义为全小写的形式(比如不是这种形式 `Console` ),这是历史原因导致的。 - ## 方法 -- {{domxref("Console.assert()")}} +- {{domxref("console/assert_static", "console.assert()")}} - : 如果第一个参数为 `false` ,则将消息和堆栈跟踪记录到控制台。 -- {{domxref("Console.clear()")}} +- {{domxref("console.clear_static", "console.clear()")}} - : 清空控制台,并输出 `Console was cleared`。 -- {{domxref("Console.count()")}} +- {{domxref("console.count_static", "console.count()")}} - : 以参数为标识记录调用的次数,调用时在控制台打印标识以及调用次数。 -- {{domxref("Console.countReset()")}} +- {{domxref("console.countreset_static", "console.countReset()")}} - : 重置指定标签的计数器值。 -- {{domxref("Console.debug()")}} +- {{domxref("console.debug_static", "console.debug()")}} - : 在控制台打印一条 `"debug"` 级别的消息。 -- {{domxref("Console.dir()")}} - - : 显示一个由特定的 Javascript 对象列表组成的可交互列表。这个列表可以使用三角形隐藏和显示来审查子对象的内容。. -- {{domxref("Console.dirxml()")}} +- {{domxref("console.dir_static", "console.dir()")}} + - : 显示一个由特定的 Javascript 对象列表组成的可交互列表。这个列表可以使用三角形隐藏和显示来审查子对象的内容。 +- {{domxref("console.dirxml_static", "console.dirxml()")}} - : 打印 XML/HTML 元素表示的指定对象,否则显示 JavaScript 对象视图。 -- {{domxref("Console.error()")}} - - : 打印一条错误信息,使用方法可以参考 [string substitution](/zh-CN/docs/Web/API/console#Using_string_substitutions)。 -- {{domxref("Console.exception()")}} {{Non-standard_inline}} {{deprecated_inline}} +- {{domxref("console.error_static", "console.error()")}} + - : 打印一条错误信息,使用方法可以参考[使用字符串替换](#使用字符串替换)。 +- `console.exception()` {{Non-standard_inline}} {{deprecated_inline}} - : `error()` 方法的别称。 -- {{domxref("Console.group()")}} - - : 创建一个新的内联 [group](/zh-CN/docs/Web/API/console#Using_groups_in_the_console), 后续所有打印内容将会以子层级的形式展示。调用 `groupEnd()`来闭合组。 -- {{domxref("Console.groupCollapsed()")}} - - : 创建一个新的内联 [group](/zh-CN/docs/Web/API/console#Using_groups_in_the_console)。使用方法和 `group()` 相同,不同的是,`groupCollapsed()` 方法打印出来的内容默认是折叠的。调用`groupEnd()`来闭合组。 -- {{domxref("Console.groupEnd()")}} - - : 闭合当前内联 [group](/zh-CN/docs/Web/API/console#Using_groups_in_the_console)。 -- {{domxref("Console.info()")}} - - : 打印资讯类说明信息,使用方法可以参考 [string substitution](/zh-CN/docs/Web/API/console#Using_string_substitutions)。 -- {{domxref("Console.log()")}} - - : 打印内容的通用方法,使用方法可以参考 [string substitution](/zh-CN/docs/Web/API/console#Using_string_substitutions)。 -- {{domxref("Console.profile()")}} {{Non-standard_inline}} - - : Starts the browser's built-in profiler (for example, the [Firefox performance tool](/zh-CN/docs/Tools/Performance)). You can specify an optional name for the profile. -- {{domxref("Console.profileEnd()")}} {{Non-standard_inline}} - - : Stops the profiler. You can see the resulting profile in the browser's performance tool (for example, the [Firefox performance tool](/zh-CN/docs/Tools/Performance)). -- {{domxref("Console.table()")}} +- {{domxref("console.group_static", "console.group()")}} + - : 创建一个新的内联[分组](#在_console_中使用编组), 后续所有打印内容将会以子层级的形式展示。调用 `groupEnd()`来闭合组。 +- {{domxref("console.groupcollapsed_static", "console.groupCollapsed()")}} + - : 创建一个新的内联[分组](#在_console_中使用编组)。使用方法和 `group()` 相同,不同的是,`groupCollapsed()` 方法打印出来的内容默认是折叠的。调用`groupEnd()`来闭合组。 +- {{domxref("console.groupend_static", "console.groupEnd()")}} + - : 闭合当前内联[分组](#在_console_中使用编组)。 +- {{domxref("console.info_static", "console.info()")}} + - : 打印资讯类说明信息,使用方法可以参考[使用字符串替换](#使用字符串替换)。 +- {{domxref("console.log_static", "console.log()")}} + - : 打印内容的通用方法,使用方法可以参考[使用字符串替换](#使用字符串替换)。 +- {{domxref("console.profile_static", "console.profile()")}} {{Non-standard_inline}} + - : Starts the browser's built-in profiler (for example, the [Firefox performance tool](https://firefox-source-docs.mozilla.org/devtools-user/performance/index.html)). You can specify an optional name for the profile. +- {{domxref("console.profileend_static", "console.profileEnd()")}} {{Non-standard_inline}} + - : Stops the profiler. You can see the resulting profile in the browser's performance tool (for example, the [Firefox performance tool](https://firefox-source-docs.mozilla.org/devtools-user/performance/index.html)). +- {{domxref("console.table_static", "console.table()")}} - : 将列表型的数据打印成表格。 -- {{domxref("Console.time()")}} - - : 启动一个以入参作为特定名称的[计时器](/zh-CN/docs/Web/API/console#Timers),在显示页面中可同时运行的计时器上限为 10,000. -- {{domxref("Console.timeEnd()")}} - - : 结束特定的 [计时器](/zh-CN/docs/Web/API/console#Timers) 并以毫秒打印其从开始到结束所用的时间。 -- {{domxref("Console.timeLog()")}} - - : 打印特定 [计时器](/zh-CN/docs/Web/API/console#Timers) 所运行的时间。 -- {{domxref("Console.timeStamp()")}} {{Non-standard_inline}} - - : 添加一个标记到浏览器的 [Timeline](https://developer.chrome.com/devtools/docs/timeline) 或 [Waterfall](/zh-CN/docs/Tools/Performance/Waterfall) 工具。 -- {{domxref("Console.trace()")}} - - : 输出一个 [stack trace](/zh-CN/docs/Web/API/console#Stack_traces)。 -- {{domxref("Console.warn()")}} - - : 打印一个警告信息,可以使用 [string substitution](/zh-CN/docs/Web/API/console#Using_string_substitutions) 和额外的参数。 +- {{domxref("console.time_static", "console.time()")}} + - : 启动一个以入参作为特定名称的[定时器](#定时器),在显示页面中可同时运行的定时器上限为 10,000. +- {{domxref("console.timeend_static", "console.timeEnd()")}} + - : 结束特定的[定时器](#定时器)并以毫秒打印其从开始到结束所用的时间。 +- {{domxref("console.timelog_static", "console.timeLog()")}} + - : 打印特定[定时器](#定时器)所运行的时间。 +- {{domxref("console.timestamp_static", "console.timeStamp()")}} {{Non-standard_inline}} + - : 添加一个标记到浏览器的 [Timeline](https://developer.chrome.com/devtools/docs/timeline) 或 [Waterfall](https://profiler.firefox.com/docs/) 工具。 +- {{domxref("console.trace_static", "console.trace()")}} + - : 输出[堆栈跟踪](#堆栈跟踪)。 +- {{domxref("console.warn_static", "console.warn()")}} + - : 打印一个警告信息,可以使用[字符串替换](#使用字符串替换)和额外的参数。 ## 示例 ### 输出文本到控制台 -console 对象中较多使用的主要有四个方法 {{domxref("console.log()")}}, {{domxref("console.info()")}}, {{domxref("console.warn()")}}, 和{{domxref("console.error()")}}。每一个结果在日志中都有不同的样式,可以使用浏览器控制台的日志筛选功能筛选出感兴趣的日志信息。 +console 对象中较多使用的主要有四个方法 {{domxref("console.log_static", "console.log()")}}、{{domxref("console.info_static", "console.info()")}}、{{domxref("console.warn_static", "console.warn()")}} 和{{domxref("console.error_static", "console.error()")}}。每一个结果在日志中都有不同的样式,可以使用浏览器控制台的日志筛选功能筛选出感兴趣的日志信息。 有两种途径使用这些方法,可以简单的传入一组对象,其中的字符串对象会被连接到一起,输出到控制台。或者可以传入包含零个或多个的替换的字符串,后面跟着被替换的对象列表。 @@ -221,7 +219,7 @@ console.timeEnd("answer time"); ### 堆栈跟踪 -控制台也支持输出堆栈,其将会显示到调用 {{domxref("console.trace()")}} 的点的调用路径。如下所示: +控制台也支持输出堆栈,其将会显示到调用 {{domxref("console.trace_static")}} 的点的调用路径。如下所示: ```js function foo() { @@ -252,9 +250,9 @@ foo(); ## 相关文档 -- [Tools](/zh-CN/docs/Tools) -- [Web Console](/zh-CN/docs/Tools/Web_Console) - Firefox 浏览器控制台如何处理 console API 的调用 -- [Remote debugging](/zh-CN/docs/Tools/Remote_Debugging) - 如何在调试移动设备时查看控制台输出。 +- [Tools](https://firefox-source-docs.mozilla.org/devtools-user/index.html) +- [Web Console](https://firefox-source-docs.mozilla.org/devtools-user/web_console/index.html) - Firefox 浏览器控制台如何处理 console API 的调用 +- [Remote debugging](https://profiler.firefox.com/docs/) - 如何在调试移动设备时查看控制台输出。 ### 其他实现 diff --git a/files/zh-cn/web/api/console/info/index.md b/files/zh-cn/web/api/console/info_static/index.md similarity index 86% rename from files/zh-cn/web/api/console/info/index.md rename to files/zh-cn/web/api/console/info_static/index.md index fc95d614c605e4..f4b7d143526abe 100644 --- a/files/zh-cn/web/api/console/info/index.md +++ b/files/zh-cn/web/api/console/info_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.info() -slug: Web/API/console/info +title: console:info() 静态方法 +slug: Web/API/console/info_static --- {{APIRef("Console API")}} @@ -11,9 +11,11 @@ slug: Web/API/console/info ## 语法 -``` -console.info(obj1 [, obj2, ..., objN]); -console.info(msg [, subst1, ..., substN]); +```js-nolint +info(obj1) +info(obj1, /* …, */ objN) +info(msg) +info(msg, subst1, /* …, */ substN) ``` ## 参数 diff --git a/files/zh-cn/web/api/console/log/index.md b/files/zh-cn/web/api/console/log_static/index.md similarity index 96% rename from files/zh-cn/web/api/console/log/index.md rename to files/zh-cn/web/api/console/log_static/index.md index b14dd46ac23657..0dadf0e1eae23b 100644 --- a/files/zh-cn/web/api/console/log/index.md +++ b/files/zh-cn/web/api/console/log_static/index.md @@ -1,6 +1,6 @@ --- -title: console.log -slug: Web/API/console/log +title: console:log() 静态方法 +slug: Web/API/console/log_static --- {{APIRef("Console API")}} diff --git a/files/zh-cn/web/api/console/profile/index.md b/files/zh-cn/web/api/console/profile_static/index.md similarity index 83% rename from files/zh-cn/web/api/console/profile/index.md rename to files/zh-cn/web/api/console/profile_static/index.md index 3fe1bb39616120..04fcc4d6aa58ff 100644 --- a/files/zh-cn/web/api/console/profile/index.md +++ b/files/zh-cn/web/api/console/profile_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.profile() -slug: Web/API/console/profile +title: console:profile() 静态方法 +slug: Web/API/console/profile_static --- {{APIRef("Console API")}}{{Non-standard_header}} @@ -13,13 +13,13 @@ slug: Web/API/console/profile {{AvailableInWorkers}} -## Syntax +## 语法 -```plain -console.profile(profileName); +```js-nolint +profile(profileName) ``` -## Parameters +## 参数 - `profileName` - : 描述信息的名字。可选。 diff --git a/files/zh-cn/web/api/console/profileend/index.md b/files/zh-cn/web/api/console/profileend_static/index.md similarity index 56% rename from files/zh-cn/web/api/console/profileend/index.md rename to files/zh-cn/web/api/console/profileend_static/index.md index 0c1df7f4443542..84abcd6d46b027 100644 --- a/files/zh-cn/web/api/console/profileend/index.md +++ b/files/zh-cn/web/api/console/profileend_static/index.md @@ -1,26 +1,26 @@ --- -title: Console.profileEnd() -slug: Web/API/console/profileEnd +title: console:profileEnd() 静态方法 +slug: Web/API/console/profileend_static --- {{APIRef("Console API")}}{{Non-standard_header}} -> **警告:** 在 console.profile() 之后立刻调用此 API 可能会导致其无法工作.。为解决此问题,请在 setTimeOut 中至少延迟 5 毫秒后再调用。请看 [bug #1173588](https://bugzilla.mozilla.org/show_bug.cgi?id=1173588)。 +> **警告:** 在 console.profile() 之后立刻调用此 API 可能会导致其无法工作。为解决此问题,请在 setTimeOut 中至少延迟 5 毫秒后再调用。请看 [bug #1173588](https://bugzilla.mozilla.org/show_bug.cgi?id=1173588)。 -profileEnd 方法会停止记录之前已经由{{domxref("Console.profile()")}}开始记录的性能描述信息 +profileEnd 方法会停止记录之前已经由{{domxref("console.profile()")}}开始记录的性能描述信息 你可以选择提供一个参数来命名需要记录的描述信息。这使得你在记录多个描述信息的时候可以停止记录特定的描述信息。 -- `如果 Console.profileEnd()` 传了描述信息名字,并且它与正在记录的描述信息的名字相匹配,则此描述信息将会停止。 -- `如果 Console.profileEnd()` 传了描述信息名字,并且它与正在记录的描述信息的名字不匹配,则不会进行更改。 -- `如果 Console.profileEnd()` 没有传描述信息名字,最近启动记录的描述信息将会停止。 +- 如果 `console.profileEnd()` 传了描述信息名字,并且它与正在记录的描述信息的名字相匹配,则此描述信息将会停止。 +- 如果 `console.profileEnd()` 传了描述信息名字,并且它与正在记录的描述信息的名字不匹配,则不会进行更改。 +- 如果 `console.profileEnd()` 没有传描述信息名字,最近启动记录的描述信息将会停止。 {{AvailableInWorkers}} ## 语法 -``` -console.profileEnd(profileName); +```js-nolint +profileEnd(profileName) ``` ## 参数 diff --git a/files/zh-cn/web/api/console/table/index.md b/files/zh-cn/web/api/console/table_static/index.md similarity index 97% rename from files/zh-cn/web/api/console/table/index.md rename to files/zh-cn/web/api/console/table_static/index.md index cef454ea915019..f46d589066bc40 100644 --- a/files/zh-cn/web/api/console/table/index.md +++ b/files/zh-cn/web/api/console/table_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.table() -slug: Web/API/console/table +title: console:table() 静态方法 +slug: Web/API/console/table_static --- {{APIRef("Console API")}} diff --git a/files/zh-cn/web/api/console/time/index.md b/files/zh-cn/web/api/console/time_static/index.md similarity index 76% rename from files/zh-cn/web/api/console/time/index.md rename to files/zh-cn/web/api/console/time_static/index.md index 39af3fac198836..0b46746e66df51 100644 --- a/files/zh-cn/web/api/console/time/index.md +++ b/files/zh-cn/web/api/console/time_static/index.md @@ -1,9 +1,9 @@ --- -title: console.time -slug: Web/API/console/time +title: console:time() 静态方法 +slug: Web/API/console/time_static --- -{{ ApiRef() }} +{{APIRef("Console API")}} 你可以启动一个计时器来跟踪某一个操作的占用时长。每一个计时器必须拥有唯一的名字,页面中最多能同时运行 10,000 个计时器。当以此计时器名字为参数调用 {{ domxref("console.timeEnd()") }} 时,浏览器将以毫秒为单位,输出对应计时器所经过的时间。 @@ -13,14 +13,15 @@ slug: Web/API/console/time ## 语法 -```plain -console.time(timerName); +```js-nolint +time() +time(label) ``` ## 参数 -- `timerName` - - : 新计时器的名字。用来标记这个计时器,作为参数调用 {{ domxref("console.timeEnd()") }}可以停止计时并将经过的时间在终端中打印出来。 +- `label` + - : 新计时器的名字。用来标记这个计时器,作为参数调用 {{domxref("console.timeEnd()")}} 可以停止计时并将经过的时间在终端中打印出来。 ## 规范 diff --git a/files/zh-cn/web/api/console/timeend/index.md b/files/zh-cn/web/api/console/timeend_static/index.md similarity index 85% rename from files/zh-cn/web/api/console/timeend/index.md rename to files/zh-cn/web/api/console/timeend_static/index.md index 4ec71b4ece570f..2b0d408bd99b5f 100644 --- a/files/zh-cn/web/api/console/timeend/index.md +++ b/files/zh-cn/web/api/console/timeend_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.timeEnd() -slug: Web/API/console/timeEnd +title: console:timeEnd() 静态方法 +slug: Web/API/console/timeend_static --- {{APIRef("Console API")}}{{Non-standard_header}} @@ -17,8 +17,9 @@ slug: Web/API/console/timeEnd ## 语法 -```js -console.timeEnd(label); +```js-nolint +timeEnd() +timeEnd(label) ``` ### 参数 @@ -26,7 +27,7 @@ console.timeEnd(label); - `label` - : 需要停止的计时器名字。一旦停止,计时器所经过的时间会被自动输出到控制台。 -## Specifications +## 规范 {{Specifications}} diff --git a/files/zh-cn/web/api/console/timelog/index.md b/files/zh-cn/web/api/console/timelog_static/index.md similarity index 89% rename from files/zh-cn/web/api/console/timelog/index.md rename to files/zh-cn/web/api/console/timelog_static/index.md index f0e5e80f7d22e0..69dac303a9aefb 100644 --- a/files/zh-cn/web/api/console/timelog/index.md +++ b/files/zh-cn/web/api/console/timelog_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.timeLog() -slug: Web/API/console/timeLog +title: console:timeLog() 静态方法 +slug: Web/API/console/timelog_static --- {{APIRef("Console API")}} @@ -13,8 +13,11 @@ slug: Web/API/console/timeLog ## 语法 -```plain -console.timeLog(label); +```js-nolint +timeLog() +timeLog(label) +timeLog(label, val1) +timeLog(label, val1, /* …, */ valN) ``` ### 参数 @@ -74,6 +77,6 @@ console.timeEnd("answer time"); {{Compat}} -## 相关文档 +## 参见 - [Opera Dragonfly documentation: Console](http://www.opera.com/dragonfly/documentation/console/) diff --git a/files/zh-cn/web/api/console/timestamp/index.md b/files/zh-cn/web/api/console/timestamp_static/index.md similarity index 75% rename from files/zh-cn/web/api/console/timestamp/index.md rename to files/zh-cn/web/api/console/timestamp_static/index.md index 49102e608808b7..01dd90bca5125a 100644 --- a/files/zh-cn/web/api/console/timestamp/index.md +++ b/files/zh-cn/web/api/console/timestamp_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.timeStamp() -slug: Web/API/console/timeStamp +title: console:timeStamp() 静态方法 +slug: Web/API/console/timestamp_static --- {{APIRef("Console API")}}{{Non-standard_header}} @@ -11,23 +11,23 @@ slug: Web/API/console/timeStamp {{AvailableInWorkers}} -## Syntax +## 语法 -```plain -console.timeStamp(label); +```js-nolint +timeStamp(label) ``` -## Parameters +## 参数 - `label` - : Label for the timestamp. Optional. -## Browser compatibility +## 浏览器兼容性 {{Compat}} -## See also +## 参见 -- {{domxref("Console.time()")}} -- {{domxref("Console.timeEnd()")}} +- {{domxref("console.time()")}} +- {{domxref("console.timeEnd()")}} - [Adding timestamps to the Waterfall](/zh-CN/docs/Tools/Performance/Waterfall#Timestamp_markers) diff --git a/files/zh-cn/web/api/console/trace/index.md b/files/zh-cn/web/api/console/trace_static/index.md similarity index 66% rename from files/zh-cn/web/api/console/trace/index.md rename to files/zh-cn/web/api/console/trace_static/index.md index 6d2bf9b3ea85d4..d53f2355c732bf 100644 --- a/files/zh-cn/web/api/console/trace/index.md +++ b/files/zh-cn/web/api/console/trace_static/index.md @@ -1,20 +1,21 @@ --- -title: console.trace -slug: Web/API/console/trace +title: console:trace() 静态方法 +slug: Web/API/console/trace_static --- {{APIRef("Console API")}} -{{domxref("console")}} 的 **`trace()` 方法**向 [Web 控制台](/zh-CN/Tools/Web_Console) 输出一个堆栈跟踪。 +{{domxref("console")}} 的 **`trace()`** 方法向 [Web 控制台](https://firefox-source-docs.mozilla.org/devtools-user/web_console/index.html)输出一个堆栈跟踪。 {{AvailableInWorkers}} -在页面{{ domxref("console") }}文档中查看[堆栈跟踪](/zh-CN/docs/Web/API/console#堆栈跟踪)的详细介绍和示例。 +在页面 {{domxref("console")}} 文档中查看[堆栈跟踪](/zh-CN/docs/Web/API/console#堆栈跟踪)的详细介绍和示例。 ## 语法 -```plain -console.trace( [...any, ...data ]); +```js-nolint +trace() +trace(object1, /* …, */ objectN) ``` ### 参数 @@ -51,6 +52,6 @@ foo {{Compat}} -## See also +## 参见 - [Opera Dragonfly documentation: Console](http://www.opera.com/dragonfly/documentation/console/) diff --git a/files/zh-cn/web/api/console/warn/index.md b/files/zh-cn/web/api/console/warn_static/index.md similarity index 76% rename from files/zh-cn/web/api/console/warn/index.md rename to files/zh-cn/web/api/console/warn_static/index.md index f38c3396e0f7e5..daecb7013a1f09 100644 --- a/files/zh-cn/web/api/console/warn/index.md +++ b/files/zh-cn/web/api/console/warn_static/index.md @@ -1,6 +1,6 @@ --- -title: Console.warn() -slug: Web/API/console/warn +title: console:warn() 静态方法 +slug: Web/API/console/warn_static --- {{APIRef("Console API")}} @@ -13,9 +13,11 @@ slug: Web/API/console/warn ## 语法 -```plain -console.warn(obj1 [, obj2, ..., objN]); -console.warn(msg [, subst1, ..., substN]); +```js-nolint +warn(obj1) +warn(obj1, /* …, */ objN) +warn(msg) +warn(msg, subst1, /* …, */ substN) ``` ## 参数 @@ -27,7 +29,7 @@ console.warn(msg [, subst1, ..., substN]); - `subst1` ... `substN` - : 零个或多个 Javascript 对象 依次替换 msg 中的替代字符串,你可以在替代字符串中指定对象的输出格式。 -查看 [向控制台输出文本](/zh-CN/docs/Web/API/Console) 来了解更多 {{domxref("console")}} 的用法。 +查看[向控制台输出文本](/zh-CN/docs/Web/API/console)来了解更多 {{domxref("console")}} 的用法。 ## 规范 From 56d2ab4e2bdebde9710ce18ec60d6507fb77e0cb Mon Sep 17 00:00:00 2001 From: MDN Web Docs GitHub Bot <108879845+mdn-bot@users.noreply.github.com> Date: Wed, 15 Nov 2023 15:13:32 +0100 Subject: [PATCH 007/130] Markdownlint auto-cleanup for ja (#16923) --- .../reference/global_objects/array/reduceright/index.md | 1 + .../web/javascript/reference/global_objects/array/some/index.md | 1 + 2 files changed, 2 insertions(+) diff --git a/files/ja/web/javascript/reference/global_objects/array/reduceright/index.md b/files/ja/web/javascript/reference/global_objects/array/reduceright/index.md index 8f30c099289915..f8dae97d248627 100644 --- a/files/ja/web/javascript/reference/global_objects/array/reduceright/index.md +++ b/files/ja/web/javascript/reference/global_objects/array/reduceright/index.md @@ -32,6 +32,7 @@ reduceRight(callbackFn, initialValue) - `currentIndex` - : `currentValue` のインデックス位置です。初回の呼び出しでは、 `initialValue` が指定された場合は `array.length - 1`、そうでない場合は `array.length - 2` です。 - : `reduceRight()` が呼び出された配列です。 + - `initialValue` {{optional_inline}} - : `callbackFn` の最初の呼び出しのときに、アキュームレーターとして使用する値です。初期値がが渡されなかった場合は、配列の最後の要素が適用され、その要素が飛ばされます。また、 `reduceRight()` を空の配列に対して初期値なしで呼び出すと `TypeError` になります。 diff --git a/files/ja/web/javascript/reference/global_objects/array/some/index.md b/files/ja/web/javascript/reference/global_objects/array/some/index.md index bf6f6f68b3037d..37f88952c2622c 100644 --- a/files/ja/web/javascript/reference/global_objects/array/some/index.md +++ b/files/ja/web/javascript/reference/global_objects/array/some/index.md @@ -21,6 +21,7 @@ some(callbackFn, thisArg) ### 引数 - `callbackFn` + - : 配列のそれぞれの要素に対して実行する関数です。この関数は、要素がテストに合格したことを示すには[真値](/ja/docs/Glossary/Truthy)を、そうでない場合は[偽値](/ja/docs/Glossary/Falsy)を返します。この関数は以下の引数で呼び出されます。 - `element` - : 配列内で処理中の現在の要素です。 From d50715fe38688466943849457f22d312b344a432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Tala=C3=AFa?= <115425910+ratala321@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:11:51 -0500 Subject: [PATCH 008/130] Fixed broken link (#16982) On issue #16967 --- .../js13kgames/re-engageable_notifications_push/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/fr/web/progressive_web_apps/tutorials/js13kgames/re-engageable_notifications_push/index.md b/files/fr/web/progressive_web_apps/tutorials/js13kgames/re-engageable_notifications_push/index.md index 17ccedc3c40fcc..a3155ae6c2851b 100644 --- a/files/fr/web/progressive_web_apps/tutorials/js13kgames/re-engageable_notifications_push/index.md +++ b/files/fr/web/progressive_web_apps/tutorials/js13kgames/re-engageable_notifications_push/index.md @@ -69,7 +69,7 @@ Une nouvelle notification est créée au hasard toutes les 30 secondes, jusqu'à Les messages poussés (push messages ou push) sont plus compliqués à mettre en œuvre que les notifications. Nous avons besoin de nous abonner à un serveur qui enverra ensuite les données à l'application. Le service worker de l'application recevra les données du serveur qui les a poussées et pourra ensuite les afficher en utilisant le système de notifications (ou tout autre mécanisme). -La technologie en est à ses débuts. Certains exemples fonctionnels utilisent la plateforme Cloud de messagerie de Google, mais elles sont en cours de réécriture pour prendre en charge [VAPID](https://blog.mozilla.org/services/2016/08/23/sending-vapid-identified-webpush-notifications-via-mozillas-push-service/) (Voluntary Application Identification) qui offre une couche de sécurité supplémentaire. Vous pouvez étudier [les exemples du livre de recettes des service workers](https://github.com/mdn/serviceworker-cookbook/push-payload.html), essayer de mettre en place un serveur d'émission de messages utilisant [Firebase](https://firebase.google.com/) ou construire votre propre serveur (en utilisant Node.js par exemple). +La technologie en est à ses débuts. Certains exemples fonctionnels utilisent la plateforme Cloud de messagerie de Google, mais elles sont en cours de réécriture pour prendre en charge [VAPID](https://blog.mozilla.org/services/2016/08/23/sending-vapid-identified-webpush-notifications-via-mozillas-push-service/) (Voluntary Application Identification) qui offre une couche de sécurité supplémentaire. Vous pouvez étudier [les exemples du livre de recettes des service workers](https://github.com/mdn/serviceworker-cookbook/tree/master/push-payload), essayer de mettre en place un serveur d'émission de messages utilisant [Firebase](https://firebase.google.com/) ou construire votre propre serveur (en utilisant Node.js par exemple). Comme mentionné précédemment, pour être capable de recevoir des messages poussés, vous devez avoir un service worker (voir les fondamentaux expliqués dans l'article [Fonctionnement hors connexion des PWA grâce aux service workers](/fr/docs/Web/Apps/Progressive/Offline_Service_workers)). Au sein du service worker, on peut créer un mécanisme d'abonnement au service push en appelant la méthode [`getSubscription()`](/fr/docs/Web/API/PushManager/getSubscription) de l'interface [`PushManager`](/fr/docs/Web/API/PushManager). From f2c91b5358aab99894720c8d68b3cadbd43c35fa Mon Sep 17 00:00:00 2001 From: SphinxKnight Date: Wed, 15 Nov 2023 21:01:35 +0100 Subject: [PATCH 009/130] `fr` - Initial translation for Glossary/UUID and crypto/randomuuid() (#16908) * Initial translation for Glossary/uuid and crypto/randomuuid * Minor typofix --------- Co-authored-by: cw118 --- files/fr/glossary/uuid/index.md | 21 +++++++++ files/fr/web/api/crypto/randomuuid/index.md | 49 +++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 files/fr/glossary/uuid/index.md create mode 100644 files/fr/web/api/crypto/randomuuid/index.md diff --git a/files/fr/glossary/uuid/index.md b/files/fr/glossary/uuid/index.md new file mode 100644 index 00000000000000..cd1c6929ab3175 --- /dev/null +++ b/files/fr/glossary/uuid/index.md @@ -0,0 +1,21 @@ +--- +title: UUID +slug: Glossary/UUID +l10n: + sourceCommit: 59adb56b83da91ee1744b723f2f7a37195c2ec82 +--- + +{{GlossarySidebar}} + +Un **identifiant universel unique** (dont l'acronyme anglais est **UUID** pour Universally Unique Identifier) est un libellé utilisé pour identifier de façon unique une ressource parmi toutes les autres ressources du même type. + +Les systèmes informatiques génèrent des UUID localement en utilisant de très grands nombres aléatoires. En théorie, ces identifiants n'ont pas à être globalement uniques, même si la probabilité d'obtenir des doublons est très faible. Si un ou des systèmes ont besoin d'identifiants absolument uniques, ceux-ci doivent alors être émis par une autorité centrale. + +Les UUID sont des valeurs sur 128 bits qui sont représentées généralement comme une chaîne de 36 caractères au format `123e4567-e89b-12d3-a456-426614174000` (soit 5 chaînes de chiffres hexadécimaux, séparées par des tirets). Il existe plusieurs versions et formats qui dépendent du mode de calcul, certains UUID incluent par exemple une information temporelle. + +La définition formelle d'un UUID peut être trouvée dans [la RFC4122](https://www.rfc-editor.org/rfc/rfc4122). + +## Voir aussi + +- [UUID](https://fr.wikipedia.org/wiki/Universally_unique_identifier) sur Wikipédia +- [`Crypto.randomUUID()`](/fr/docs/Web/API/Crypto/randomUUID) diff --git a/files/fr/web/api/crypto/randomuuid/index.md b/files/fr/web/api/crypto/randomuuid/index.md new file mode 100644 index 00000000000000..0811d8b5f538ca --- /dev/null +++ b/files/fr/web/api/crypto/randomuuid/index.md @@ -0,0 +1,49 @@ +--- +title: "Crypto : méthode randomUUID()" +slug: Web/API/Crypto/randomUUID +l10n: + sourceCommit: 59adb56b83da91ee1744b723f2f7a37195c2ec82 +--- + +{{APIRef("Web Crypto API")}}{{SecureContext_header}} + +La méthode **`randomUUID()`**, rattachée à l'interface [`Crypto`](/fr/docs/Web/API/Crypto), est utilisée pour générer un [UUID](/fr/docs/Glossary/UUID) v4 en utilisant un générateur de nombres aléatoires sécurisé. + +## Syntaxe + +```js-nolint +randomUUID() +``` + +### Paramètres + +Aucun. + +### Valeur de retour + +Une chaîne de caractères générées aléatoirement et qui est un UUID au format v4 sur 36 caractères. + +## Exemples + +On accède à cette méthode à l'aide de la propriété globale [`crypto`](/fr/docs/Web/API/crypto_property). + +```js +/* Si self.crypto.randomUUID() est bien disponible : */ + +const uuid = self.crypto.randomUUID(); +console.log(uuid); // par exemple "36b8f84d-df4e-4d49-b662-bcde71a8764f" +``` + +## Spécifications + +{{Specifications}} + +## Compatibilité des navigateurs + +{{Compat}} + +## Voir aussi + +- [L'API Web Crypto](/fr/docs/Web/API/Web_Crypto_API) +- La propriété globale [`crypto`](/fr/docs/Web/API/crypto_property) qui permet d'obtenir un objet [`Crypto`](/fr/docs/Web/API/Crypto). +- [`Crypto.getRandomValues()`](/fr/docs/Web/API/Crypto/getRandomValues) qui permet d'obtenir des valeurs aléatoires sécurisées sur autant d'octets que souhaité. From 83f520c3ea11a2c80f41e8ae20d825f312535468 Mon Sep 17 00:00:00 2001 From: SphinxKnight Date: Wed, 15 Nov 2023 21:10:40 +0100 Subject: [PATCH 010/130] `fr` - Glossary - Initial translation for E entries (#16962) * Initial translation - Glossary - E * Typofixes and nitpicking --------- Co-authored-by: cw118 --- files/fr/glossary/enumerated/index.md | 32 +++++++++++++++++ files/fr/glossary/etld/index.md | 50 +++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 files/fr/glossary/enumerated/index.md create mode 100644 files/fr/glossary/etld/index.md diff --git a/files/fr/glossary/enumerated/index.md b/files/fr/glossary/enumerated/index.md new file mode 100644 index 00000000000000..92476705188865 --- /dev/null +++ b/files/fr/glossary/enumerated/index.md @@ -0,0 +1,32 @@ +--- +title: Type énuméré +slug: Glossary/Enumerated +l10n: + sourceCommit: cdb0dad4aeabda32b85c397f5e45304f95edc0d1 +--- + +{{GlossarySidebar}} + +En informatique, un type **énuméré** est un type de données qui consiste en un ensemble restreint de valeurs nommées. + +## Les attributs HTML énumérés + +En HTML, [les attributs énumérés (parfois appelés à valeur contrainte)](https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#enumerated-attribute) sont des attributs dont les valeurs possibles sont un ensemble prédéfini de chaînes de caractères. Ainsi, l'attribut HTML universel [`dir`](/fr/docs/Web/HTML/Global_attributes/dir) possède trois valeurs valides : `ltr`, `rtl`, et `auto`. + +Chaque attribut énuméré possède une valeur par défaut lorsque l'attribut est présent sans sa valeur et une valeur par défaut lorsqu'une valeur invalide lui est associée. À la différence des attributs HTML [booléens](/fr/docs/Glossary/Boolean) qui valent toujours vrai que la valeur soit présente, omise ou invalide, les attributs HTML énumérés peuvent avoir une valeur par défaut différente en fonction que la valeur est omise ou invalide. Par exemple, l'attribut HTML universel [`contenteditable`](/fr/docs/Web/HTML/Global_attributes/contenteditable) n'a que deux valeurs valides : `true` et `false`. Si l'attribut est présent, mais qu'aucune valeur n'est indiquée, la valeur par défaut sera `true`. En revanche, si une valeur invalide est utilisée (par exemple `contenteditable="contenteditable"`), la valeur utilisée effectivement correspondra à un troisième état, `inherit`. + +## Les attributs ARIA énumérés + +Les états et propriétés ARIA font partie de HTML et ont également des attributs énumérés. Si un attribut ARIA peut prendre la valeur `true` ou `false`, on considèrera généralement qu'un attribut omis vaut `false` et qu'une valeur invalide vaut `true` (la valeur par défaut pour l'utilisation d'une valeur omise ou d'une chaîne de caractères vide comme valeur dépendra de l'attribut). + +L'attribut `aria-current` accepte par exemple une liste de valeurs limitée qui contient `page`, `step`, `location`, `date`, `time`, `true`, et `false`. Dans ce cas, si l'attribut est absent, vaut la chaîne de caractères vide, est présent sans valeur ou est paramétré avec `aria-current="false"`, l'attribut sera considéré comme faux et ne sera pas exposé. Toute valeur qui est une chaîne de caractères non vide et qui ne fait pas partie de la liste indiquée sera considérée comme équivalente à l'utilisation de `aria-current="true"`. + +## Les propriétés JavaScript énumérables + +En JavaScript, les propriétés énumérables sont les propriétés dont le marqueur interne `enumerable` est vrai (ce qui est le comportement par défaut pour les propriétés créées avec une affectation simple ou un initialisateur de propriétés. La plupart des mécanismes d'itération (comme les boucles [`for…in`](/fr/docs/Web/JavaScript/Reference/Statements/for...in) ou la méthode [`Object.keys()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)) ne parcourent que les clés énumérables. + +## Voir aussi + +- [Booléen](/fr/docs/Glossary/Boolean) +- [Les types et structures de données en JavaScript](/fr/docs/Web/JavaScript/Data_structures) +- [Les attributs énumérés HTML dans le standard HTML (en anglais)](https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#enumerated-attribute) diff --git a/files/fr/glossary/etld/index.md b/files/fr/glossary/etld/index.md new file mode 100644 index 00000000000000..891da76428f4d0 --- /dev/null +++ b/files/fr/glossary/etld/index.md @@ -0,0 +1,50 @@ +--- +title: eTLD +slug: Glossary/eTLD +l10n: + sourceCommit: cdb0dad4aeabda32b85c397f5e45304f95edc0d1 +--- + +{{GlossarySidebar}} + +L'acronyme **eTLD** signifie « effective top-level domain  (soit « domaine de plus haut niveau effectif » en français) et correspond au domaine sous lequel d'autres domaines peuvent être par une organisation. + +Un domaine de plus haut niveau (top level domain, ou TLD) correspond au domaine qui suit le point final. Ainsi, le domaine de de plus haut niveau pour `crookedtimber.org` est `org`. + +Si tous les domaines situés juste en dessous des domaines de plus haut niveau pouvaient être enregistrés par des organisations, on pourra avoir les domaines suivants, appartenant à la même organisation : + +```plain + xyz.org +abc.xyz.org +def.xyz.org +``` + +Toutfois, cela ne fonctionne pas toujours ainsi et certains bureaux d'enregistrement permettent aux organisations d'enregistrer des domaines en dessous du niveau le plus haut. Par exemple, `sussex.ac.uk` et `aber.ac.uk` sont enregistrés par des organisations différentes. + +Cette gestion des niveaux dépend des règles de gestion du bureau d'enregistrement et il est donc impossible d'utiliser un algorithme pour déterminer si un suffixe donné (comme `ac.uk`) permet un enregistrement de domaine public ou non. La [liste des suffixes publics](https://publicsuffix.org/) est une liste maintenue de l'ensemble des suffixes sous lesquels des organisations peuvent enregistrer des noms de domaines. Autrement dit, il s'agit d'une liste d'eTLD. + +La notion associée **eTLD+1** signifie l'eTLD associée à la partie inférieure du nom de domaine. Tous les domaines d'un même eTLD+1 appartiennent à une même organisation. + +Les domaines qui suivent sont des exemples de domaines eTLD+1 : + +- `crookedtimber.org` +- `theguardian.com` +- `sussex.ac.uk` +- `aber.ac.uk` + +Cela signifie que tous les domaines sous chacun de ces domaines appartiennent à la même organisation. Par exemple : + +```plain + film.theguardian.com +music.theguardian.com +``` + +```plain + news.sussex.ac.uk + blog.sussex.ac.uk +admissions.sussex.ac.uk +``` + +## Voir aussi + +- [La liste des suffixes publics (en anglais)](https://publicsuffix.org/) From eb7e01891ddf38e0f9d9a42f9223f02b1ba0e048 Mon Sep 17 00:00:00 2001 From: SphinxKnight Date: Wed, 15 Nov 2023 21:28:31 +0100 Subject: [PATCH 011/130] `fr` - Glossary - Initial translation for C entries (#16940) * Initial translation for missing Glossary pages starting with C * Small fixes/nitpicking --------- Co-authored-by: cw118 --- files/fr/glossary/camel_case/index.md | 30 +++++++++++++ files/fr/glossary/code_unit/index.md | 39 ++++++++++++++++ .../fr/glossary/composite_operation/index.md | 26 +++++++++++ .../cors-safelisted_request_header/index.md | 36 +++++++++++++++ .../cors-safelisted_response_header/index.md | 45 +++++++++++++++++++ 5 files changed, 176 insertions(+) create mode 100644 files/fr/glossary/camel_case/index.md create mode 100644 files/fr/glossary/code_unit/index.md create mode 100644 files/fr/glossary/composite_operation/index.md create mode 100644 files/fr/glossary/cors-safelisted_request_header/index.md create mode 100644 files/fr/glossary/cors-safelisted_response_header/index.md diff --git a/files/fr/glossary/camel_case/index.md b/files/fr/glossary/camel_case/index.md new file mode 100644 index 00000000000000..c22f12b3357cc0 --- /dev/null +++ b/files/fr/glossary/camel_case/index.md @@ -0,0 +1,30 @@ +--- +title: Camel case +slug: Glossary/Camel_case +l10n: + sourceCommit: 4e8db9b4072e90e349f3c18b2c6edfe898cfe6a2 +--- + +{{GlossarySidebar}} + +Le **camel case** (généralement utilisé en anglais, qu'on pourrait traduire en « casse de chameau ») est une façon d'écrire des suites de mots sans espace, en mettant en majuscule la première lettre de chaque mot en majuscule (à l'exception de la toute première lettre de la séquence qui pourra être en minuscule ou en majuscule). Le nom de cette notation provient de la ressemblance entre la graphie de CamelCase et le dos d'un chameau (où les deux bosses reprennent la forme des C majuscules). + +Cette notation est généralement utilisée comme convention pour le nommage des variables et est par exemple utilisée en JavaScript. Voici des exemples de noms écrits en camel case : + +- [`console`](/fr/docs/Web/API/console) +- [`crossOriginIsolated`](/fr/docs/Web/API/crossOriginIsolated) +- [`encodeURIComponent`](/fr/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) +- [`ArrayBuffer`](/fr/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) +- [`HTMLElement`](/fr/docs/Web/API/HTMLElement) + +Si la séquence de mots contient des acronymes (comme `URI` et `HTML`), les pratiques peuvent varier. Parfois, on garde l'ensemble de l'acronyme en majuscules (voir `encodeURIComponent` ci-avant). Si plusieurs acronymes se suivent, cela peut réduire la lisibilité et être source de confusion, par exemple avec `XMLHTTPRequest` et certains préfèrent n'écrire que la première lettre de chaque mot en majuscule (`XmlHttpRequest`). Pour cet exemple, la variable globale actuelle, [`XMLHttpRequest`](/fr/docs/Web/API/XMLHttpRequest), utilise une combinaison des deux. + +Lorsque la première lettre de la séquence est toujours écrite en majuscule, on parlera de Pascal case (également utilisé tel quel en français). + +Le camel case est utilisé par convention en JavaScript, Java et dans d'autres langages de programmation. + +## Voir aussi + +- [Le snake case qui consiste à utiliser des tirets bas comme séparateurs (`snake_case`)](/fr/docs/Glossary/Snake_case) +- [Le kebab case qui consiste à utiliser des tirets comme séparateurs (`kebab-case`)](/fr/docs/Glossary/Kebab_case) +- [La règle `naming-convention` de typescript-eslint](https://typescript-eslint.io/rules/naming-convention/) diff --git a/files/fr/glossary/code_unit/index.md b/files/fr/glossary/code_unit/index.md new file mode 100644 index 00000000000000..0894092682b378 --- /dev/null +++ b/files/fr/glossary/code_unit/index.md @@ -0,0 +1,39 @@ +--- +title: Codet (code unit) +slug: Glossary/Code_unit +l10n: + sourceCommit: 4e8db9b4072e90e349f3c18b2c6edfe898cfe6a2 +--- + +{{GlossarySidebar}} + +Un **codet** (code unit en anglais) correspond au composant élémentaire utilisé par un système d'encodage des caractères (comme UTF-8 ou UTF-16). Un système d'encodage des caractères utilise un ou plusieurs codets pour encoder un [point de code](/fr/docs/Glossary/Code_point) Unicode. + +En UTF-16 (le système d'encodage utilisé pour les chaînes de caractères en JavaScript), les codets sont des valeurs sur 16 bits. Cela signifie que les opérations pour manipuler les index ou obtenir la longueur d'une chaîne de caractères manipulent ces codets de 16 bits. Toutefois, ces unités ne correspondent pas toujours exactement à ce que nous interprétons comme étant des caractères. + +Par exemple, certains caractères avec des diacritiques comme des accents peuvent être représentés en UTF-16 à l'aide de deux codets : + +```js +const maChaine = "\u006E\u0303"; +console.log(maChaine); // ñ +console.log(maChaine.length); // 2 +``` + +De plus, 16 bits ne suffisent pas à exprimer tous les points de code définis par Unicode. De nombreux points de code Unicode sont encodés à l'aide d'une paire de deux codets UTF-16 (parfois appelés demi-codets ou surrogate pair en anglais) : + +```js +const visage = "🥵"; +console.log(visage.length); // 2 +``` + +La méthode JavaScript [`codePointAt()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt) de l'objet [`String`](/fr/docs/Web/JavaScript/Reference/Global_Objects/String) permet de récupérer les codets Unicode à partir de la forme encodée : + +```js +const visage = "🥵"; +console.log(visage.codePointAt(0)); // 129397 soit 0x1F975 en hexadécimal +``` + +## Voir aussi + +- [Gestion des caractères UTF-16, points de code Unicode et groupes de graphèmes](/fr/docs/Web/JavaScript/Reference/Global_Objects/String#caractères_utf-16_points_de_code_Unicode_et_groupes_de_graphèmes) +- [La FAQ sur l'encodage Unicode (en anglais)](https://www.unicode.org/faq/utf_bom.html) diff --git a/files/fr/glossary/composite_operation/index.md b/files/fr/glossary/composite_operation/index.md new file mode 100644 index 00000000000000..b11419f7f08c15 --- /dev/null +++ b/files/fr/glossary/composite_operation/index.md @@ -0,0 +1,26 @@ +--- +title: Opération composite +slug: Glossary/Composite_operation +l10n: + sourceCommit: 4e8db9b4072e90e349f3c18b2c6edfe898cfe6a2 +--- + +{{GlossarySidebar}} + +En CSS, la valeur d'une propriété dans une règle CSS est la _valeur sous-jacente_ de cette propriété, pour cette même propriété, la valeur dans [une étape d'animation (keyframe)](/fr/docs/Web/CSS/@keyframes) est sa _valeur effective_. + +L'_opération composite_ est l'opération qui permet de combiner la valeur effective et la valeur sous-jacente pour produire la valeur effective finale pour l'étape d'animation. Il existe trois types d'opérations composites : + +- Remplacement + - : La valeur effective remplace la valeur sous-jacente. La valeur effective finale correspond à la valeur effective originelle. +- Ajout + - : La valeur effective est ajoutée à la valeur sous-jacente. +- Accumulation + - : La valeur effective est combinée à la valeur sous-jacente. + +> **Note :** En CSS, l'opération composite s'applique uniquement aux opérations. + +## Voir aussi + +- [`animation-composition`](/fr/docs/Web/CSS/animation-composition) +- [`KeyframeEffect.composite`](/fr/docs/Web/API/KeyframeEffect/composite) diff --git a/files/fr/glossary/cors-safelisted_request_header/index.md b/files/fr/glossary/cors-safelisted_request_header/index.md new file mode 100644 index 00000000000000..082281d1dc32cd --- /dev/null +++ b/files/fr/glossary/cors-safelisted_request_header/index.md @@ -0,0 +1,36 @@ +--- +title: En-tête de requête sûr pour le CORS +slug: Glossary/CORS-safelisted_request_header +l10n: + sourceCommit: 4e8db9b4072e90e349f3c18b2c6edfe898cfe6a2 +--- + +{{GlossarySidebar}} + +Un [en-tête de requêtes sûr pour le CORS (CORS-safelisted request header)](https://fetch.spec.whatwg.org/#cors-safelisted-request-header) est l'un des [en-têtes HTTP](/fr/docs/Web/HTTP/Headers) suivants : + +- [`Accept`](/fr/docs/Web/HTTP/Headers/Accept) +- [`Accept-Language`](/fr/docs/Web/HTTP/Headers/Accept-Language) +- [`Content-Language`](/fr/docs/Web/HTTP/Headers/Content-Language) +- [`Content-Type`](/fr/docs/Web/HTTP/Headers/Content-Type) +- [`Range`](/fr/docs/Web/HTTP/Headers/Range) + +Lorsqu'une requête ne contient que ces en-têtes (et répond aux critères indiqués après), il n'y a pas besoin d'une [requête préalable (preflight request)](/fr/docs/Glossary/Preflight_request) dans le contexte du [CORS](/fr/docs/Glossary/CORS). + +Il est possible d'indiquer d'autres en-têtes comme sûrs à l'aide de l'en-tête [`Access-Control-Allow-Headers`](/fr/docs/Web/HTTP/Headers/Access-Control-Allow-Headers). `Access-Control-Allow-Headers` permet également de lister les en-têtes précédents pour contourner les restrictions supplémentaires décrites ensuite. + +## Restrictions supplémentaires + +Les en-têtes sûr pour le CORS doivent également respecter ces critères : + +- Les valeurs pour [`Accept-Language`](/fr/docs/Web/HTTP/Headers/Accept-Language) et [`Content-Language`](/fr/docs/Web/HTTP/Headers/Content-Language) ne peuvent contenir que les caractères `0-9`, `A-Z`, `a-z`, espace ou `*,-.;=`. +- [`Accept`](/fr/docs/Web/HTTP/Headers/Accept) et [`Content-Type`](/fr/docs/Web/HTTP/Headers/Content-Type) ne peuvent pas contenir un octet d'en-tête non-sûr : `0x00-0x1F` (exception faite de `0x09 (HT)` qui est autorisé), `"():<>?@[\]{}`, et `0x7F (DEL)`. +- [`Content-Type`](/fr/docs/Web/HTTP/Headers/Content-Type) doit être un type MIME qui (lorsqu'on ignore les paramètres) vaut `application/x-www-form-urlencoded`, ou `multipart/form-data`, ou `text/plain`. +- La valeur de [`Range`](/fr/docs/Web/HTTP/Headers/Range) doit être un seul intervalle d'octets sous la forme `bytes=[0-9]+-[0-9]*`. Voir la documentation de [`Range`](/fr/docs/Web/HTTP/Headers/Range) pour plus de détails. +- Pour n'importe quel en-tête, la longueur de la valeur ne peut excéder 128. + +## Voir aussi + +- [En-tête de réponse sûr pour le CORS](/fr/docs/Glossary/CORS-safelisted_response_header) +- [Nom d'en-tête interdit](/fr/docs/Glossary/Forbidden_header_name) +- [En-tête de requête](/fr/docs/Glossary/Request_header) diff --git a/files/fr/glossary/cors-safelisted_response_header/index.md b/files/fr/glossary/cors-safelisted_response_header/index.md new file mode 100644 index 00000000000000..6e823b4ed51629 --- /dev/null +++ b/files/fr/glossary/cors-safelisted_response_header/index.md @@ -0,0 +1,45 @@ +--- +title: En-tête de réponse sûr pour le CORS +slug: Glossary/CORS-safelisted_response_header +l10n: + sourceCommit: 4e8db9b4072e90e349f3c18b2c6edfe898cfe6a2 +--- + +{{GlossarySidebar}} + +Un _en-tête de réponse sûr pour le CORS_ est un [en-tête HTTP](/fr/docs/Web/HTTP/Headers) d'une réponse [CORS](/fr/docs/Web/HTTP/CORS) dont on considère qu'il est sûr et peut être exposé aux scripts côté client. Seuls les en-têtes de réponse sûrs sont disponibles pour les pages web. + +Par défaut, la liste des en-têtes de réponse sûrs contient : + +- [`Cache-Control`](/fr/docs/Web/HTTP/Headers/Cache-Control) +- [`Content-Language`](/fr/docs/Web/HTTP/Headers/Content-Language) +- [`Content-Length`](/fr/docs/Web/HTTP/Headers/Content-Length) +- [`Content-Type`](/fr/docs/Web/HTTP/Headers/Content-Type) +- [`Expires`](/fr/docs/Web/HTTP/Headers/Expires) +- [`Last-Modified`](/fr/docs/Web/HTTP/Headers/Last-Modified) +- [`Pragma`](/fr/docs/Web/HTTP/Headers/Pragma) + +Des en-têtes supplémentaires peuvent être indiqués comme sûr à l'aide de l'en-tête [`Access-Control-Expose-Headers`](/fr/docs/Web/HTTP/Headers/Access-Control-Expose-Headers). + +> **Note :** Initialement, [`Content-Length`](/fr/docs/Web/HTTP/Headers/Content-Length) ne faisait pas partie de la liste par défaut des en-têtes de réponse sûrs (voir [la pull request 626 du dépôt Fetch](https://github.com/whatwg/fetch/pull/626)). + +## Exemples + +### Étendre la liste sûre + +La liste des en-têtes de réponse sûrs pour le CORS peut être étendue à l'aide de l'en-tête [`Access-Control-Expose-Headers`](/fr/docs/Web/HTTP/Headers/Access-Control-Expose-Headers) : + +```http +Access-Control-Expose-Headers: X-Custom-Header, Content-Encoding +``` + +## Voir aussi + +- [HTTP](/fr/docs/Web/HTTP) +- [En-têtes HTTP](/fr/docs/Web/HTTP/Headers) +- [`Access-Control-Expose-Headers`](/fr/docs/Web/HTTP/Headers/Access-Control-Expose-Headers) +- Entrées du [glossaire](/fr/docs/Glossary) + - [CORS](/fr/docs/Glossary/CORS) + - [En-tête de requête sûr pour le CORS](/fr/docs/Glossary/CORS-safelisted_request_header) + - [Nom d'en-tête interdit](/fr/docs/Glossary/Forbidden_header_name) + - [En-tête de requête](/fr/docs/Glossary/Request_header) From ad3df2b875b158baca0f93b093ba20f446b1a422 Mon Sep 17 00:00:00 2001 From: SphinxKnight Date: Wed, 15 Nov 2023 23:29:06 +0100 Subject: [PATCH 012/130] fr: Initial translation for CycleTracker Manifest file (#16766) * Initial translation * Fix lint --- .../cycletracker/manifest_file/circle.svg | 1 + .../manifest_file/debugger_devtools.png | Bin 0 -> 7398 bytes .../cycletracker/manifest_file/index.md | 270 ++++++++++++++++++ .../manifest_file/manifest_firefox.png | Bin 0 -> 9818 bytes .../manifest_file/manifest_icons.png | Bin 0 -> 12934 bytes .../manifest_identity_and_presentation.png | Bin 0 -> 18296 bytes .../cycletracker/manifest_file/tire.svg | 1 + .../cycletracker/manifest_file/wheel.svg | 45 +++ 8 files changed, 317 insertions(+) create mode 100644 files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/circle.svg create mode 100644 files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/debugger_devtools.png create mode 100644 files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/index.md create mode 100644 files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/manifest_firefox.png create mode 100644 files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/manifest_icons.png create mode 100644 files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/manifest_identity_and_presentation.png create mode 100644 files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/tire.svg create mode 100644 files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/wheel.svg diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/circle.svg b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/circle.svg new file mode 100644 index 00000000000000..ca1480bfa478fe --- /dev/null +++ b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/debugger_devtools.png b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/debugger_devtools.png new file mode 100644 index 0000000000000000000000000000000000000000..346be7eccc59a5812fc95cfdd174f849846543f9 GIT binary patch literal 7398 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 RHy@V-%JLd=?-Aw^{|CIX`_2FW literal 0 HcmV?d00001 diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/index.md b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/index.md new file mode 100644 index 00000000000000..27cc833fdac2bb --- /dev/null +++ b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/index.md @@ -0,0 +1,270 @@ +--- +title: "CycleTracker : manifeste et iconographie" +short-title: Manifeste et iconographie +slug: Web/Progressive_web_apps/Tutorials/CycleTracker/Manifest_file +l10n: + sourceCommit: fb87bd19f165cf4d743c0959c556c2f6d8bec676 +--- + +{{PreviousMenuNext("Web/Progressive_web_apps/Tutorials/CycleTracker/JavaScript_functionality", "Web/Progressive_web_apps/Tutorials/CycleTracker/Service_workers", "Web/Progressive_web_apps/Tutorials/CycleTracker")}} + +{{PWASidebar}} + +Le manifeste d'une PWA est un fichier JSON qui fournit des informations à propos des caractéristiques de l'application afin qu'elle puisse ressembler et se comporter comme une application native une fois installée sur un appareil. Le manifeste contient des métadonnées à propos de l'application comme son nom, ses icônes, ainsi que des directives d'affichage. + +Bien que la spécification considère l'ensemble des champs du manifeste comme facultatifs, certains navigateurs, systèmes d'exploitation ou outils de distribution imposent [certains champs obligatoires](/fr/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable#required_manifest_members) pour qu'une application web soit une PWA. En incluant un nom ou un nom court, l'URL initiale, une icône respectant certains critères, le type de zone d'affichage dans laquelle l'application devrait être vue, votre application respectera les critères liés au manifeste pour être une PWA. + +Voici un exemple de manifeste minimaliste pour notre application de suivi des cycles menstruels : + +```js +{ + "short_name": "CT", + "start_url" : "/", + "icons": [ + { + "src": "icon-512.png", + "sizes": "512x512" + } + ], + "display": "standalone" +} +``` + +Avant d'enregistrer le fichier du manifeste et d'inclure un pointeur vers celui-ci depuis notre document HTML, nous allons enrichir cet objet JSON afin qu'il reste concis, mais fournisse plus d'informations sur l'identité, la présentation et l'iconographie de la PWA. La version minimale ci-avant peut tout à fait fonctionner, mais voyons quelques autres propriétés qui aideront à mieux définir l'apparence de notre PWA CycleTracker. + +## Identité de l'application + +Pour identifier notre PWA, le document JSON doit inclure les propriétés `name` (nom) ou `short_name` (nom court), ou les deux. On peut également inclure un champ `description`. + +- [`name`](/fr/docs/Web/Manifest/name) + - : Le nom de la PWA. Il s'agit du nom utilisé lorsque le système d'exploitation liste les applications, comme le libellé situé à côté de l'icône de l'application, etc. +- [`short_name`](/fr/docs/Web/Manifest/short_name) + - : Le nom de la PWA qui est affiché s'il n'y a pas suffisamment d'espace pour `name`. Cette valeur est utilisée comme libellé pour les icônes sur les écrans de smartphones, et, par exemple, dans la boîte de dialogue « Ajouter à l'écran d'accueil » sur iOS. + +Lorsque `name` et `short_name` sont tous les deux renseignés, la valeur de `name` est utilisée dans la plupart des cas, tandis que `short_name` est utilisé lorsque l'espace d'affichage est limité. + +- [`description`](/fr/docs/Web/Manifest/description) + - : Une explication de ce que fait l'application. Elle fournit [une description accessible](/fr/docs/Web/Accessibility/ARIA/Attributes/aria-description) de l'objectif et des fonctionnalités de l'application. + +### Tâche + +Écrivez les premières lignes de votre fichier de manifeste. Vous pouvez utiliser le texte qui suit ou utiliser des valeurs plus descriptives ou discrètes, et une description de votre choix. + +### Exemple de solution + +```js +{ + "name": "CycleTracker : application de suivi menstruel", + "short_name": "CT", + "description": "Enregistrez de façon sécurisée et confidentielle vos cycles menstruels. Saisissez les dates de début et de fin de vos cycles, et enregistrez vos données privées dans votre navigateur sur votre appareil, sans qu'elles soient divulguées par ailleurs." +} +``` + +## Présentation de l'application + +L'apparence de la PWA lors de son installation ou de son utilisation hors-ligne est définie dans le manifeste. Les champs du manifeste relatifs à cette apparence incluent notamment `start_url` et `display`, ainsi que d'autres champs permettant de [personnaliser les couleurs de votre application](/fr/docs/Web/Progressive_web_apps/How_to/Customize_your_app_colors), comme `theme_color` et `background_color`. + +- [`start_url`](/fr/docs/Web/Manifest/start_url) + - : La page de démarrage lorsque la PWA est lancée. +- [`display`](/fr/docs/Web/Manifest/display) + - : Contrôle le mode d'affichage de l'application. Ce champ peut valoir `fullscreen`, `standalone` ([la PWA est alors affichée dans une fenêtre dédiée](/fr/docs/Web/Progressive_web_apps/How_to/Create_a_standalone_app)), `minimal-ui` (semblable à la vue `standalone`, mais avec certains éléments d'interface pour la navigation), et `browser`, qui ouvre l'application dans une fenêtre de navigateur classique. + +Il existe également un champ [`orientation`](/fr/docs/Web/Manifest/orientation) qui définit l'orientation par défaut de la PWA et qui peut valoir `portrait` ou `landscape` (paysage). Comme notre application fonctionne dans les deux orientations, nous n'inclurons pas cette propriété. + +### Couleurs + +- [`theme_color`](/fr/docs/Web/Manifest/theme_color) + - : [La couleur par défaut des éléments d'interface du système d'exploitation ou du navigateur](/fr/docs/Web/Progressive_web_apps/How_to/Customize_your_app_colors#define_a_theme_color) comme la barre d'état sur certains mobiles et la barre du titre d'application sur les systèmes d'exploitation de bureau. +- [`background_color`](/fr/docs/Web/Manifest/background_color) + - : Une couleur de substitution qui peut être affichée [comme arrière-plan de l'application](/fr/docs/Web/Progressive_web_apps/How_to/Customize_your_app_colors#customize_the_app_window_background_color) jusqu'à ce que le CSS soit chargé. Pour créer une transition fluide entre le lancement de l'application et la fin du chargement, mieux vaudra utiliser [la couleur](/fr/docs/Web/CSS/color_value) déclarée pour [l'arrière-plan (propriété CSS `background-color`)](/fr/docs/Web/CSS/background-color) de l'application. + +### Tâche + +Ajouter les définitions de présentation au fichier de manifeste que vous avez initié lors de l'exercice précédent. + +### Exemple de solution + +Comme notre application d'exemple fonctionne sur une seule page, on pourra utiliser `"/"` comme valeur pour `start_url`, voire omettre ce champ. De même, nous pouvons afficher l'application sans l'interface utilisateur du navigateur en utilisant `standalone` comme valeur pour `display`. + +Dans [notre fichier CSS](/fr/docs/Web/Progressive_web_apps/Tutorials/CycleTracker/HTML_and_CSS#contenu_css), nous appliquons `background-color: #efe;` sur le sélecteur de l'élément `body`. Aussi, nous utilisons ici `#eeffee` pour `background_color` afin d'obtenir une transition fluide lors du chargement de l'application. + +```js +{ + "name": "…", + "short_name": "…", + "description": "…", + "start_url": "/", + "theme_color": "#eeffee", + "background_color": "#eeffee", + "display": "standalone" +} +``` + +## Iconographie de l'application + +Les icônes d'une PWA aident à identifier l'application parmi les autres, aident à la rendre visuellement attractive et plus facilement découvrable. L'icône d'une PWA apparaît sur les écrans d'accueil, lanceurs d'application ou dans les résultats des magasins d'application. La taille de l'image affichée et les contraintes sur les fichiers utilisés varient selon le système et le contexte d'affichage. C'est dans le manifeste qu'on définit les images des différentes icônes. + +Dans l'objet JSON qui représente le manifeste, le champ `icons` est un tableau d'un ou plusieurs objets représentant des icônes, chacun avec les propriétés `src` et `sizes`, et pouvant également inclure les propriétés optionnelles `type` et `purpose`. La propriété `src` de chaque objet icône indique la source d'un seul fichier image. La propriété `sizes` fournit une liste de tailles prises en charge pour cette image, séparées par des espaces, ou le mot-clé `any` (la valeur est analogue à l'attribut [`sizes`](/fr/docs/Web/HTML/Element/link#sizes) de l'élément HTML [``](/fr/docs/Web/HTML/Element/link)). La propriété `type` indique le type MIME de l'image. + +```js +{ + "name": "MonAppli", + "icons": [ + { + "src": "icones/minuscule.webp", + "sizes": "48x48" + }, + { + "src": "icones/petite.png", + "sizes": "72x72 96x96 128x128 256x256", + "purpose": "maskable" + }, + { + "src": "icones/grande.png", + "sizes": "512x512" + }, + { + "src": "icones/vectorielle.svg", + "sizes": "any" + } + ] +} +``` + +Toutes les icônes devraient avoir le même aspect afin que votre application soit reconnaissable quelle que soit la taille utilisée. Plus l'icône est grande, plus elle pourra contenir de détails. Bien que tous les fichiers d'icônes soient des images carrées, certains systèmes d'exploitation pourront les afficher avec une autre forme, en coupant certaines sections ou en appliquant un masque sur l'icône pour obtenir une homogénéité entre les applications, voire en les réduisant, en les centrant et en ajoutant un arrière-plan si l'icône n'est pas masquable. La [zone sûre](/fr/docs/Web/Progressive_web_apps/How_to/Define_app_icons#support-masking), celle qui sera affichée sans perte comme un cercle correspond aux 80% intérieurs de l'image. Les icônes qui peuvent recevoir un masque sans problème peuvent être identifiées avec la propriété `purpose` dotée de la valeur `maskable` (voir [les icônes adaptatives sur web.dev (en anglais)](https://web.dev/articles/maskable-icon)). + +Dans Safari (et donc sur iOS et iPadOS), si vous incluez des éléments [``](/fr/docs/Web/HTML/Element/link) pour [les ressources non-standards `apple-touch-icon`](/fr/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML#ajouter_des_icônes_personnalisées_à_un_site) dans l'élément [``](/fr/docs/Web/HTML/Element/head), ces icônes remplaceront celles déclarées dans le manifeste. + +### Tâche + +Ajoutez des icônes au manifeste construit dans les exercices précédents. + +En jouant sur le mot « cycle » de CycleTracker et la couleur verte choisie comme thème, nos icônes peuvent être des carrés vert clair avec un cercle vert. Notre icône la plus petite, `circle.ico`, est un simple cercle représentant un point sur un carré utilisant la couleur du thème. Les images intermédiaires `circle.svg`, `tire.svg`, et `wheel.svg`, ajoutent progressivement plus de détails pour passer d'un cercle simple à une roue de plus en plus complexe, avec des rayons et un moyeu. Ceci étant écrit, la conception d'icônes est un sujet à part entière, que nous ne pouvons détailler pleinement dans ce tutoriel. + +```html hidden +
+ un cercle vert + une roue simple + une roue plus élaborée +
+``` + +```css hidden +div { + display: flex; + gap: 5px; +} +img { + width: 33%; +} +``` + +{{EmbedLiveSample("", 600, 250)}} + +### Exemple de solution + +```js +{ + "name": "...", + "short_name": "...", + "description": "...", + "start_url": "...", + "theme_color": "...", + "background_color": "...", + "display": "...", + "icons": [ + { + "src": "circle.ico", + "sizes": "48x48" + }, + { + "src": "icons/circle.svg", + "sizes": "72x72 96x96", + "purpose": "maskable" + }, + { + "src": "icons/tire.svg", + "sizes": "128x128 256x256" + }, + { + "src": "icons/wheel.svg", + "sizes": "512x512" + } + ] +} +``` + +## Ajouter le manifeste à l'application + +Nous avons désormais un fichier de manifeste utilisable. Il est temps de l'enregistrer et d'y faire référence depuis notre fichier HTML. + +L'extension utilisée pour le fichier du manifeste peut être `.webappmanifest`, comme indiqué dans la spécification. Comme il s'agit d'un fichier JSON, on peut également l'enregistrer avec l'extension `.json`. + +Pour une PWA, le manifeste doit être référencé dans le document HTML de l'application. Nous avons une application web fonctionnelle, mais ce n'est pas encore une PWA, car il n'y a pas encore de référence à notre manifeste JSON. Pour inclure la ressource JSON externe, on utilise un élément `` avec l'attribut `rel="manifest"`, et on renseigne l'attribut `href` pour qu'il pointe vers le manifeste. + +```html + +``` + +L'élément `` sert généralement à référencer les feuilles de style, et dans le cas des PWA, le manifeste. On l'utilise aussi, entre autres, pour [les icônes d'un site](/fr/docs/Web/HTML/Attributes/rel#icon) (qu'il s'agisse des « favicons » et des icônes pour les écrans d'accueil sur mobile). + +```html + +``` + +Si vous utilisez l'extension `.webmanifest`, il faut préciser `type="application/manifest+json"` si votre serveur ne gère pas automatiquement cette extension et son type MIME. + +#### Tâche + +Enregistrez le fichier de manifeste que vous avez créé jusqu'à présent, puis reliez-le depuis le fichier `index.html`. + +Comme exercice facultatif, vous pouvez également ajouter un lien vers une icône depuis le document HTML. + +#### Exemple de solution + +L'élément [``](/fr/docs/Web/HTML/Element/head) de votre fichier `index.html` pourra ressembler à : + +```html + + + + Cycle Tracker + + + + +``` + +Vous pouvez voir [le fichier `cycletracker.json` (en anglais)](https://mdn.github.io/pwa-examples/cycletracker/manifest_file/cycletracker.json) et [le code source du projet à ce stade](https://github.com/mdn/pwa-examples/tree/main/cycletracker/manifest_file) sur GitHub. + +Lorsqu'un fichier manifeste est présent, Safari reconnaîtra votre site comme une application web. Toutefois, pour que l'application soit pleinement une PWA, il faut lui ajouter un service worker. + +## Déboguer des fichiers manifeste + +Certains outils de développement dans les navigateurs permettent d'inspecter les manifestes. Pour Edge, Firefox, et Chrome, les propriétés du manifeste et leur valeur sont visibles dans le panneau « Application ». + +![Capture d'écran des outils de développement, où on voit le panneau gauche incluant un lien vers le manifeste. Sur la partie droite, on peut lire Manifeste d'application et voir le nom du fichier sous forme d'un lien vers le fichier JSON.](debugger_devtools.png) + +Le panneau relatif au manifeste fournit un lien vers le fichier, et des sections sur l'identité, la présentation et les icônes. + +![Les propriétés relatives à l'identité et à la présentation, avec leurs valeurs si elles sont présentes.](manifest_identity_and_presentation.png) + +Les propriétés du manifeste qui sont prises en charge sont affichées avec leur valeur. Dans cette capture d'écran, on peut voir les propriétés `orientation` et `id` apparaître, même si elles ne font pas partie de notre manifeste. Le panneau Applications peut être utilisé pour voir les propriétés et même apprendre certaines informations. Dans cet exemple, on peut voir que pour indiquer un identifiant d'application qui correspond à l'identité actuelle, il faut que la propriété `id` soit renseignée avec "/". + +Chrome et Edge fournissent également des erreurs et des avertissements, les gestionnaires de protocole et des informations pour améliorer le manifeste et les icônes. + +Notre application ne dispose pas de gestionnaires de protocole et nous n'aborderons pas ce sujet dans ce tutoriel. S'il y en avait eu d'inclus, ils auraient été listés dans la section correspondante. Cette section étant vide, les outils de développement fournissent des liens pour des informations à ce sujet. + +![Les quatre icônes incluses dans le manifeste, avec l'arrière-plan retiré car l'option « Affichez (sic) uniquement la zone de sécurité minimale pour les icônes masquables » est cochée.](manifest_icons.png) + +Le panneau relatif au manifeste inclut également des informations sur les zones sûres des icônes masquables et un lien vers [un billet de blog (en anglais) sur ce sujet](https://web.dev/articles/maskable-icon). Pour créer des icônes, vous pouvez utiliser l'outil [imageGenerator (en anglais)](https://www.pwabuilder.com/imageGenerator) qui crée plus de 100 images carrées en PNG pour Android, Apple, et Windows, ainsi qu'un fichier JSON contenant l'ensemble des chemins des images avec leur taille. Celles-ci pourront ne pas toutes vous servir, mais cet outil vous permettra de voir la diversité des configurations utilisées pour servir une PWA. + +Les outils de développement sont utiles pour identifier les champs de manifeste pris en charge. On notera par exemple que les outils de développement de Firefox affichent `dir`, `lang`, `orientation`, `scope`, et `id`, même si notre fichier de manifeste ne contient pas ces champs. Firefox inclut également la valeur de la propriété `purpose` pour chaque icône, en affichant `any` par défaut. + +![Le panneau du manifeste dans les outils de développement de Firefox, affichant des valeurs pour les propriétés qui ne sont pas incluses dans notre manifeste comme dir, scope, et id members, ainsi que les propriétés lang et orientation sans leur valeur associée.](manifest_firefox.png) + +## Pour la suite + +Pour que notre application bénéficie des avantages d'une PWA pour l'ensemble des navigateurs et des systèmes d'exploitation, nous devons lui [ajouter un service worker](/fr/docs/Web/Progressive_web_apps/Tutorials/CycleTracker/Service_workers). Dans le prochain article, nous verrons comment faire, sans utiliser de framework. + +{{PreviousMenuNext("Web/Progressive_web_apps/Tutorials/CycleTracker/JavaScript_functionality", "Web/Progressive_web_apps/Tutorials/CycleTracker/Service_workers", "Web/Progressive_web_apps/Tutorials/CycleTracker")}} diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/manifest_firefox.png b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/manifest_firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..37d47703f8b9ed611c4d4bb53719507481b96ae7 GIT binary patch literal 9818 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 a_m_986gt`R@>cQxKto1C5nLx`4E;auP1Z30 literal 0 HcmV?d00001 diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/manifest_icons.png b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/manifest_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9e9529318f471ba6feab1f99558361861805e6 GIT binary patch literal 12934 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 literal 0 HcmV?d00001 diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/manifest_identity_and_presentation.png b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/manifest_identity_and_presentation.png new file mode 100644 index 0000000000000000000000000000000000000000..4a8da196d91409728c9eccaccb082f892cb84322 GIT binary patch literal 18296 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 X=HC9Xb_uWqU|{fc^>bP0l+XkK&GUs$ literal 0 HcmV?d00001 diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/tire.svg b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/tire.svg new file mode 100644 index 00000000000000..a69dfdcbb0a309 --- /dev/null +++ b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/tire.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/wheel.svg b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/wheel.svg new file mode 100644 index 00000000000000..e6270fa640da6c --- /dev/null +++ b/files/fr/web/progressive_web_apps/tutorials/cycletracker/manifest_file/wheel.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From dfefb25790fbf3645296fa9265ea4a890eda5fc7 Mon Sep 17 00:00:00 2001 From: mdn-bot <108879845+mdn-bot@users.noreply.github.com> Date: Wed, 15 Nov 2023 01:26:55 +0000 Subject: [PATCH 013/130] ja: sync translated content --- files/ja/_redirects.txt | 40 ++++++++++++++---- files/ja/_wikihistory.json | 32 +++++++------- .../{assert => assert_static}/index.md | 5 +-- .../console/{clear => clear_static}/index.md | 5 +-- .../console/{count => count_static}/index.md | 5 +-- .../index.md | 5 +-- .../console/{debug => debug_static}/index.md | 5 +-- .../api/console/{dir => dir_static}/index.md | 5 +-- .../{dirxml => dirxml_static}/index.md | 5 +-- .../console/{error => error_static}/index.md | 5 +-- .../console/{group => group_static}/index.md | 5 +-- .../index.md | 5 +-- .../{groupend => groupend_static}/index.md | 5 +-- .../console/{info => info_static}/index.md | 5 +-- .../api/console/{log => log_static}/index.md | 3 +- .../{profile => profile_static}/index.md | 5 +-- .../index.md | 5 +-- .../console-table-array-of-array.png | Bin ...-table-array-of-objects-firstname-only.png | Bin .../console-table-array-of-objects.png | Bin .../console-table-array.png | Bin .../console-table-object-of-objects.png | Bin .../console-table-simple-object.png | Bin .../console/{table => table_static}/index.md | 5 +-- .../console/{time => time_static}/index.md | 5 +-- .../{timeend => timeend_static}/index.md | 5 +-- .../{timelog => timelog_static}/index.md | 5 +-- .../{timestamp => timestamp_static}/index.md | 5 +-- .../console/{trace => trace_static}/index.md | 5 +-- .../console/{warn => warn_static}/index.md | 5 +-- 30 files changed, 91 insertions(+), 89 deletions(-) rename files/ja/web/api/console/{assert => assert_static}/index.md (95%) rename files/ja/web/api/console/{clear => clear_static}/index.md (87%) rename files/ja/web/api/console/{count => count_static}/index.md (94%) rename files/ja/web/api/console/{countreset => countreset_static}/index.md (95%) rename files/ja/web/api/console/{debug => debug_static}/index.md (95%) rename files/ja/web/api/console/{dir => dir_static}/index.md (93%) rename files/ja/web/api/console/{dirxml => dirxml_static}/index.md (88%) rename files/ja/web/api/console/{error => error_static}/index.md (94%) rename files/ja/web/api/console/{group => group_static}/index.md (95%) rename files/ja/web/api/console/{groupcollapsed => groupcollapsed_static}/index.md (91%) rename files/ja/web/api/console/{groupend => groupend_static}/index.md (88%) rename files/ja/web/api/console/{info => info_static}/index.md (94%) rename files/ja/web/api/console/{log => log_static}/index.md (97%) rename files/ja/web/api/console/{profile => profile_static}/index.md (91%) rename files/ja/web/api/console/{profileend => profileend_static}/index.md (94%) rename files/ja/web/api/console/{table => table_static}/console-table-array-of-array.png (100%) rename files/ja/web/api/console/{table => table_static}/console-table-array-of-objects-firstname-only.png (100%) rename files/ja/web/api/console/{table => table_static}/console-table-array-of-objects.png (100%) rename files/ja/web/api/console/{table => table_static}/console-table-array.png (100%) rename files/ja/web/api/console/{table => table_static}/console-table-object-of-objects.png (100%) rename files/ja/web/api/console/{table => table_static}/console-table-simple-object.png (100%) rename files/ja/web/api/console/{table => table_static}/index.md (97%) rename files/ja/web/api/console/{time => time_static}/index.md (93%) rename files/ja/web/api/console/{timeend => timeend_static}/index.md (94%) rename files/ja/web/api/console/{timelog => timelog_static}/index.md (95%) rename files/ja/web/api/console/{timestamp => timestamp_static}/index.md (93%) rename files/ja/web/api/console/{trace => trace_static}/index.md (92%) rename files/ja/web/api/console/{warn => warn_static}/index.md (94%) diff --git a/files/ja/_redirects.txt b/files/ja/_redirects.txt index d119cae958c550..e72b4b491ce860 100644 --- a/files/ja/_redirects.txt +++ b/files/ja/_redirects.txt @@ -697,10 +697,10 @@ /ja/docs/DOM/XMLHttpRequest/FormData/Using_FormData_Objects /ja/docs/Web/API/XMLHttpRequest_API/Using_FormData_Objects /ja/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest /ja/docs/Web/API/XMLHttpRequest_API/Using_XMLHttpRequest /ja/docs/DOM/console /ja/docs/Web/API/console -/ja/docs/DOM/console.dir /ja/docs/Web/API/Console/dir -/ja/docs/DOM/console.log /ja/docs/Web/API/Console/log -/ja/docs/DOM/console.time /ja/docs/Web/API/Console/time -/ja/docs/DOM/console.timeEnd /ja/docs/Web/API/Console/timeEnd +/ja/docs/DOM/console.dir /ja/docs/Web/API/console/dir_static +/ja/docs/DOM/console.log /ja/docs/Web/API/console/log_static +/ja/docs/DOM/console.time /ja/docs/Web/API/console/time_static +/ja/docs/DOM/console.timeEnd /ja/docs/Web/API/console/timeend_static /ja/docs/DOM/dispatchEvent_example /ja/docs/Web/Events/Creating_and_triggering_events /ja/docs/DOM/document /ja/docs/Web/API/Document /ja/docs/DOM/document.URL /ja/docs/Web/API/Document/URL @@ -2650,7 +2650,12 @@ /ja/docs/Web/API/Canvas_API/Tutorial/Compositing/Example /ja/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation /ja/docs/Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility /ja/docs/orphaned/Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility /ja/docs/Web/API/CloseEvent/initCloseEvent /ja/docs/conflicting/Web/API/CloseEvent -/ja/docs/Web/API/Console.error /ja/docs/Web/API/Console/error +/ja/docs/Web/API/Console.error /ja/docs/Web/API/console/error_static +/ja/docs/Web/API/Console/dir /ja/docs/Web/API/console/dir_static +/ja/docs/Web/API/Console/error /ja/docs/Web/API/console/error_static +/ja/docs/Web/API/Console/log /ja/docs/Web/API/console/log_static +/ja/docs/Web/API/Console/time /ja/docs/Web/API/console/time_static +/ja/docs/Web/API/Console/timeEnd /ja/docs/Web/API/console/timeend_static /ja/docs/Web/API/Constraint_validation /ja/docs/Learn/Forms/Form_validation /ja/docs/Web/API/Coordinates /ja/docs/Web/API/GeolocationCoordinates /ja/docs/Web/API/DOMPoint/fromPoint /ja/docs/Web/API/DOMPoint/fromPoint_static @@ -3237,10 +3242,27 @@ /ja/docs/Web/API/XRTargetRayMode /ja/docs/Web/API/XRInputSource/targetRayMode /ja/docs/Web/API/XSLTProcessor/Browser_Differences /ja/docs/orphaned/Web/API/XSLTProcessor/Browser_Differences /ja/docs/Web/API/XSLTProcessor/Resources /ja/docs/Web/API/XSLTProcessor -/ja/docs/Web/API/console.dir /ja/docs/Web/API/Console/dir -/ja/docs/Web/API/console.log /ja/docs/Web/API/Console/log -/ja/docs/Web/API/console.time /ja/docs/Web/API/Console/time -/ja/docs/Web/API/console.timeEnd /ja/docs/Web/API/Console/timeEnd +/ja/docs/Web/API/console.dir /ja/docs/Web/API/console/dir_static +/ja/docs/Web/API/console.log /ja/docs/Web/API/console/log_static +/ja/docs/Web/API/console.time /ja/docs/Web/API/console/time_static +/ja/docs/Web/API/console.timeEnd /ja/docs/Web/API/console/timeend_static +/ja/docs/Web/API/console/assert /ja/docs/Web/API/console/assert_static +/ja/docs/Web/API/console/clear /ja/docs/Web/API/console/clear_static +/ja/docs/Web/API/console/count /ja/docs/Web/API/console/count_static +/ja/docs/Web/API/console/countReset /ja/docs/Web/API/console/countreset_static +/ja/docs/Web/API/console/debug /ja/docs/Web/API/console/debug_static +/ja/docs/Web/API/console/dirxml /ja/docs/Web/API/console/dirxml_static +/ja/docs/Web/API/console/group /ja/docs/Web/API/console/group_static +/ja/docs/Web/API/console/groupCollapsed /ja/docs/Web/API/console/groupcollapsed_static +/ja/docs/Web/API/console/groupEnd /ja/docs/Web/API/console/groupend_static +/ja/docs/Web/API/console/info /ja/docs/Web/API/console/info_static +/ja/docs/Web/API/console/profile /ja/docs/Web/API/console/profile_static +/ja/docs/Web/API/console/profileEnd /ja/docs/Web/API/console/profileend_static +/ja/docs/Web/API/console/table /ja/docs/Web/API/console/table_static +/ja/docs/Web/API/console/timeLog /ja/docs/Web/API/console/timelog_static +/ja/docs/Web/API/console/timeStamp /ja/docs/Web/API/console/timestamp_static +/ja/docs/Web/API/console/trace /ja/docs/Web/API/console/trace_static +/ja/docs/Web/API/console/warn /ja/docs/Web/API/console/warn_static /ja/docs/Web/API/document.URL /ja/docs/Web/API/Document/URL /ja/docs/Web/API/document.activeElement /ja/docs/Web/API/Document/activeElement /ja/docs/Web/API/document.adoptNode /ja/docs/Web/API/Document/adoptNode diff --git a/files/ja/_wikihistory.json b/files/ja/_wikihistory.json index 808aeaafee5102..91c724afa8e6fd 100644 --- a/files/ja/_wikihistory.json +++ b/files/ja/_wikihistory.json @@ -15100,67 +15100,67 @@ "saneyuki_s" ] }, - "Web/API/console/assert": { + "Web/API/console/assert_static": { "modified": "2020-11-27T14:41:08.119Z", "contributors": ["yumetodo", "takamin", "yyss"] }, - "Web/API/console/clear": { + "Web/API/console/clear_static": { "modified": "2020-11-27T13:49:44.683Z", "contributors": ["yumetodo", "853419196", "yyss"] }, - "Web/API/console/count": { + "Web/API/console/count_static": { "modified": "2020-11-27T14:24:35.469Z", "contributors": ["yumetodo", "yyss"] }, - "Web/API/console/countReset": { + "Web/API/console/countreset_static": { "modified": "2020-11-27T14:37:31.289Z", "contributors": ["yumetodo"] }, - "Web/API/console/debug": { + "Web/API/console/debug_static": { "modified": "2020-11-27T14:40:02.073Z", "contributors": ["yumetodo", "silverskyvicto"] }, - "Web/API/console/dirxml": { + "Web/API/console/dirxml_static": { "modified": "2019-03-23T22:34:53.031Z", "contributors": ["yyss"] }, - "Web/API/console/group": { + "Web/API/console/group_static": { "modified": "2020-10-15T21:45:35.788Z", "contributors": ["munieru_jp", "dskmori", "yyss"] }, - "Web/API/console/groupCollapsed": { + "Web/API/console/groupcollapsed_static": { "modified": "2019-03-23T22:34:55.714Z", "contributors": ["yyss"] }, - "Web/API/console/groupEnd": { + "Web/API/console/groupend_static": { "modified": "2019-03-23T22:34:56.119Z", "contributors": ["yyss"] }, - "Web/API/console/info": { + "Web/API/console/info_static": { "modified": "2020-10-15T21:45:37.023Z", "contributors": ["u_7cc", "yyss"] }, - "Web/API/console/profile": { + "Web/API/console/profile_static": { "modified": "2019-03-23T22:34:55.973Z", "contributors": ["yyss"] }, - "Web/API/console/profileEnd": { + "Web/API/console/profileend_static": { "modified": "2019-03-23T22:34:42.618Z", "contributors": ["yyss"] }, - "Web/API/console/table": { + "Web/API/console/table_static": { "modified": "2019-03-23T22:34:44.337Z", "contributors": ["yyss"] }, - "Web/API/console/timeStamp": { + "Web/API/console/timestamp_static": { "modified": "2019-03-23T22:34:51.368Z", "contributors": ["yyss"] }, - "Web/API/console/trace": { + "Web/API/console/trace_static": { "modified": "2020-10-15T21:45:37.860Z", "contributors": ["YujiSoftware", "woodmix", "yyss"] }, - "Web/API/console/warn": { + "Web/API/console/warn_static": { "modified": "2019-03-23T22:34:47.743Z", "contributors": ["yyss"] }, diff --git a/files/ja/web/api/console/assert/index.md b/files/ja/web/api/console/assert_static/index.md similarity index 95% rename from files/ja/web/api/console/assert/index.md rename to files/ja/web/api/console/assert_static/index.md index 617e8a91e0a318..f3779cd4f8b089 100644 --- a/files/ja/web/api/console/assert/index.md +++ b/files/ja/web/api/console/assert_static/index.md @@ -1,8 +1,7 @@ --- title: console.assert() -slug: Web/API/console/assert -l10n: - sourceCommit: b40b71d87ab041f2f36a4675bc09af983b22422a +slug: Web/API/console/assert_static +original_slug: Web/API/console/assert --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/clear/index.md b/files/ja/web/api/console/clear_static/index.md similarity index 87% rename from files/ja/web/api/console/clear/index.md rename to files/ja/web/api/console/clear_static/index.md index 78acbc190624f9..e3aa3a99b200a1 100644 --- a/files/ja/web/api/console/clear/index.md +++ b/files/ja/web/api/console/clear_static/index.md @@ -1,8 +1,7 @@ --- title: console.clear() -slug: Web/API/console/clear -l10n: - sourceCommit: 2de88eb1e77c52ea86d46b003e913a8a5337c5d2 +slug: Web/API/console/clear_static +original_slug: Web/API/console/clear --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/count/index.md b/files/ja/web/api/console/count_static/index.md similarity index 94% rename from files/ja/web/api/console/count/index.md rename to files/ja/web/api/console/count_static/index.md index 3ba4c000d1b11a..09941b3cb6516b 100644 --- a/files/ja/web/api/console/count/index.md +++ b/files/ja/web/api/console/count_static/index.md @@ -1,8 +1,7 @@ --- title: console.count() -slug: Web/API/console/count -l10n: - sourceCommit: 710132ffea066697d23e1978478d36090fb448d7 +slug: Web/API/console/count_static +original_slug: Web/API/console/count --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/countreset/index.md b/files/ja/web/api/console/countreset_static/index.md similarity index 95% rename from files/ja/web/api/console/countreset/index.md rename to files/ja/web/api/console/countreset_static/index.md index a886ea93569d7e..b9877ad3ae550e 100644 --- a/files/ja/web/api/console/countreset/index.md +++ b/files/ja/web/api/console/countreset_static/index.md @@ -1,8 +1,7 @@ --- title: console.countReset() -slug: Web/API/console/countReset -l10n: - sourceCommit: 710132ffea066697d23e1978478d36090fb448d7 +slug: Web/API/console/countreset_static +original_slug: Web/API/console/countReset --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/debug/index.md b/files/ja/web/api/console/debug_static/index.md similarity index 95% rename from files/ja/web/api/console/debug/index.md rename to files/ja/web/api/console/debug_static/index.md index f53d2774652639..f7bf601dae74cf 100644 --- a/files/ja/web/api/console/debug/index.md +++ b/files/ja/web/api/console/debug_static/index.md @@ -1,8 +1,7 @@ --- title: console.debug() -slug: Web/API/console/debug -l10n: - sourceCommit: d19d68bf6078c23d527b6e1355925795e745d124 +slug: Web/API/console/debug_static +original_slug: Web/API/console/debug --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/dir/index.md b/files/ja/web/api/console/dir_static/index.md similarity index 93% rename from files/ja/web/api/console/dir/index.md rename to files/ja/web/api/console/dir_static/index.md index 853fa16fbb1ee9..a0c47dbcfcc5b6 100644 --- a/files/ja/web/api/console/dir/index.md +++ b/files/ja/web/api/console/dir_static/index.md @@ -1,8 +1,7 @@ --- title: console.dir() -slug: Web/API/console/dir -l10n: - sourceCommit: 4fd581de2e31ac303a4628354c80f476ba9fd0e2 +slug: Web/API/console/dir_static +original_slug: Web/API/console/dir --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/dirxml/index.md b/files/ja/web/api/console/dirxml_static/index.md similarity index 88% rename from files/ja/web/api/console/dirxml/index.md rename to files/ja/web/api/console/dirxml_static/index.md index 3de221f6cb0072..ba28803a6414ed 100644 --- a/files/ja/web/api/console/dirxml/index.md +++ b/files/ja/web/api/console/dirxml_static/index.md @@ -1,8 +1,7 @@ --- title: console.dirxml() -slug: Web/API/console/dirxml -l10n: - sourceCommit: 4fd581de2e31ac303a4628354c80f476ba9fd0e2 +slug: Web/API/console/dirxml_static +original_slug: Web/API/console/dirxml --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/error/index.md b/files/ja/web/api/console/error_static/index.md similarity index 94% rename from files/ja/web/api/console/error/index.md rename to files/ja/web/api/console/error_static/index.md index 47461b5cb66bb2..8304557863d26e 100644 --- a/files/ja/web/api/console/error/index.md +++ b/files/ja/web/api/console/error_static/index.md @@ -1,8 +1,7 @@ --- title: console.error() -slug: Web/API/console/error -l10n: - sourceCommit: d19d68bf6078c23d527b6e1355925795e745d124 +slug: Web/API/console/error_static +original_slug: Web/API/console/error --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/group/index.md b/files/ja/web/api/console/group_static/index.md similarity index 95% rename from files/ja/web/api/console/group/index.md rename to files/ja/web/api/console/group_static/index.md index f4004842cce88d..2546bc3bfc6eeb 100644 --- a/files/ja/web/api/console/group/index.md +++ b/files/ja/web/api/console/group_static/index.md @@ -1,8 +1,7 @@ --- title: console.group() -slug: Web/API/console/group -l10n: - sourceCommit: 4fd581de2e31ac303a4628354c80f476ba9fd0e2 +slug: Web/API/console/group_static +original_slug: Web/API/console/group --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/groupcollapsed/index.md b/files/ja/web/api/console/groupcollapsed_static/index.md similarity index 91% rename from files/ja/web/api/console/groupcollapsed/index.md rename to files/ja/web/api/console/groupcollapsed_static/index.md index ee12de3a114416..e14630748cf5a4 100644 --- a/files/ja/web/api/console/groupcollapsed/index.md +++ b/files/ja/web/api/console/groupcollapsed_static/index.md @@ -1,8 +1,7 @@ --- title: console.groupCollapsed() -slug: Web/API/console/groupCollapsed -l10n: - sourceCommit: 4fd581de2e31ac303a4628354c80f476ba9fd0e2 +slug: Web/API/console/groupcollapsed_static +original_slug: Web/API/console/groupCollapsed --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/groupend/index.md b/files/ja/web/api/console/groupend_static/index.md similarity index 88% rename from files/ja/web/api/console/groupend/index.md rename to files/ja/web/api/console/groupend_static/index.md index 18a7c17f329c2b..6985af2858db28 100644 --- a/files/ja/web/api/console/groupend/index.md +++ b/files/ja/web/api/console/groupend_static/index.md @@ -1,8 +1,7 @@ --- title: console.groupEnd() -slug: Web/API/console/groupEnd -l10n: - sourceCommit: 4fd581de2e31ac303a4628354c80f476ba9fd0e2 +slug: Web/API/console/groupend_static +original_slug: Web/API/console/groupEnd --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/info/index.md b/files/ja/web/api/console/info_static/index.md similarity index 94% rename from files/ja/web/api/console/info/index.md rename to files/ja/web/api/console/info_static/index.md index d4923de2ef7f49..6dd6cbc4d34448 100644 --- a/files/ja/web/api/console/info/index.md +++ b/files/ja/web/api/console/info_static/index.md @@ -1,8 +1,7 @@ --- title: console.info() -slug: Web/API/console/info -l10n: - sourceCommit: d19d68bf6078c23d527b6e1355925795e745d124 +slug: Web/API/console/info_static +original_slug: Web/API/console/info --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/log/index.md b/files/ja/web/api/console/log_static/index.md similarity index 97% rename from files/ja/web/api/console/log/index.md rename to files/ja/web/api/console/log_static/index.md index 1086671d3e643b..9cd3e296604f5f 100644 --- a/files/ja/web/api/console/log/index.md +++ b/files/ja/web/api/console/log_static/index.md @@ -1,6 +1,7 @@ --- title: console.log() -slug: Web/API/console/log +slug: Web/API/console/log_static +original_slug: Web/API/console/log --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/profile/index.md b/files/ja/web/api/console/profile_static/index.md similarity index 91% rename from files/ja/web/api/console/profile/index.md rename to files/ja/web/api/console/profile_static/index.md index c3279602df1a41..2ca922070b3f52 100644 --- a/files/ja/web/api/console/profile/index.md +++ b/files/ja/web/api/console/profile_static/index.md @@ -1,8 +1,7 @@ --- title: console.profile() -slug: Web/API/console/profile -l10n: - sourceCommit: 6c498a447fb5e776a67af7f9801a3aa407fc4d1c +slug: Web/API/console/profile_static +original_slug: Web/API/console/profile --- {{APIRef("Console API")}}{{Non-standard_header}} diff --git a/files/ja/web/api/console/profileend/index.md b/files/ja/web/api/console/profileend_static/index.md similarity index 94% rename from files/ja/web/api/console/profileend/index.md rename to files/ja/web/api/console/profileend_static/index.md index 84a2e3469e86e2..a598fd0b3c16e4 100644 --- a/files/ja/web/api/console/profileend/index.md +++ b/files/ja/web/api/console/profileend_static/index.md @@ -1,8 +1,7 @@ --- title: console.profileEnd() -slug: Web/API/console/profileEnd -l10n: - sourceCommit: 6c498a447fb5e776a67af7f9801a3aa407fc4d1c +slug: Web/API/console/profileend_static +original_slug: Web/API/console/profileEnd --- {{APIRef("Console API")}}{{Non-standard_header}} diff --git a/files/ja/web/api/console/table/console-table-array-of-array.png b/files/ja/web/api/console/table_static/console-table-array-of-array.png similarity index 100% rename from files/ja/web/api/console/table/console-table-array-of-array.png rename to files/ja/web/api/console/table_static/console-table-array-of-array.png diff --git a/files/ja/web/api/console/table/console-table-array-of-objects-firstname-only.png b/files/ja/web/api/console/table_static/console-table-array-of-objects-firstname-only.png similarity index 100% rename from files/ja/web/api/console/table/console-table-array-of-objects-firstname-only.png rename to files/ja/web/api/console/table_static/console-table-array-of-objects-firstname-only.png diff --git a/files/ja/web/api/console/table/console-table-array-of-objects.png b/files/ja/web/api/console/table_static/console-table-array-of-objects.png similarity index 100% rename from files/ja/web/api/console/table/console-table-array-of-objects.png rename to files/ja/web/api/console/table_static/console-table-array-of-objects.png diff --git a/files/ja/web/api/console/table/console-table-array.png b/files/ja/web/api/console/table_static/console-table-array.png similarity index 100% rename from files/ja/web/api/console/table/console-table-array.png rename to files/ja/web/api/console/table_static/console-table-array.png diff --git a/files/ja/web/api/console/table/console-table-object-of-objects.png b/files/ja/web/api/console/table_static/console-table-object-of-objects.png similarity index 100% rename from files/ja/web/api/console/table/console-table-object-of-objects.png rename to files/ja/web/api/console/table_static/console-table-object-of-objects.png diff --git a/files/ja/web/api/console/table/console-table-simple-object.png b/files/ja/web/api/console/table_static/console-table-simple-object.png similarity index 100% rename from files/ja/web/api/console/table/console-table-simple-object.png rename to files/ja/web/api/console/table_static/console-table-simple-object.png diff --git a/files/ja/web/api/console/table/index.md b/files/ja/web/api/console/table_static/index.md similarity index 97% rename from files/ja/web/api/console/table/index.md rename to files/ja/web/api/console/table_static/index.md index a983b406b20a39..bbf5c864bd9594 100644 --- a/files/ja/web/api/console/table/index.md +++ b/files/ja/web/api/console/table_static/index.md @@ -1,8 +1,7 @@ --- title: console.table() -slug: Web/API/console/table -l10n: - sourceCommit: 49b07e57dba92be3982e3c0035bc48e7a5036f97 +slug: Web/API/console/table_static +original_slug: Web/API/console/table --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/time/index.md b/files/ja/web/api/console/time_static/index.md similarity index 93% rename from files/ja/web/api/console/time/index.md rename to files/ja/web/api/console/time_static/index.md index 84ef80ecde0c55..e78295d3a214e0 100644 --- a/files/ja/web/api/console/time/index.md +++ b/files/ja/web/api/console/time_static/index.md @@ -1,8 +1,7 @@ --- title: console.time() -slug: Web/API/console/time -l10n: - sourceCommit: 6c498a447fb5e776a67af7f9801a3aa407fc4d1c +slug: Web/API/console/time_static +original_slug: Web/API/console/time --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/timeend/index.md b/files/ja/web/api/console/timeend_static/index.md similarity index 94% rename from files/ja/web/api/console/timeend/index.md rename to files/ja/web/api/console/timeend_static/index.md index 6dccdeeb8037b3..843f52fe9a787f 100644 --- a/files/ja/web/api/console/timeend/index.md +++ b/files/ja/web/api/console/timeend_static/index.md @@ -1,8 +1,7 @@ --- title: console.timeEnd() -slug: Web/API/console/timeEnd -l10n: - sourceCommit: 71aac3e50b8bc5afea791d69d232dab98e1c5c0d +slug: Web/API/console/timeend_static +original_slug: Web/API/console/timeEnd --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/timelog/index.md b/files/ja/web/api/console/timelog_static/index.md similarity index 95% rename from files/ja/web/api/console/timelog/index.md rename to files/ja/web/api/console/timelog_static/index.md index af47a8ebdd681a..27ea03f7406c78 100644 --- a/files/ja/web/api/console/timelog/index.md +++ b/files/ja/web/api/console/timelog_static/index.md @@ -1,8 +1,7 @@ --- title: console.timeLog() -slug: Web/API/console/timeLog -l10n: - sourceCommit: 71aac3e50b8bc5afea791d69d232dab98e1c5c0d +slug: Web/API/console/timelog_static +original_slug: Web/API/console/timeLog --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/timestamp/index.md b/files/ja/web/api/console/timestamp_static/index.md similarity index 93% rename from files/ja/web/api/console/timestamp/index.md rename to files/ja/web/api/console/timestamp_static/index.md index 6d2f5788a1ed08..ff0506d753e347 100644 --- a/files/ja/web/api/console/timestamp/index.md +++ b/files/ja/web/api/console/timestamp_static/index.md @@ -1,8 +1,7 @@ --- title: console.timeStamp() -slug: Web/API/console/timeStamp -l10n: - sourceCommit: a6c0c23f7972d85c4bdba384f79c9c6a79f07c13 +slug: Web/API/console/timestamp_static +original_slug: Web/API/console/timeStamp --- {{APIRef("Console API")}}{{Non-standard_header}} diff --git a/files/ja/web/api/console/trace/index.md b/files/ja/web/api/console/trace_static/index.md similarity index 92% rename from files/ja/web/api/console/trace/index.md rename to files/ja/web/api/console/trace_static/index.md index 52e2312790722f..55c0b09cf209fc 100644 --- a/files/ja/web/api/console/trace/index.md +++ b/files/ja/web/api/console/trace_static/index.md @@ -1,8 +1,7 @@ --- title: console.trace() -slug: Web/API/console/trace -l10n: - sourceCommit: 71aac3e50b8bc5afea791d69d232dab98e1c5c0d +slug: Web/API/console/trace_static +original_slug: Web/API/console/trace --- {{APIRef("Console API")}} diff --git a/files/ja/web/api/console/warn/index.md b/files/ja/web/api/console/warn_static/index.md similarity index 94% rename from files/ja/web/api/console/warn/index.md rename to files/ja/web/api/console/warn_static/index.md index c94a118c4db556..c94baa426bb374 100644 --- a/files/ja/web/api/console/warn/index.md +++ b/files/ja/web/api/console/warn_static/index.md @@ -1,8 +1,7 @@ --- title: console.warn() -slug: Web/API/console/warn -l10n: - sourceCommit: d19d68bf6078c23d527b6e1355925795e745d124 +slug: Web/API/console/warn_static +original_slug: Web/API/console/warn --- {{APIRef("Console API")}} From 65f4616380de9c42dfb449dd347e0d7933d39940 Mon Sep 17 00:00:00 2001 From: "y.takahashi" Date: Wed, 15 Nov 2023 18:38:10 +0900 Subject: [PATCH 014/130] fix typo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 可能用に -> かのように --- .../ja/web/javascript/reference/global_objects/number/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/ja/web/javascript/reference/global_objects/number/index.md b/files/ja/web/javascript/reference/global_objects/number/index.md index fa97a3fffc0a73..34b3e3fd0d9b05 100644 --- a/files/ja/web/javascript/reference/global_objects/number/index.md +++ b/files/ja/web/javascript/reference/global_objects/number/index.md @@ -64,7 +64,7 @@ JavaScript の数値 (`Number`) 型は [IEEE 754 の倍精度 64ビットバイ - [`undefined`](/ja/docs/Web/JavaScript/Reference/Global_Objects/undefined) は [`NaN`](/ja/docs/Web/JavaScript/Reference/Global_Objects/NaN) になります。 - [`null`](/ja/docs/Web/JavaScript/Reference/Operators/null) は `0` になります。 - `true` は `1` に、`false` は `0` になります。 -- 文字列は、[数値リテラル](/ja/docs/Web/JavaScript/Reference/Lexical_grammar#数値リテラル)が入っている可能用に解釈して変換されます。解釈に失敗した場合は `NaN` が返されます。実際の数値リテラルと比較すると、いくつかの異なる点があります。 +- 文字列は、[数値リテラル](/ja/docs/Web/JavaScript/Reference/Lexical_grammar#数値リテラル)が入っているかのように解釈して変換されます。解釈に失敗した場合は `NaN` が返されます。実際の数値リテラルと比較すると、いくつかの異なる点があります。 - 先頭および末尾のホワイトスペース/改行文字は無視されます。 - 先頭が数字 `0` である場合、数値が 8 進数のリテラルとなる(または厳格モードで拒否される)ことはありません。 - 文字列の始めには、符号を示すために `+` と `-` を置くことができます。(実際のコードでは、これらはリテラルの一部に「見える」のですが、実際には別個の単項演算子です。)ただし、符号は一度しか現れず、空白が続いてはいけません。 From 6c69a0702d995dba944c0697850b4f923084cc16 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 11:36:03 +0900 Subject: [PATCH 015/130] =?UTF-8?q?2023/09/15=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/typedarray/fill/index.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/fill/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/fill/index.md index bca49f685b9941..733e2b7d1b2ee3 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/fill/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/fill/index.md @@ -2,14 +2,14 @@ title: TypedArray.prototype.fill() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/fill l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: d9e66eca59d82c65166c65e7946332650da8f48f --- {{JSRef}} -**`fill()`** メソッドは、型付き配列の開始位置から終了位置までのすべての要素を固定値で埋めます。このメソッドのアルゴリズムは {{jsxref("Array.prototype.fill()")}} と同じです。ここで _TypedArray_ は、[型付き配列型](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)のうちの 1 つです。 +**`fill()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、型付き配列のある範囲のインデックスにあるすべての要素を固定値で埋めます。これは変更された型付き配列を返します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.fill()")}} と同じです。 -{{EmbedInteractiveExample("pages/js/typedarray-fill.html","shorter")}} +{{EmbedInteractiveExample("pages/js/typedarray-fill.html", "shorter")}} ## 構文 @@ -24,9 +24,9 @@ fill(value, start, end) - `value` - : 型付き配列を埋める値です。 - `start` {{optional_inline}} - - : 開始位置です。既定値は 0 です。 + - : 埋まる範囲の開始点を表すゼロ基点のインデックスで、[整数に変換されます](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#整数への変換)。 - `end` {{optional_inline}} - - : 終了位置(の次の位置)です既定値は `this.length` です。 + - : 埋まる範囲の終了点を表すゼロ基点のインデックスで、[整数に変換されます](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#整数への変換)。 `fill()` は `end` の手前までを埋めます。 ### 返値 @@ -34,11 +34,7 @@ fill(value, start, end) ## 解説 -埋める区間は \[`start`, `end`) です。 - -**`fill()`** メソッドは `value`, `start`, `end` の 3 つまでの引数を取ります。 `start` と `end` の各引数は省略可能で、既定値はそれぞれ `0` と、 `this` オブジェクトの `length` です。 - -`start` が負の数であった場合は、 `length+start` (`length` は配列の長さ) として扱われます。 `end` が負の数であった場合は、 `length+end` として扱われます。 +詳細については、 {{jsxref("Array.prototype.fill()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 @@ -63,4 +59,6 @@ new Uint8Array([1, 2, 3]).fill(4, -3, -2); // Uint8Array [4, 2, 3] ## 関連情報 - [`TypedArray.prototype.fill` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} - {{jsxref("Array.prototype.fill()")}} From 5907253cf5f2ba319f869bae73e799cc1685b90f Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 13:21:20 +0900 Subject: [PATCH 016/130] =?UTF-8?q?2023/09/15=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/typedarray/filter/index.md | 61 ++++++------------- 1 file changed, 17 insertions(+), 44 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.md index 738e6ec4beea85..407d9a226a196b 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.md @@ -2,65 +2,42 @@ title: TypedArray.prototype.filter() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/filter l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: d9e66eca59d82c65166c65e7946332650da8f48f --- {{JSRef}} -**`filter()`** メソッドは、提供された関数によって実装されたテストに合格したすべての要素を含む新しい型付き配列を生成します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.filter()")}} と同じです。ここで _TypedArray_ は、[型付き配列型](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)のうちの 1 つです。 +**`filter()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、指定された関数で実装されているテストに合格した要素だけにフィルタリングされた、指定された型付き配列の一部のコピーを作成します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.filter()")}} と同じです。 {{EmbedInteractiveExample("pages/js/typedarray-filter.html")}} ## 構文 ```js-nolint -// アロー関数 -filter((element) => { /* ... */ } ) -filter((element, index) => { /* ... */ } ) -filter((element, index, array) => { /* ... */ } ) - -// コールバック関数 filter(callbackFn) filter(callbackFn, thisArg) - -// インラインコールバック関数 -filter(function(element) { /* ... */ }) -filter(function(element, index) { /* ... */ }) -filter(function(element, index, array){ /* ... */ }) -filter(function(element, index, array) { /* ... */ }, thisArg) ``` ### 引数 - `callbackFn` - - - : 型付き配列の各要素をテストする関数です。 - - `(element, index, array)` の引数で呼び出されます。 - `true` を返すと要素を維持し、それでなければ `false` を返します。 - + - : 配列のそれぞれの要素に対して実行する関数です。要素がテストに合格した場合は[真値](/ja/docs/Glossary/Truthy)を返し、そうでなければ[偽値](/ja/docs/Glossary/Falsy)を返す必要があります。この関数は以下の引数で呼び出されます。 + - `element` + - : 現在処理されている型付き配列の要素です。 + - `index` + - : 現在処理されている型付き配列の要素の添字です。 + - `array` + - : `filter()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} - - : `callbackFn` を実行するときに `this` として使用する値です。 + - : `callbackFn` を実行する際に `this` として使用する値。[反復処理メソッド](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array#反復処理メソッド)を参照してください。 ### 返値 -テストに合格した要素を持つ新しい型付き配列。 +テストに合格した要素だけを格納した、指定された型付き配列のコピー。テストに合格する要素がない場合は、空の型付き配列を返します。 ## 解説 -`filter()` は、与えられた `callbackFn` 関数を型付き配列の各要素に対して一度ずつ呼び出し、`callbackFn` が[真値](/ja/docs/Glossary/Truthy)を返したすべての要素からなる新しい型付き配列を生成します。`callbackFn` は値が代入されている型付き配列の添字に対してのみ呼び出されます。つまり、すでに削除された添字や、まだ値が代入されていない添字に対しては呼び出されません。`callbackFn` によるテストに合格しなかった型付き配列の要素は単純にスキップされ、新しい型付き配列には含まれません。 - -`callbackFn` は 3 つの引数で呼び出されます。 - -1. 要素の値 -2. 要素の添字 -3. 走査中の型付き配列オブジェクト - -引数 `thisArg` が `filter()` に与えられた場合、そのオブジェクトは `callbackFn` が呼び出された際に `this` 値として使われます。そうでない場合、 `undefined` が `this` 値として使われます。`callbackFn` 関数内の最終的な `this` 値は[関数内の `this` を決定する一般的ルール](/ja/docs/Web/JavaScript/Reference/Operators/this)に従って決められます。 - -`filter()` は呼び出された型付き配列を変化させません。 - -`filter()` によって処理される要素の範囲は `callbackFn` が最初の呼び出し前に設定されます。 `filter()` の呼び出しが始まった後で型付き配列に追加された要素は `callbackFn` によって処理されません。型付き配列の存在している要素が変更されたり、削除された場合、 `callbackFn` に渡される値は、 `filter()` が処理する直前の値になります。 +詳細については、 {{jsxref("Array.prototype.filter()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 @@ -76,15 +53,6 @@ new Uint8Array([12, 5, 8, 130, 44]).filter(isBigEnough); // Uint8Array [ 12, 130, 44 ] ``` -### アロー関数を使用して型付き配列の要素をフィルターする - -[アロー関数](/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions)によって、同じテストをより短い構文で実現できます。 - -```js -new Uint8Array([12, 5, 8, 130, 44]).filter((elem) => elem >= 10); -// Uint8Array [ 12, 130, 44 ] -``` - ## 仕様書 {{Specifications}} @@ -96,6 +64,11 @@ new Uint8Array([12, 5, 8, 130, 44]).filter((elem) => elem >= 10); ## 関連情報 - [`TypedArray.prototype.filter` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} +- {{jsxref("TypedArray.prototype.forEach()")}} - {{jsxref("TypedArray.prototype.every()")}} +- {{jsxref("TypedArray.prototype.map()")}} - {{jsxref("TypedArray.prototype.some()")}} +- {{jsxref("TypedArray.prototype.reduce()")}} - {{jsxref("Array.prototype.filter()")}} From 4d7ea7503a5c629254ddb86d262f008a9de24db6 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 13:32:45 +0900 Subject: [PATCH 017/130] =?UTF-8?q?2023/09/07=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/typedarray/find/index.md | 53 ++++++------------- 1 file changed, 17 insertions(+), 36 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/find/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/find/index.md index dc5e1c5ce5204a..46003d46b47fcc 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/find/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/find/index.md @@ -2,53 +2,34 @@ title: TypedArray.prototype.find() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/find l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: e01fd6206ce2fad2fe09a485bb2d3ceda53a62de --- {{JSRef}} -**`find()`** メソッドは、型付き配列のある要素の値が与えられたテスト関数を満たした場合、その値を返します。そうでなければ {{jsxref("undefined")}} を返します。ここで _TypedArray_ は[型付き配列型](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)のうちの一つです。 - -{{jsxref("TypedArray.findIndex", "findIndex()")}} メソッドも参照してください。こちらはそのメソッドは値のかわりに型付き配列で見つかった要素の**添字**を返します。 +**`find()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、型付き配列のある要素の値が与えられたテスト関数を満たした場合、その値を返します。そうでなければ {{jsxref("undefined")}} を返します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.find()")}} と同じです。 {{EmbedInteractiveExample("pages/js/typedarray-find.html")}} ## 構文 ```js-nolint -// アロー関数 -find((element) => { /* ... */ } ) -find((element, index) => { /* ... */ } ) -find((element, index, array) => { /* ... */ } ) - -// コールバック関数 find(callbackFn) find(callbackFn, thisArg) - -// インラインコールバック関数 -find(function(element) { /* ... */ }) -find(function(element, index) { /* ... */ }) -find(function(element, index, array){ /* ... */ }) -find(function(element, index, array) { /* ... */ }, thisArg) ``` ### 引数 - `callbackFn` - - - : 型付き配列の要素に対するテストに使用する関数です。 - - この関数は以下の引数で呼び出されます。 - + - : 配列のそれぞれの要素に対して実行する関数です。要素がテストに合格した場合は[真値](/ja/docs/Glossary/Truthy)を返し、そうでなければ[偽値](/ja/docs/Glossary/Falsy)を返す必要があります。この関数は以下の引数で呼び出されます。 - `element` - - : 型付き配列内で現在処理されている要素。 + - : 現在処理されている型付き配列の要素です。 - `index` - - : 型付き配列内で現在処理されている要素の位置。 + - : 現在処理されている型付き配列の要素の添字です。 - `array` - - : `find()` が呼び出された配列。 - + - : `find()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} - - : `callbackFn` を実行するときに `this` として使用するオブジェクト。 + - : `callbackFn` を実行する際に `this` として使用する値。[反復処理メソッド](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array#反復処理メソッド)を参照してください。 ### 返値 @@ -56,21 +37,13 @@ find(function(element, index, array) { /* ... */ }, thisArg) ## 解説 -`find()` メソッドは `callbackFn` 関数が true 値を返す要素を見つけるまで、型付き配列内に存在している各要素に対して一度ずつ `callbackFn` 関数を実行します。そのような要素が見つかったら、 `find()` はすぐに要素の値を返します。さもなければ、 `find()` は {{jsxref("undefined")}} を返します。 `callbackFn` は型付き配列の値を割り当てた位置に対してのみ呼び出されます。つまり、削除されたり、値が割り当てられて位置に対しては呼び出されません。 - -`callbackFn` は、要素の値、要素の添字、走査中の型付き配列の 3 つの引数とともに呼び出されます。 - -`thisArg` 引数が `find()` に与えられた場合、 `callbackFn` の各呼び出しで `this` として使用されます。与えられなかった場合は、 {{jsxref("undefined")}}が使用されます。 - -`find()` は呼び出されている型付き配列を変更しません。 - -`find()` によって処理される要素の範囲は、最初に `callbackFn` が呼び出される前に設定されます。 `find()` の呼び出しが始まったあとで型付き配列に追加された要素は、 `callbackFn` メソッドによって処理されません。存在していて、処理されていない型付き配列の要素が `callbackFn` によって変更された場合、処理している `callbackFn` 関数に渡される値は、 `find()` が要素の位置を処理する直前の値です。削除された要素は処理されません。 +詳細については、 {{jsxref("Array.prototype.find()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 ### 型付き配列内の素数を探す -次の例では、型付き配列内で素数である要素を探します (または、素数がない場合は {{jsxref("undefined")}} を返します)。 +次の例では、型付き配列内で素数である要素を探します(または、素数がない場合は {{jsxref("undefined")}} を返します)。 ```js function isPrime(element, index, array) { @@ -98,5 +71,13 @@ console.log(uint8.find(isPrime)); // 5 ## 関連情報 - [`TypedArray.prototype.find` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} - {{jsxref("TypedArray.prototype.findIndex()")}} +- {{jsxref("TypedArray.prototype.findLast()")}} +- {{jsxref("TypedArray.prototype.findLastIndex()")}} +- {{jsxref("TypedArray.prototype.includes()")}} +- {{jsxref("TypedArray.prototype.filter()")}} - {{jsxref("TypedArray.prototype.every()")}} +- {{jsxref("TypedArray.prototype.some()")}} +- {{jsxref("Array.prototype.find()")}} From 942256d9d0ab9ca49d23aefbd03b3fd20e2f065c Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 15:28:41 +0900 Subject: [PATCH 018/130] =?UTF-8?q?2023/09/15=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typedarray/findindex/index.md | 49 ++++++------------- 1 file changed, 15 insertions(+), 34 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.md index bd4762447f6ef4..9d4401b1c33aa0 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.md @@ -2,67 +2,42 @@ title: TypedArray.prototype.findIndex() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: d9e66eca59d82c65166c65e7946332650da8f48f --- {{JSRef}} -**`findIndex()`** メソッドは、型付き配列内の要素が与えられたテスト関数を満たす場合、型付き配列内の**添字**を返します。さもなければ、 -1 が返されます。 - -{{jsxref("TypedArray.find", "find()")}} メソッドも参照してください。これは型付き配列内の見つかった要素の添字の代わりに**値**を返します。 +**`findIndex()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、指定されたテスト関数を満たす型付き配列の最初の要素のインデックスを返します。テスト関数を満たす要素がない場合、 -1 を返します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.findIndex()")}} と同じです。 {{EmbedInteractiveExample("pages/js/typedarray-findindex.html")}} ## 構文 ```js-nolint -// アロー関数 -findIndex((element) => { /* ... */ } ) -findIndex((element, index) => { /* ... */ } ) -findIndex((element, index, array) => { /* ... */ } ) - -// コールバック関数 findIndex(callbackFn) findIndex(callbackFn, thisArg) - -// インラインコールバック関数 -findIndex(function(element) { /* ... */ }) -findIndex(function(element, index) { /* ... */ }) -findIndex(function(element, index, array){ /* ... */ }) -findIndex(function(element, index, array) { /* ... */ }, thisArg) ``` ### 引数 - `callbackFn` - - - : 型付き配列の各要素で実行する関数。3 つの引数を取ります。 - + - : 配列のそれぞれの要素に対して実行する関数です。要素がテストに合格した場合は[真値](/ja/docs/Glossary/Truthy)を返し、そうでなければ[偽値](/ja/docs/Glossary/Falsy)を返す必要があります。この関数は以下の引数で呼び出されます。 - `element` - - : 型付き配列内で現在処理されている要素。 + - : 現在処理されている型付き配列の要素です。 - `index` - - : 型付き配列内で現在処理されている要素の位置。 + - : 現在処理されている型付き配列の要素の添字です。 - `array` - - : `findIndex()` を呼び出した元の配列。 - + - : `findIndex()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} - - : `callbackFn` を実行するときに `this` として使用するオブジェクト。 + - : `callbackFn` を実行する際に `this` として使用する値。[反復処理メソッド](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array#反復処理メソッド)を参照してください。 ### 返値 -テストを満たした配列の要素の位置を返します。それ以外の場合は、 `-1` を返します。 +テストを通った配列の要素の位置を返します。それ以外の場合は、 `-1` を返します。 ## 解説 -`findIndex()` メソッドは、 `callbackFn` 関数が true 値を返す要素を見つけるまで、型付き配列内に存在している各要素に対して一度ずつ `callbackFn` 関数を実行します。そのような要素が見つかったら、 `findIndex()` はすぐに要素の添字を返します。さもなければ、 `findIndex()` メソッドは -1 を返します。 `callbackFn` は型付き配列の値を割り当てた位置に対してのみ呼び出されます。つまり、削除されたり、値が割り当てられていない位置に対しては呼び出されません。 - -`callbackFn` は、要素の値、要素の添字、走査中の型付き配列の 3 つの引数とともに呼び出されます。 - -`thisArg` 引数が `findIndex()` に与えられた場合、 `callbackFn` の各呼び出しで `this` として使用されます。`thisArg` 引数が与えられなかった場合は、 {{jsxref("undefined")}} が使用されます。 - -`findIndex()` メソッドは呼び出される型付き配列を変更しません。 - -`findIndex()` によって処理される要素の範囲は、最初に `callbackFn` が呼び出される前に設定されます。 `findIndex()` の呼び出しが始まったあとで型付き配列に追加された要素は、 `callbackFn` メソッドによって処理されません。存在していて、処理されていない型付き配列の要素が `callbackFn` によって変更された場合、処理している `callbackFn` 関数に渡される値は、 `findIndex()` が要素の位置を処理する直前の値です。削除された要素は処理されません。 +詳細については、 {{jsxref("Array.prototype.findIndex()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 @@ -99,5 +74,11 @@ console.log(uint16.findIndex(isPrime)); // 2 ## 関連情報 - [`TypedArray.prototype.findIndex` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} - {{jsxref("TypedArray.prototype.find()")}} +- {{jsxref("TypedArray.prototype.findLast()")}} +- {{jsxref("TypedArray.prototype.findLastIndex()")}} - {{jsxref("TypedArray.prototype.indexOf()")}} +- {{jsxref("TypedArray.prototype.lastIndexOf()")}} +- {{jsxref("Array.prototype.findIndex()")}} From fdc897e32386e65d9a577145d72d293e577f6afe Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 15:52:58 +0900 Subject: [PATCH 019/130] =?UTF-8?q?2023/09/15=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typedarray/findlast/index.md | 73 ++++++------------- 1 file changed, 21 insertions(+), 52 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/findlast/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/findlast/index.md index 798c8746dda7d3..a807762e13277b 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/findlast/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/findlast/index.md @@ -2,86 +2,48 @@ title: TypedArray.prototype.findLast() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/findLast l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: d9e66eca59d82c65166c65e7946332650da8f48f --- {{JSRef}} -**`findLast()`** メソッドは、[型付き配列](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)を逆順で反復処理し、指定したテスト関数を満たす最初の要素の値を返します。 -テスト関数を満たす値がなかった場合は、{{jsxref("undefined")}} を返します。 - -{{jsxref("TypedArray.findLastIndex()", "findLastIndex()")}} メソッドも参照してください。こちらは見つかった要素の値ではなく添字を返します。 +**`findLast()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、型付き配列を逆順に反復処理し、指定されたテスト関数を満たす最初の要素の値を返します。テスト関数を満たす要素がない場合は {{jsxref("undefined")}} を返します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.findLast()")}} と同じです。 {{EmbedInteractiveExample("pages/js/typedarray-findlast.html")}} ## 構文 ```js-nolint -// アロー関数 -findLast((element) => { /* ... */ } ) -findLast((element, index) => { /* ... */ } ) -findLast((element, index, array) => { /* ... */ } ) - -// コールバック関数 findLast(callbackFn) findLast(callbackFn, thisArg) - -// インラインコールバック関数 -findLast(function(element) { /* ... */ }) -findLast(function(element, index) { /* ... */ }) -findLast(function(element, index, array){ /* ... */ }) -findLast(function(element, index, array) { /* ... */ }, thisArg) ``` ### 引数 - `callbackFn` - - - : 型付き配列の要素に対するテストに使用する関数です。 - - この関数は以下の引数で呼び出されます。 - + - : 配列のそれぞれの要素に対して実行する関数です。要素がテストに合格した場合は[真値](/ja/docs/Glossary/Truthy)を返し、そうでなければ[偽値](/ja/docs/Glossary/Falsy)を返す必要があります。この関数は以下の引数で呼び出されます。 - `element` - - : 型付き配列内で処理されている現在の要素。 + - : 現在処理されている型付き配列の要素です。 - `index` - - : 型付き配列内で処理されている現在の要素の添字(位置)。 + - : 現在処理されている型付き配列の要素の添字です。 - `array` - - : `findLast()` が呼び出されている型付き配列。 - - コールバック関数は、適切な要素が見つかった際には[真値](/ja/docs/Glossary/Truthy)を返す必要があります。 - この要素の値が `findLast()` から返されます。 - + - : `findLast()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} - - : オプション。 `callbackFn` を実行するときに {{jsxref("Operators/this", "this")}} として使用する値。 + - : `callbackFn` を実行する際に `this` として使用する値。[反復処理メソッド](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array#反復処理メソッド)を参照してください。 ### 返値 -指定されたテスト関数を満たす、最も大きな添字を持つ型付き配列の要素です。一致する値が見つからない場合は {{jsxref("undefined")}} です。 +指定されたテスト関数を満たす、最後の(最も大きなインデックスを持つ)型付き配列の要素です。一致する値が見つからない場合は {{jsxref("undefined")}} です。 ## 解説 -`findLast()` メソッドは、`callbackFn` が[真値](/ja/docs/Glossary/Truthy)を返すまで、型付き配列の各要素に対して、添字の降順に 1 回ずつ `callbackFn` 関数を実行します。 -`findLast()` はその要素の添字を返し、配列のイテレーターを反復処理するのを止めます。 -もし `callbackFn` が真値を返さなかった場合、 `findLast()` は {{jsxref("undefined")}} を返します。 - -`callbackFn` は、要素の値、要素の添字、走査されている型付き配列の 3 つの引数で呼び出されます。 - -`thisArg` 引数が `findLast()` に指定された場合、それが `callbackFn` を呼び出すたびに `this` として使用されます。 -指定されなかった場合は、{{jsxref("undefined")}}が使用されます。 - -`findLast()` メソッドは呼び出された型付き配列を変更しませんが、`callbackFn` に指定された関数からは変更することができます。 - -`findLast()` が処理する要素の範囲は、`callbackFn` が最初に呼び出される前に設定されています。 -`findLast()` の呼び出しを始めた後に型付き配列に追加された要素は、`callbackFn` が処理する対象にはなりません。 -型付き配列に存在する未処理の要素が `callbackFn` によって変更された場合、処理する `callbackFn` に渡されるその値は、`findLast()` がその要素の要素を処理した時点の値になります。 - -> **警告:** 上記のように変更を同時進行で行うと、理解しにくいコードになることが多いので、(特別な場合を除き)一般的には避けるべきです。 +詳細については、 {{jsxref("Array.prototype.findLast()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 ### 型付き配列から素数の添字を探す -以下の例では、型付き配列から素数である値のうち、最後の値を探します(素数がない場合は{{jsxref("undefined")}}を返します)。 +以下の例では、型付き配列から素数である値のうち、最後の値を返します(素数がない場合は {{jsxref("undefined")}} を返します)。 ```js function isPrime(element) { @@ -97,7 +59,7 @@ function isPrime(element) { } let uint8 = new Uint8Array([4, 6, 8, 12]); -console.log(uint8.findLast(isPrime)); // undefined (no primes in array) +console.log(uint8.findLast(isPrime)); // undefined (配列に素数がない) uint8 = new Uint8Array([4, 5, 7, 8, 9, 11, 12]); console.log(uint8.findLast(isPrime)); // 11 ``` @@ -134,7 +96,7 @@ uint8.findLast((value, index) => { // Visited index 2 with value 0 // Visited index 1 with value 1 // Visited index 0 with value 0 -// Deleting uint8[5] with value 5 +// Set uint8[3] to 44 // Visited index 6 with value 6 // Visited index 5 with value 5 // Visited index 4 with value 0 @@ -154,7 +116,14 @@ uint8.findLast((value, index) => { ## 関連情報 -- [`TypedArray.prototype.findLast()` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) -- {{jsxref("TypedArray.prototype.findLastIndex()")}} +- [`TypedArray.prototype.findLast` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#array-find-from-last) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} - {{jsxref("TypedArray.prototype.find()")}} +- {{jsxref("TypedArray.prototype.findIndex()")}} +- {{jsxref("TypedArray.prototype.findLastIndex()")}} +- {{jsxref("TypedArray.prototype.includes()")}} +- {{jsxref("TypedArray.prototype.filter()")}} - {{jsxref("TypedArray.prototype.every()")}} +- {{jsxref("TypedArray.prototype.some()")}} +- {{jsxref("Array.prototype.findLast()")}} From 1192ac57e6250ccfc67cffc77d503357996efc4d Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 17:02:07 +0900 Subject: [PATCH 020/130] =?UTF-8?q?2023/09/15=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typedarray/findlastindex/index.md | 71 +++++-------------- 1 file changed, 19 insertions(+), 52 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/findlastindex/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/findlastindex/index.md index 63c1c11a1c00ba..686f9e5d08b668 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/findlastindex/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/findlastindex/index.md @@ -2,87 +2,49 @@ title: TypedArray.prototype.findLastIndex() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/findLastIndex l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: d9e66eca59d82c65166c65e7946332650da8f48f --- {{JSRef}} -**`findLastIndex()`** メソッドは、[型付き配列](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)を逆順で反復処理し、指定したテスト関数を満たす最初の要素の添字を返します。 -テスト関数を満たす値がなかった場合は、-1 を返します。 - -{{jsxref("TypedArray.findLast()", "findLast()")}} メソッドも参照してください。こちらは見つかった要素の添字ではなく値を返します。 +**`findLastIndex()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、型付き配列を逆順で反復処理し、指定したテスト関数を満たす最初の要素のインデックスを返します。テスト関数を満たす値がなかった場合は、-1 を返します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.findLastIndex()")}} と同じです。 {{EmbedInteractiveExample("pages/js/typedarray-findlastindex.html")}} ## 構文 ```js-nolint -// アロー関数 -findLastIndex((element) => { /* ... */ } ) -findLastIndex((element, index) => { /* ... */ } ) -findLastIndex((element, index, array) => { /* ... */ } ) - -// コールバック関数 findLastIndex(callbackFn) findLastIndex(callbackFn, thisArg) - -// インラインコールバック関数 -findLastIndex(function(element) { /* ... */ }) -findLastIndex(function(element, index) { /* ... */ }) -findLastIndex(function(element, index, array){ /* ... */ }) -findLastIndex(function(element, index, array) { /* ... */ }, thisArg) ``` ### 引数 - `callbackFn` - - - : 型付き配列の要素に対するテストに使用する関数です。 - - この関数は以下の引数で呼び出されます。 - + - : 配列のそれぞれの要素に対して実行する関数です。要素がテストに合格した場合は[真値](/ja/docs/Glossary/Truthy)を返し、そうでなければ[偽値](/ja/docs/Glossary/Falsy)を返す必要があります。この関数は以下の引数で呼び出されます。 - `element` - - : 型付き配列内で処理されている現在の要素。 + - : 現在処理されている型付き配列の要素です。 - `index` - - : 型付き配列内で処理されている現在の要素の添字(位置)。 + - : 現在処理されている型付き配列の要素の添字です。 - `array` - - : `findLastIndex()` が呼び出されている型付き配列。 - - コールバック関数は、適切な要素が見つかった際には[真値](/ja/docs/Glossary/Truthy)を返す必要があります。 - この要素の添字が `findLastIndex()` から返されます。 - + - : `findLastIndex()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} - - : オプション。 `callbackFn` を実行するときに {{jsxref("Operators/this", "this")}} として使用する値。 + - : `callbackFn` を実行する際に `this` として使用する値。[反復処理メソッド](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array#反復処理メソッド)を参照してください。 ### 返値 -テストに合格した要素のうち、配列の最後(最も大きな添字)の要素の添字。 +テストに合格した要素のうち、配列の最後(最も大きなインデックス)の要素のインデックス。 一致する要素が見つからなかった場合に -1 を返します。 ## 解説 -`findLastIndex()` メソッドは、`callbackFn` が[真値](/ja/docs/Glossary/Truthy)を返すまで、型付き配列の各要素に対して、添字の降順に 1 回ずつ `callbackFn` 関数を実行します。 -`findLastIndex()` はその要素の添字を返し、配列のイテレーターを反復処理するのを止めます。 -もし `callbackFn` が真値を返さなかった場合、 `findLastIndex()` は {{jsxref("undefined")}} を返します。 - -`callbackFn` は、要素の値、要素の添字、走査されている型付き配列の 3 つの引数で呼び出されます。 - -`thisArg` 引数が `findLastIndex()` に指定された場合、それが `callbackFn` を呼び出すたびに `this` として使用されます。 -指定されなかった場合は、{{jsxref("undefined")}}が使用されます。 - -`findLastIndex()` メソッドは呼び出された型付き配列を変更しませんが、`callbackFn` に指定された関数からは変更することができます。 - -`findLastIndex()` が処理する要素の範囲は、`callbackFn` が最初に呼び出される前に設定されています。 -`findLastIndex()` の呼び出しを始めた後に型付き配列に追加された要素は、`callbackFn` が処理する対象にはなりません。 -型付き配列に存在する未処理の要素が `callbackFn` によって変更された場合、処理する `callbackFn` に渡されるその値は、`findLastIndex()` がその要素の要素を処理した時点の値になります。 - -> **警告:** 上記のように変更を同時進行で行うと、理解しにくいコードになることが多いので、(特別な場合を除き)一般的には避けるべきです。 +詳細については、 {{jsxref("Array.prototype.findLastIndex()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 ### 型付き配列から素数の添字を探す -以下の例では、配列の中で素数である最後の要素の添字を探します(素数がない場合は `-1` を返します)。 +以下の例では、配列の中で素数である最後の要素のインデックスを探します。素数がない場合は `-1` を返します。 ```js function isPrime(element) { @@ -99,10 +61,10 @@ function isPrime(element) { let uint8 = new Uint8Array([4, 6, 8, 12]); console.log(uint8.findLastIndex(isPrime)); -// -1 (no primes in array) +// -1 (配列に素数がない) uint8 = new Uint8Array([4, 5, 7, 8, 9, 11, 12]); console.log(uint8.findLastIndex(isPrime)); -// 11 +// 5 ``` ## 仕様書 @@ -115,7 +77,12 @@ console.log(uint8.findLastIndex(isPrime)); ## 関連情報 -- [`TypedArray.prototype.findLastIndex` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) -- {{jsxref("TypedArray.prototype.findLast()")}} +- [`TypedArray.prototype.findLastIndex` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#array-find-from-last) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} +- {{jsxref("TypedArray.prototype.find()")}} - {{jsxref("TypedArray.prototype.findIndex()")}} +- {{jsxref("TypedArray.prototype.findLast()")}} - {{jsxref("TypedArray.prototype.indexOf()")}} +- {{jsxref("TypedArray.prototype.lastIndexOf()")}} +- {{jsxref("Array.prototype.findLastIndex()")}} From 9921b10861ed6713c82f7d757a8dc6e1902df16e Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 17:11:51 +0900 Subject: [PATCH 021/130] =?UTF-8?q?2023/09/07=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typedarray/foreach/index.md | 53 ++++++------------- 1 file changed, 15 insertions(+), 38 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/foreach/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/foreach/index.md index 3f722853eec903..b67d81e2d1fc01 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/foreach/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/foreach/index.md @@ -2,71 +2,42 @@ title: TypedArray.prototype.forEach() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/forEach l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: e01fd6206ce2fad2fe09a485bb2d3ceda53a62de --- {{JSRef}} -**`forEach()`** メソッドは、配列の要素ごとに一度与えられた関数を実行します。このメソッドは {{jsxref("Array.prototype.forEach()")}} と同じアルゴリズムを持っています。ここで _TypedArray_ は[型付き配列型](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)の一つです。 +**`forEach()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、型付き配列の要素ごとに一度与えられた関数を実行します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.forEach()")}} と同じです。 {{EmbedInteractiveExample("pages/js/typedarray-foreach.html")}} ## 構文 ```js-nolint -// アロー関数 -forEach((element) => { /* ... */ } ) -forEach((element, index) => { /* ... */ } ) -forEach((element, index, array) => { /* ... */ } ) - -// コールバック関数 forEach(callbackFn) forEach(callbackFn, thisArg) - -// インラインコールバック関数 -forEach(function(element) { /* ... */ }) -forEach(function(element, index) { /* ... */ }) -forEach(function(element, index, array){ /* ... */ }) -forEach(function(element, index, array) { /* ... */ }, thisArg) ``` ### 引数 - `callbackFn` - - - : 新しい型付き配列の要素を生成する関数。 - - 関数は以下の引数で呼び出されます。 - + - : 型付き配列のそれぞれの要素に対して実行する関数です。返値は破棄されます。この関数は以下の引数で呼び出されます。 - `element` - - : 型付き配列内で処理される現在の要素。 + - : 現在処理されている型付き配列の要素です。 - `index` - - : 配列内で処理される現在の要素の添字。 + - : 現在処理されている型付き配列の要素のインデックスです。 - `array` - - : `forEach()` が呼び出される配列。 - + - : `forEach()` が呼び出されている型付き配列です。 - `thisArg` {{optional_inline}} - - : `callbackFn` を実行するとき `this` として使用する値。 + - : `callbackFn` を実行する際に `this` として使用する値。[反復処理メソッド](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array#反復処理メソッド)を参照してください。 ### 返値 -{{jsxref("undefined")}} です。 +なし ({{jsxref("undefined")}})。 ## 解説 -`forEach()` メソッドは与えられた `callbackFn` を、型付き配列内に存在するそれぞれの要素に一度ずつ昇順に実行します。削除されたり、省略されたりしたインデックスに対しては呼び出されません。ただし、存在していて {{jsxref("undefined")}} の値を持つ要素に対しては実行されます。 - -`callbackFn` は次の **3 つの引数**で呼び出されます。 - -- **要素の値** -- **要素の添字** -- **走査中の型付き配列** - -`thisArg` 引数が `forEach()` に与えられた場合は、 `callbackFn` の呼び出し時にそのオブジェクトが `this` の値として使用されます。与えられなかった場合は、 {{jsxref("undefined")}} が `this` の値として使用するために渡されます。 `callbackFn` によって最終的に観測可能な `this` 値は[関数から見える `this` を特定する一般規則](/ja/docs/Web/JavaScript/Reference/Operators/this)に従います。 - -`forEach()` によって処理される要素の範囲は `callbackFn` の最初の呼び出し前に設定されます。 `forEach()` の呼び出しが始まったあとで型付き配列に追加される要素は、 `callbackFn` によって処理されます。型付き配列内に存在している要素の値が変更されたら、 `callbackFn` に渡される値は、`forEach()`メソッドが処理する直前の値です。つまり、処理される前に削除されている要素は処理されません。 - -`forEach()` は型付き配列の各要素ごとに一度 `callbackFn` 関数を実行します。 {{jsxref("TypedArray.prototype.every()", "every()")}} や {{jsxref("TypedArray.prototype.some()", "some()")}} とは異なり、常に、{{jsxref("undefined")}} 値を返します。 +詳細については、 {{jsxref("Array.prototype.forEach()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 @@ -98,7 +69,13 @@ new Uint8Array([0, 1, 2, 3]).forEach(logArrayElements); ## 関連情報 - [`TypedArray.prototype.forEach` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} +- {{jsxref("TypedArray.prototype.find()")}} - {{jsxref("TypedArray.prototype.map()")}} +- {{jsxref("TypedArray.prototype.filter()")}} - {{jsxref("TypedArray.prototype.every()")}} - {{jsxref("TypedArray.prototype.some()")}} - {{jsxref("Array.prototype.forEach()")}} +- {{jsxref("Map.prototype.forEach()")}} +- {{jsxref("Set.prototype.forEach()")}} From 7dec1460b0edfbc8a2cf15be80d742c4d02f9d20 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 17:24:43 +0900 Subject: [PATCH 022/130] =?UTF-8?q?2023/09/12=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/typedarray/from/index.md | 77 +++++++++++-------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/from/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/from/index.md index 2cee02ea561a7c..15629e9d329357 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/from/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/from/index.md @@ -2,31 +2,20 @@ title: TypedArray.from() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/from l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: c2445ce1dc3a0170e2fbfdbee10e18a7455c2282 --- {{JSRef}} **`TypedArray.from()`** メソッドは、配列風オブジェクトや反復可能オブジェクトから新しい[型付き配列](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)を生成します。このメソッドは {{jsxref("Array.from()")}} とほぼ同じです。 -{{EmbedInteractiveExample("pages/js/typedarray-from.html","shorter")}} +{{EmbedInteractiveExample("pages/js/typedarray-from.html", "shorter")}} ## 構文 ```js-nolint -// アロー関数 -TypedArray.from(arrayLike, (element) => { /* ... */ } ) -TypedArray.from(arrayLike, (element, index) => { /* ... */ } ) - -// マッピング関数 TypedArray.from(arrayLike, mapFn) TypedArray.from(arrayLike, mapFn, thisArg) - -// インラインマッピング関数 -TypedArray.from(arrayLike, function mapFn(element) { /* ... */ }) -TypedArray.from(arrayLike, function mapFn(element, index) { /* ... */ }) -TypedArray.from(arrayLike, function mapFn(element) { /* ... */ }, thisArg) -TypedArray.from(arrayLike, function mapFn(element, index) { /* ... */ }, thisArg) ``` ここで `TypedArray` は次のいずれかです。 @@ -46,37 +35,30 @@ TypedArray.from(arrayLike, function mapFn(element, index) { /* ... */ }, thisArg ### 引数 - `arrayLike` - - : 型付き配列に変換する配列風オブジェクトまたは反復可能オブジェクトです。 + - : 型付き配列に変換する反復可能または配列風オブジェクトです。 - `mapFn` {{optional_inline}} - - : 型付き配列のすべての要素に適用されるマッピング関数。 + - : 型付き配列の各要素に対して呼び出す関数です。指定された場合、配列に追加するすべての値は最初にこの関数に渡され、代わりに `mapFn` の返値が型付き配列に追加されます。この関数は以下の引数で呼び出されます。 + - `element` + - : 現在処理されている型付き配列の要素です。 + - `index` + - : 現在処理されている型付き配列の要素のインデックスです。 - `thisArg` {{optional_inline}} - - : `mapFn` を実行するときに `this` として使う値。 + - : `mapFn` を実行するときに `this` として使う値です。 ### 返値 -新しい {{jsxref("TypedArray")}} インスタンス。 +新しい {{jsxref("TypedArray")}} インスタンスです。 ## 解説 -`TypedArray.from()` によって下記から型付き配列を生成できます: - -- 配列風オブジェクト (`length` プロパティと、番号の振られた要素をもつオブジェクト) -- [反復可能オブジェクト](/ja/docs/Web/JavaScript/Reference/Iteration_protocols) ({{jsxref("Map")}} や {{jsxref("Set")}} のように要素が取得できるオブジェクト) - -`TypedArray.from()` は省略可能な引数 `mapFn` を持ち、これは生成中の型付き配列 (またはサブクラスのオブジェクト) のそれぞれの要素に対して {{jsxref("Array.prototype.map", "map()")}} 関数を実行することができます。すなわち、以下のものと同等です。 +詳しくは {{jsxref("Array.from()")}} を娯楽んだ歳。 -- `TypedArray.from(obj, mapFn, thisArg)` -- `TypedArray.from(Array.prototype.map.call(obj, mapFn, thisArg))`. +{{jsxref("Array.from()")}} と `TypedArray.from()` の間には微妙な違いがあります(メモ: 下記で言及する `this` 値は `TypedArray.from()` が呼び出された `this` 値であり、 `mapFn` を呼び出すために用いた `thisArg` 引数ではありません)。 -`from()` メソッドの `length` プロパティは `1` です。 - -### Array.from() との違い - -{{jsxref("Array.from()")}} と `TypedArray.from()` の間には、いくつかの微妙な違いがあります。 - -- `TypedArray.from()` に渡された `thisArg` の値がコンストラクターではなかった場合、 `TypedArray.from()` で {{jsxref("TypeError")}} が発生します。これは `Array.from()` が既定で新しい {{jsxref("Array")}} を生成するためです。 +- `TypedArray.from()` に渡された `this` の値がコンストラクターではなかった場合、 `TypedArray.from()` で {{jsxref("TypeError")}} が発生します。それに対して `Array.from()` が既定で新しい {{jsxref("Array")}} を生成します。 +- `this` で構築されるオブジェクトは `TypedArray` インスタンスでなければなりませんが、 `Array.from()` は `this` の値を任意のオブジェクトに構築することができます。 +- 引数 `source` がイテレーターの場合、 `TypedArray.from()` は最初にイテレーターからすべての値を収集し、次にそのカウントを使用して `this` のインスタンスを作成し、最後にそのインスタンスに値を設定します。 `Array.from()` はイテレーターから値を受け取るとそれぞれの値を設定し、最後に `length` を設定します。 - `TypedArray.from()` は `[[Set]]` を使用します。 `Array.from()` は `[[DefineOwnProperty]]` を使用します。 従って {{jsxref("Proxy")}} オブジェクトを使っている場合は、新しい要素を追加するときに [`handler.set()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set) が [`handler.defineProperty()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty) の代わりに呼び出されます。 -- `arrayLike` 引数がイテレーターであった場合、 `TypedArray.from()` は最初にイテレーターからすべての値を集め、その数の大きさを持つ `thisArg` のインスタンスを生成し、そのインスタンスに値を設定します。 `Array.from()` はイテレーターから取得して各値を設定し、最後に `length` を設定します。 - `Array.from()` がイテレーターではない配列風オブジェクトを受け取ったときは、穴をそのまま残します。 `TypedArray.from()` は必ず密配列 (dense array) を生成します。 ## 例 @@ -112,6 +94,31 @@ Uint8Array.from({ length: 5 }, (v, k) => k); // Uint8Array [ 0, 1, 2, 3, 4 ] ``` +### TypedArray 以外のコンストラクターに対する from() の呼び出し + +`from()` の `this` 値は `TypedArray` インスタンスを返すコンストラクターでなければなりません。 + +```js +function NotArray(len) { + console.log("NotArray called with length", len); +} + +Int8Array.from.call({}, []); // TypeError: # is not a constructor +Int8Array.from.call(NotArray, []); +// NotArray called with length 0 +// TypeError: Method %TypedArray%.from called on incompatible receiver # +``` + +```js +function NotArray2(len) { + console.log("NotArray2 called with length", len); + return new Uint8Array(len); +} +console.log(Int8Array.from.call(NotArray2, [1, 2, 3])); +// NotArray2 called with length 3 +// Uint8Array(3) [ 1, 2, 3 ] +``` + ## 仕様書 {{Specifications}} @@ -123,6 +130,8 @@ Uint8Array.from({ length: 5 }, (v, k) => k); ## 関連情報 - [`TypedArray.from` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} - {{jsxref("TypedArray.of()")}} +- {{jsxref("TypedArray.prototype.map()")}} - {{jsxref("Array.from()")}} -- {{jsxref("Array.prototype.map()")}} From 574b0c2e5344557d5837e4c9f40d8d821631a09d Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 17:29:37 +0900 Subject: [PATCH 023/130] =?UTF-8?q?=E3=80=8C=E3=82=A4=E3=83=B3=E3=83=87?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=B9=E3=80=8D=E3=81=AE=E7=94=A8=E8=AA=9E?= =?UTF-8?q?=E3=82=92=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reference/global_objects/typedarray/filter/index.md | 2 +- .../reference/global_objects/typedarray/find/index.md | 2 +- .../reference/global_objects/typedarray/findindex/index.md | 2 +- .../reference/global_objects/typedarray/findlast/index.md | 6 +++--- .../global_objects/typedarray/findlastindex/index.md | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.md index 407d9a226a196b..3d11e9b955a41d 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/filter/index.md @@ -25,7 +25,7 @@ filter(callbackFn, thisArg) - `element` - : 現在処理されている型付き配列の要素です。 - `index` - - : 現在処理されている型付き配列の要素の添字です。 + - : 現在処理されている型付き配列の要素のインデックスです。 - `array` - : `filter()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/find/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/find/index.md index 46003d46b47fcc..8fc41333b93b37 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/find/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/find/index.md @@ -25,7 +25,7 @@ find(callbackFn, thisArg) - `element` - : 現在処理されている型付き配列の要素です。 - `index` - - : 現在処理されている型付き配列の要素の添字です。 + - : 現在処理されている型付き配列の要素のインデックスです。 - `array` - : `find()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.md index 9d4401b1c33aa0..b7706d0dd65c75 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/findindex/index.md @@ -25,7 +25,7 @@ findIndex(callbackFn, thisArg) - `element` - : 現在処理されている型付き配列の要素です。 - `index` - - : 現在処理されている型付き配列の要素の添字です。 + - : 現在処理されている型付き配列の要素のインデックスです。 - `array` - : `findIndex()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/findlast/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/findlast/index.md index a807762e13277b..f3744b4a9b9023 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/findlast/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/findlast/index.md @@ -25,7 +25,7 @@ findLast(callbackFn, thisArg) - `element` - : 現在処理されている型付き配列の要素です。 - `index` - - : 現在処理されている型付き配列の要素の添字です。 + - : 現在処理されている型付き配列の要素のインデックスです。 - `array` - : `findLast()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} @@ -41,7 +41,7 @@ findLast(callbackFn, thisArg) ## 例 -### 型付き配列から素数の添字を探す +### 型付き配列から素数のインデックスを探す 以下の例では、型付き配列から素数である値のうち、最後の値を返します(素数がない場合は {{jsxref("undefined")}} を返します)。 @@ -69,7 +69,7 @@ console.log(uint8.findLast(isPrime)); // 11 以下は、すべての要素が処理され、コールバック値に渡された値が処理時の値であることを示す例です。 ```js -// 添字 2, 3, 4 に要素のない配列を宣言。 +// インデックス 2, 3, 4 に要素のない配列を宣言。 // 欠落した要素はゼロに初期化されます。 const uint8 = new Uint8Array([0, 1, , , , 5, 6]); diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/findlastindex/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/findlastindex/index.md index 686f9e5d08b668..6956689e24d9f2 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/findlastindex/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/findlastindex/index.md @@ -25,7 +25,7 @@ findLastIndex(callbackFn, thisArg) - `element` - : 現在処理されている型付き配列の要素です。 - `index` - - : 現在処理されている型付き配列の要素の添字です。 + - : 現在処理されている型付き配列の要素のインデックスです。 - `array` - : `findLastIndex()` が実行されている型付き配列です。 - `thisArg` {{optional_inline}} @@ -42,7 +42,7 @@ findLastIndex(callbackFn, thisArg) ## 例 -### 型付き配列から素数の添字を探す +### 型付き配列から素数のインデックスを探す 以下の例では、配列の中で素数である最後の要素のインデックスを探します。素数がない場合は `-1` を返します。 From c81c755e5178cf6a5011ea0a0ef2f03c53d4a70c Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 21:52:10 +0900 Subject: [PATCH 024/130] =?UTF-8?q?2023/09/15=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typedarray/includes/index.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/includes/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/includes/index.md index 31860907fc4a4f..61872ee18ec68f 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/includes/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/includes/index.md @@ -2,12 +2,12 @@ title: TypedArray.prototype.includes() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/includes l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: d9e66eca59d82c65166c65e7946332650da8f48f --- {{JSRef}} -**`includes()`** メソッドは、型付き配列が特定の要素を含んでいるかどうかを判断し、その結果に応じて `true` か `false` を返します。このメソッドは {{jsxref("Array.prototype.includes()")}} と同じアルゴリズムです。 _TypedArray_ は、ここでは [型付き配列型](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)のうちの一つです。 +**`includes()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、型付き配列の項目内に特定の値が含まれているかどうかを判断し、その結果に応じて `true` か `false` を返します。このメソッドは {{jsxref("Array.prototype.includes()")}} と同じアルゴリズムです。 {{EmbedInteractiveExample("pages/js/typedarray-includes.html")}} @@ -23,11 +23,15 @@ includes(searchElement, fromIndex) - `searchElement` - : 探す対象の要素 - `fromIndex` {{optional_inline}} - - : オプション。`searchElement`を探し始める配列内の位置。既定では 0 です。 + - : 検索を始める位置を示すゼロ基点のインデックスで、[整数に変換されます](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#整数への変換)。 ### 返値 -論理値です。 +論理値で、型付き配列(指定する場合はインデックス `fromIndex` で示される型付き配列の一部)内で値 `searchElement` が見つかった場合に `true` なります。 + +## 解説 + +詳細については、 {{jsxref("Array.prototype.includes()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 @@ -56,6 +60,10 @@ new Float64Array([NaN]).includes(NaN); // true; ## 関連情報 - [`TypedArray.prototype.includes` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} +- {{jsxref("TypedArray.prototype.indexOf()")}} +- {{jsxref("TypedArray.prototype.find()")}} +- {{jsxref("TypedArray.prototype.findIndex()")}} - {{jsxref("Array.prototype.includes()")}} - {{jsxref("String.prototype.includes()")}} -- {{jsxref("TypedArray.prototype.indexOf()")}} From f4732d0f772314f440f15a9b4ec3a0937d73844a Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 11 Nov 2023 21:58:12 +0900 Subject: [PATCH 025/130] =?UTF-8?q?2023/09/15=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/typedarray/indexof/index.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/indexof/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/indexof/index.md index 55fad6bdebd700..147a6711481fc9 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/indexof/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/indexof/index.md @@ -2,12 +2,12 @@ title: TypedArray.prototype.indexOf() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: d9e66eca59d82c65166c65e7946332650da8f48f --- {{JSRef}} -**`indexOf()`** メソッドは、指定された要素が型付き配列内で見つかった最初の添字を返し、存在しなければ -1 を返します。このメソッドは {{jsxref("Array.prototype.indexOf()")}} と同じアルゴリズムです。 _TypedArray_ は、ここでは[型付き配列型](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)のうちの一つです。 +**`indexOf()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、指定された要素が型付き配列内で見つかった最初のインデックスを返し、存在しなければ -1 を返します。このメソッドは {{jsxref("Array.prototype.indexOf()")}} と同じアルゴリズムです。 {{EmbedInteractiveExample("pages/js/typedarray-indexof.html")}} @@ -23,19 +23,19 @@ indexOf(searchElement, fromIndex) - `searchElement` - : 型付き配列内を検索する要素。 - `fromIndex` {{optional_inline}} - - : 検索開始位置の添字。添字が型付き配列の長さ以上なら、 -1 が返り、これは型付き配列が検索されなかったことを意味します。与えられた添字が負の数の場合、型付き配列の最後からのオフセット値として扱われます。注意: 指定された添字が負の数であっても、型付き配列は前から後ろに向けて検索されます。計算された添字が 0 未満になった場合は、型付き配列の全体が検索されます。既定値: 0 (型付き配列全体が検索されます)。 + - : 検索を始める位置を示すゼロ基点のインデックスで、[整数に変換されます](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#整数への変換)。 ### 返値 -配列内の要素の最初の添字です。見つからなかったら `-1` になります。 +型付き配列内の最初の `searchElement` のインデックスです。見つからなかったら `-1` になります。 ## 解説 -`indexOf` は `searchElement` と型付き配列の要素を、[厳密等価](/ja/docs/Web/JavaScript/Equality_comparisons_and_sameness#_による厳密な等価性) (===、イコール 3 つの演算子と同じ方法) を使用して比較します。 +詳細については、 {{jsxref("Array.prototype.indexOf()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 -### indexOf の使用 +### indexOf() の使用 ```js const uint8 = new Uint8Array([2, 5, 9]); @@ -57,5 +57,10 @@ uint8.indexOf(2, -3); // 0 ## 関連情報 - [`TypedArray.prototype.indexOf` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} +- {{jsxref("TypedArray.prototype.findIndex()")}} +- {{jsxref("TypedArray.prototype.findLastIndex()")}} - {{jsxref("TypedArray.prototype.lastIndexOf()")}} - {{jsxref("Array.prototype.indexOf()")}} +- {{jsxref("String.prototype.indexOf()")}} From 8daf1da02dcc3a96dd7e81081ec4639ab5c2511c Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 12 Nov 2023 00:26:38 +0900 Subject: [PATCH 026/130] =?UTF-8?q?2023/09/15=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/typedarray/join/index.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/join/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/join/index.md index 6ba5aa519fbdae..4a6872b7c958f1 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/join/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/join/index.md @@ -2,12 +2,12 @@ title: TypedArray.prototype.join() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/join l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: d9e66eca59d82c65166c65e7946332650da8f48f --- {{JSRef}} -**`join()`** メソッドは、配列のすべての要素を 1 本の文字列に結合します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.join()")}} と同じです。ここで _TypedArray_ は、[型付き配列型](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)のうちの 1 つです。 +**`join()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、この型付き配列のすべての要素を、カンマまたは指定する区切り文字で連結して新しい文字列を作成して返します。型付き配列に 1 つの項目しかない場合、その項目は区切り文字を使用せずに返します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.join()")}} と同じです。 {{EmbedInteractiveExample("pages/js/typedarray-join.html")}} @@ -25,7 +25,11 @@ join(separator) ### 返値 -配列のすべての要素が結合された文字列です。 +型付き配列の要素をすべて連結した文字列です。 `array.length` が `0` の場合は空文字列を返します。 + +## 解説 + +詳細については、 {{jsxref("Array.prototype.join()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 @@ -49,5 +53,8 @@ uint8.join(""); // '123' ## 関連情報 - [`TypedArray.prototype.join` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド - {{jsxref("TypedArray")}} +- {{jsxref("TypedArray.prototype.toString()")}} - {{jsxref("Array.prototype.join()")}} +- {{jsxref("String.prototype.split()")}} From a292d6a6ca50c5c844a558fc1b704dffd3c490f7 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 12 Nov 2023 00:44:12 +0900 Subject: [PATCH 027/130] =?UTF-8?q?2023/09/07=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/typedarray/keys/index.md | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/keys/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/keys/index.md index 08967301d497ac..72b581fff0e7c4 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/keys/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/keys/index.md @@ -2,12 +2,12 @@ title: TypedArray.prototype.keys() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/keys l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: e01fd6206ce2fad2fe09a485bb2d3ceda53a62de --- {{JSRef}} -**`keys()`** メソッドは、配列内の各添字に対するキーを含む新しい配列イテレーターオブジェクトを返します。 +**`keys()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、配列内の各インデックスに対するキーを含む新しい[配列イテレーター](/ja/docs/Web/JavaScript/Reference/Global_Objects/Iterator)オブジェクトを返します。このメソッドのアルゴリズムは {{jsxref("Array.prototype.keys()")}} と同じです。 {{EmbedInteractiveExample("pages/js/typedarray-keys.html")}} @@ -17,9 +17,17 @@ l10n: keys() ``` +### 引数 + +なし。 + ### 返値 -新しい配列イテレーターオブジェクトです。 +新しい[配列イテレーターオブジェクト](/ja/docs/Web/JavaScript/Reference/Global_Objects/Iterator)です。 + +## 解説 + +詳細については、 {{jsxref("Array.prototype.keys()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 @@ -56,10 +64,10 @@ console.log(arrKeys.next().value); // 4 ## 関連情報 - [`TypedArray.prototype.keys` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) -- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Typed_arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays) - {{jsxref("TypedArray")}} - {{jsxref("TypedArray.prototype.entries()")}} - {{jsxref("TypedArray.prototype.values()")}} -- {{jsxref("TypedArray.prototype.@@iterator()", "TypedArray.prototype[@@iterator]()")}} -- [for...of](/ja/docs/Web/JavaScript/Reference/Statements/for...of) +- [`TypedArray.prototype[@@iterator]()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator) +- {{jsxref("Array.prototype.keys()")}} - [反復処理プロトコル](/ja/docs/Web/JavaScript/Reference/Iteration_protocols) From 4bccad696a079a8a59d3405ea4774a4885e8974d Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 12 Nov 2023 00:48:23 +0900 Subject: [PATCH 028/130] =?UTF-8?q?2023/09/15=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typedarray/lastindexof/index.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/lastindexof/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/lastindexof/index.md index c6861ad34ccdaa..31c0a4e79b5b75 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/lastindexof/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/lastindexof/index.md @@ -2,12 +2,12 @@ title: TypedArray.prototype.lastIndexOf() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: d9e66eca59d82c65166c65e7946332650da8f48f --- {{JSRef}} -**`lastIndexOf()`** メソッドは、指定された要素が型付き配列内で見つかった最後の位置の添字を返し、存在しなければ -1 を返します。型付き配列は `fromIndex` で始まる位置から逆方向に検索されます。 このメソッドは {{jsxref("Array.prototype.lastIndexOf()")}} と同じアルゴリズムです。 _TypedArray_ は、ここでは[型付き配列型](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)のうちの一つです。 +**`lastIndexOf()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、指定された要素が型付き配列内で見つかった最後の位置のインデックスを返し、存在しなければ -1 を返します。型付き配列は `fromIndex` で始まる位置から逆方向に検索されます。 このメソッドは {{jsxref("Array.prototype.lastIndexOf()")}} と同じアルゴリズムです。 {{EmbedInteractiveExample("pages/js/typedarray-lastindexof.html")}} @@ -22,20 +22,20 @@ lastIndexOf(searchElement, fromIndex) - `searchElement` - : 型付き配列内で検索する要素。 -- `fromIndex` - - : オプション。逆方向に検索を開始する位置の添字。既定値は型付き配列の長さで、すなわち型付き配列全体が検索されます。添字が型付き配列の長さ以上の場合、型付き配列全体が検索されます。添字が負の数の場合、型付き配列の末尾からのオフセットとして扱われます。添字が負の数であっても、型付き配列は末尾から先頭に向けて検索されます。計算された添字が 0 未満になった場合は、 -1 が返され、すなわち型付き配列は検索されません。 +- `fromIndex` {{optional_inline}} + - : 検索を始める位置を示すゼロ基点のインデックスで、[整数に変換されます](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#整数への変換)。 ### 返値 -配列内の要素の最後の添字です。見つからなかったら `-1` になります。 +型付き配列内における最後の `searchElement` のインデックスです。見つからなかったら `-1` になります。 ## 解説 -`lastIndexOf` は `searchElement` と型付き配列の要素を、[厳密等価](/ja/docs/Web/JavaScript/Equality_comparisons_and_sameness#_による厳密な等価性) (===、イコール 3 つの演算子と同じ方法) を使用して比較します。 +詳細については、 {{jsxref("Array.prototype.lastIndexOf()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 -### lastIndexOf の使用 +### lastIndexOf() の使用 ```js const uint8 = new Uint8Array([2, 5, 9, 2]); @@ -58,5 +58,10 @@ uint8.lastIndexOf(2, -1); // 3 ## 関連情報 - [`TypedArray.prototype.lastIndexOf` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays) +- {{jsxref("TypedArray")}} +- {{jsxref("TypedArray.prototype.findIndex()")}} +- {{jsxref("TypedArray.prototype.findLastIndex()")}} - {{jsxref("TypedArray.prototype.indexOf()")}} - {{jsxref("Array.prototype.lastIndexOf()")}} +- {{jsxref("String.prototype.lastIndexOf()")}} From 0c31eacce365af74a1cd118ac071c3b4026cecc6 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 12 Nov 2023 00:57:28 +0900 Subject: [PATCH 029/130] =?UTF-8?q?2023/09/07=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/typedarray/map/index.md | 52 ++++++------------- 1 file changed, 15 insertions(+), 37 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/map/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/map/index.md index b95a37b5c5fd0a..2fd0e6d7504140 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/map/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/map/index.md @@ -2,69 +2,43 @@ title: TypedArray.prototype.map() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/map l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: e01fd6206ce2fad2fe09a485bb2d3ceda53a62de --- {{JSRef}} -**`map()`** メソッドは、与えられた関数を型付き配列のすべての要素に対して呼び出し、その結果からなる新しい配列を生成します。このメソッドは、{{jsxref("Array.prototype.map()")}} と同じアルゴリズムです。 _TypedArray_ は、ここでは[型付き配列型](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)の一つです。 +**`map()`** は {{jsxref("TypedArray")}} インスタンスのメソッドで、与えられた関数を呼び出された型付き配列のすべての要素に対して呼び出し、その結果からなる新しい型付き配列を生成します。このメソッドは、 {{jsxref("Array.prototype.map()")}} と同じアルゴリズムです。 {{EmbedInteractiveExample("pages/js/typedarray-map.html", "shorter")}} ## 構文 ```js-nolint -// アロー関数 -map((currentValue) => { /* ... */ } ) -map((currentValue, index) => { /* ... */ } ) -map((currentValue, index, array) => { /* ... */ } ) - -// コールバック関数 map(callbackFn) map(callbackFn, thisArg) - -// インラインコールバック関数 -map(function(currentValue) { /* ... */ }) -map(function(currentValue, index) { /* ... */ }) -map(function(currentValue, index, array){ /* ... */ }) -map(function(currentValue, index, array) { /* ... */ }, thisArg) ``` ### 引数 - `callbackFn` - - - : 新しい型付き配列の要素を生み出すコールバック関数です。 - - この関数は、以下の引数で呼び出されます。 - - - `currentValue` - - : 現在処理中の要素の値です。 + - : 型付き配列のそれぞれの要素に対して実行する関数。その返値は、新しい型付き配列の単一の要素として追加されます。この関数は以下の引数で呼び出されます。 + - `element` + - : 型付き配列で現在処理されている要素です。 - `index` - - : 現在処理中の要素の型付き配列内における添字です。 + - : 現在処理中の要素の型付き配列内におけるインデックスです。 - `array` - - : `map()` が実行されている型付き配列です。 + - : `map()` が呼び出されてた型付き配列です。 - `thisArg` {{optional_inline}} - - : `callbackFn` を実行するときに `this` として使う値です。 + - : `callbackFn` を実行する際に `this` として使用する値。[反復処理メソッド](/ja/docs/Web/JavaScript/Reference/Global_Objects/Array#反復処理メソッド)を参照してください。 ### 返値 -新しい型付き配列です。 +各要素がコールバック関数の結果である新しい型付き配列です。 ## 解説 -`map()` は、与えられたコールバック関数 (`callbackFn`) を型付き配列の各要素に対して、順番通りに一度ずつ呼び出し、その結果から新しい配列を生成します。 - -`callbackFn` は型付き配列のインデックスのうち、値が割り当てられているものにのみ呼び出しす。 `undefined` であるインデックス、すなわち削除されたか値が割り当てられたことがないインデックスには呼び出しません。 - -`callbackFn` は、要素の値、要素の添字、走査中の型付き配列オブジェクトという 3 つの引数をともなって呼び出されます。 - -`thisArg` 引数が `map()` に与えられた場合は、それが `callbackFn` の呼び出し時に渡され、 `this` として使用されます。そうでない場合は、 {{jsxref("undefined")}} が `this` の値として使用されます。 `callbackFn` から最終的に見える `this` の値は、[関数における通常の `this` を決定するルール](/ja/docs/Web/JavaScript/Reference/Operators/this)に従って決まります。 - -`map()` は呼び出された型付き配列を変化させません(ただし、 `callbackFn` が呼び出されたあ愛は、変更する可能性はあります)。 - -`map()` によって処理される要素の範囲は、 `callbackFn` が最初に呼び出される前に設定されます。 `map()` の呼び出しが開始された後に追加された要素に対しては、 `callbackFn` は実行されません。既存の配列要素が変更されたり、削除された場合、 `callbackFn` に渡される値は `map()` がそれらを訪れた時点での値になり、削除された要素を訪問することはありません。 +詳細については、 {{jsxref("Array.prototype.map()")}} をご覧ください。このメソッドは汎用的ではなく、型付き配列インスタンスに対してのみ呼び出すことができます。 ## 例 @@ -101,5 +75,9 @@ const doubles = numbers.map((num) => num * 2); ## 関連情報 - [`TypedArray.prototype.map` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) -- {{jsxref("TypedArray.prototype.filter()")}} +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} +- {{jsxref("TypedArray.prototype.forEach()")}} +- {{jsxref("TypedArray.from()")}} - {{jsxref("Array.prototype.map()")}} +- {{jsxref("Map")}} From 039a251fb09a4cc0d32904d8a462d0b9bc4913d3 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 12 Nov 2023 01:04:11 +0900 Subject: [PATCH 030/130] =?UTF-8?q?2023/09/12=20=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=AE=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global_objects/typedarray/of/index.md | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/of/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/of/index.md index f1952c02dde1a3..87f71340d1ff8d 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/of/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/of/index.md @@ -2,21 +2,22 @@ title: TypedArray.of() slug: Web/JavaScript/Reference/Global_Objects/TypedArray/of l10n: - sourceCommit: 194d3e00cb93a6e5ea44812548f4131cb17f0381 + sourceCommit: c2445ce1dc3a0170e2fbfdbee10e18a7455c2282 --- {{JSRef}} **`TypedArray.of()`** メソッドは、引数の変数番号から新しい[型付き配列](/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_オブジェクト)を生成します。このメソッドは {{jsxref("Array.of()")}} とほぼ同じです。 -{{EmbedInteractiveExample("pages/js/typedarray-of.html","shorter")}} +{{EmbedInteractiveExample("pages/js/typedarray-of.html", "shorter")}} ## 構文 ```js-nolint -TypedArray.of(element0) -TypedArray.of(element0, element1) -TypedArray.of(element0, element1, /* ... ,*/ elementN) +TypedArray.of() +TypedArray.of(element1) +TypedArray.of(element1, element2) +TypedArray.of(element1, element2, /* …, */ elementN) ``` ここで `TypedArray` は次のいずれかです。 @@ -35,8 +36,8 @@ TypedArray.of(element0, element1, /* ... ,*/ elementN) ### 引数 -- `elementN` - - : 型付き配列を生成するときの構成する要素。 +- `element1`, …, `elementN` + - : 型付き配列を作成するのに使われる要素です。 ### 返値 @@ -44,9 +45,9 @@ TypedArray.of(element0, element1, /* ... ,*/ elementN) ## 解説 -{{jsxref("Array.of()")}} と `TypedArray.of()` との間にいくつかの微妙な違いがあります。 +詳細については、 {{jsxref("Array.of()")}} をご覧ください。 {{jsxref("Array.of()")}} と `TypedArray.of()` との間にはいくつか微妙な違いがあります。 -- `TypedArray.of()` に渡された `this` の値がコンストラクターではなかった場合、 `TypedArray.of()` で {{jsxref("TypeError")}} が発生します。これは `Array.of()` が既定で新しい {{jsxref("Array")}} を生成するためです。 +- `TypedArray.of()` に渡された `this` の値がコンストラクターではなかった場合、 `TypedArray.of()` では {{jsxref("TypeError")}} が発生します。一方、 `Array.of()` は既定で新しい {{jsxref("Array")}} を生成します。 - `TypedArray.of()` は `[[Set]]` を使用するのに対し、 `Array.of()` は `[[DefineProperty]]` を使用します。従って {{jsxref("Proxy")}} オブジェクトを使っている場合は、新しい要素を追加するときに [`handler.set()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set) が [`handler.defineProperty()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty) の代わりに呼び出されます。 ## 例 @@ -71,5 +72,7 @@ Int16Array.of(undefined); // Int16Array [ 0 ] ## 関連情報 - [`TypedArray.of` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [JavaScript の型付き配列](/ja/docs/Web/JavaScript/Guide/Typed_arrays)ガイド +- {{jsxref("TypedArray")}} - {{jsxref("TypedArray.from()")}} - {{jsxref("Array.of()")}} From ee9eb6ddc9e8b771451d52835e4cc2a6cb12022b Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 12 Nov 2023 01:10:46 +0900 Subject: [PATCH 031/130] Update files/ja/web/javascript/reference/global_objects/typedarray/map/index.md Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../javascript/reference/global_objects/typedarray/map/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/files/ja/web/javascript/reference/global_objects/typedarray/map/index.md b/files/ja/web/javascript/reference/global_objects/typedarray/map/index.md index 2fd0e6d7504140..062ed309515bb4 100644 --- a/files/ja/web/javascript/reference/global_objects/typedarray/map/index.md +++ b/files/ja/web/javascript/reference/global_objects/typedarray/map/index.md @@ -21,6 +21,7 @@ map(callbackFn, thisArg) ### 引数 - `callbackFn` + - : 型付き配列のそれぞれの要素に対して実行する関数。その返値は、新しい型付き配列の単一の要素として追加されます。この関数は以下の引数で呼び出されます。 - `element` - : 型付き配列で現在処理されている要素です。 From 2f5f1e6251e2220d4d25a40ac644e7fdcb364712 Mon Sep 17 00:00:00 2001 From: skyclouds2001 <95597335+skyclouds2001@users.noreply.github.com> Date: Thu, 16 Nov 2023 09:16:59 +0800 Subject: [PATCH 032/130] sync Notification API (#16927) Co-authored-by: A1lo --- .../zh-cn/web/api/notifications_api/index.md | 53 +++++++++--------- .../notifications_api/notification-bubble.png | Bin 26544 -> 0 bytes 2 files changed, 25 insertions(+), 28 deletions(-) delete mode 100644 files/zh-cn/web/api/notifications_api/notification-bubble.png diff --git a/files/zh-cn/web/api/notifications_api/index.md b/files/zh-cn/web/api/notifications_api/index.md index b2f0a4b2cca3ac..b35b2905004f2a 100644 --- a/files/zh-cn/web/api/notifications_api/index.md +++ b/files/zh-cn/web/api/notifications_api/index.md @@ -3,43 +3,50 @@ title: Notifications API slug: Web/API/Notifications_API --- -{{DefaultAPISidebar("Web Notifications")}} +{{DefaultAPISidebar("Web Notifications")}}{{AvailableInWorkers}}{{securecontext_header}} -**Notifications API** 允许网页控制向最终用户显示系统通知 —这些都在顶级浏览上下文视口之外,因此即使用户已经切换标签页或移动到不同的应用程序,也可以显示。该 API 被设计成与不同平台上的现有通知系统兼容。 +**Notifications API** 允许网页控制向最终用户显示系统通知——这些都在顶级浏览上下文视口之外,因此即使用户已经切换标签页或移动到不同的应用程序,也可以显示。该 API 被设计成与不同平台上的现有通知系统兼容。 ## 概念和用法 -在支持该接口的平台上,显示一个系统通知通常涉及两件事。首先,用户需要授予当前源的权限以显示系统通知,这通常在应用或站点初始化时,使用{{domxref("Notification.requestPermission()")}} 方法来完成。 +在支持该接口的平台上,显示一个系统通知通常涉及两件事。首先,用户需要为当前来源授予权限以显示系统通知,这通常在应用或站点初始化时,使用 {{domxref("Notification.requestPermission()")}} 方法来完成。这应该通过响应用户交互来完成,例如单击按钮,例如: -这将产生一个请求对话框,沿着以下几行: +```js +btn.addEventListener("click", () => { + let promise = Notification.requestPermission(); + // 等待授权 +}); +``` + +这不仅是最佳实践——你不应该向用户发送他们不同意的通知——并且未来的浏览器将明确禁止未响应用户交互而触发的通知。例如,Firefox 从 72 版本开始就已经这样做了。 -![](notification-bubble.png) +这将产生一个请求对话框,内容如下: -从这里,用户可以选择允许来自此来源的通知,阻止来自此来源的通知,或不选择此点。一旦做出选择,该设置通常将持续用于当前会话。 +![一个对话框,要求用户允许来自该源的通知。有一些选项可以禁止或允许通知](screen_shot_2019-12-11_at_9.59.14_am.png) -> **备注:** 从 Firefox 44 开始,通知(Notifications)和推送([Push](/zh-CN/docs/Web/API/Push_API))的权限已合并。如果为通知授予权限,推送也将启用。 +从这里,用户可以选择允许来自此来源的通知或阻止来自此来源的通知。一旦做出选择,该设置通常将持续用于当前会话。 -接下来,使用 {{domxref("Notification.Notification","Notification()")}} 构造函数创建一个新通知。这个方法可以传入两个参数。这必须传递一个标题参数,并可以选择性地传递一个选项对象来指定选项,如文本方向,正文,显示图标,通知声音播放,等等。 +> **备注:** 从 Firefox 44 开始,通知(Notification)和推送([Push](/zh-CN/docs/Web/API/Push_API))的权限已合并。如果为通知授予权限,推送也将启用。 -{{AvailableInWorkers}} +接下来,使用 {{domxref("Notification.Notification","Notification()")}} 构造函数创建一个新通知。这个函数必须传递一个标题参数,并且可以选择传递一个选项对象来指定选项,例如文本方向、正文、要显示的图标、要播放的通知声音等等。 -此外, **Notifications API** 规范对 [ServiceWorker API](/zh-CN/docs/Web/API/ServiceWorker_API)指定了多个添加,以允许 service workers 发送通知。 +此外,Notifications API 规范对 [ServiceWorker API](/zh-CN/docs/Web/API/ServiceWorker_API) 指定了多个添加,以允许 Service Worker 发送通知。 -> **备注:** 想了解怎么在你的应用里使用通知接口,请阅读 [Using the Notifications API](/zh-CN/docs/Web/API/Notifications_API/Using_the_Notifications_API)。 +> **备注:** 想了解怎么在你的应用里使用通知接口,请阅读[使用 Notifications API](/zh-CN/docs/Web/API/Notifications_API/Using_the_Notifications_API)。 -## 接口(Notifications interfaces) +## Notifications 接口 - {{domxref("Notification")}} - - : 定义的通知对象 + - : 定义的通知对象。 -### 附加参数(Service worker additions) +### Service worker 附加内容 - {{domxref("ServiceWorkerRegistration")}} - : 该对象包含 {{domxref("ServiceWorkerRegistration.showNotification()")}} 和 {{domxref("ServiceWorkerRegistration.getNotifications()")}} 方法,用于控制通知的显示。 - {{domxref("ServiceWorkerGlobalScope")}} - - : 该对象包含 {{domxref("ServiceWorkerGlobalScope.onnotificationclick")}} 事件处理函数,用于通知被点击的时候触发绑定的事件处理函数。 + - : 该对象包含 {{domxref("ServiceWorkerGlobalScope.notificationclick_event", "onnotificationclick")}} 事件处理器,用于通知被点击的时候触发自定义函数。 - {{domxref("NotificationEvent")}} - - : 该对象是功能明确的事件对象,表示一个通知事件被触发了,继承自{{domxref("ExtendableEvent")}}。 + - : 该对象是功能明确的事件对象,表示一个被触发的通知事件,继承自 {{domxref("ExtendableEvent")}}。 ## 规范 @@ -49,16 +56,6 @@ slug: Web/API/Notifications_API {{Compat}} -## Firefox OS permissions - -当你在 Firefox OS app 中使用通知时,请确保在 manifest 文件中添加了`desktop-notification` 权限。Notifications can be used at any permission level, hosted or above: - -```json -"permissions": { - "desktop-notification": {} -} -``` - -## See also +## 参见 -- [Using the Notifications API](/zh-CN/docs/Web/API/Notifications_API/Using_the_Notifications_API) +- [使用 Notifications API](/zh-CN/docs/Web/API/Notifications_API/Using_the_Notifications_API) diff --git a/files/zh-cn/web/api/notifications_api/notification-bubble.png b/files/zh-cn/web/api/notifications_api/notification-bubble.png deleted file mode 100644 index 4b175cd07ae807f3de39923f8179ae4c9e023a86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26544 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 From 2b3352e7701f18b92205b82746aaa851600c00af Mon Sep 17 00:00:00 2001 From: Jason Lam Date: Thu, 16 Nov 2023 13:47:48 +0800 Subject: [PATCH 033/130] [zh-cn]: update the translation of ArrayBuffer overview (#16977) Co-authored-by: A1lo --- .../global_objects/arraybuffer/index.md | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.md b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.md index 2e60373f88d3c3..5572c183450d3f 100644 --- a/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.md +++ b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.md @@ -5,7 +5,7 @@ slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer {{JSRef}} -**`ArrayBuffer`** 对象用来表示通用的、固定长度的原始二进制数据缓冲区。 +**`ArrayBuffer`** 对象用来表示通用的原始二进制数据缓冲区。 它是一个字节数组,通常在其他语言中称为“byte array”。你不能直接操作 `ArrayBuffer` 中的内容;而是要通过[类型化数组对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/TypedArray)或 {{jsxref("DataView")}} 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。 @@ -21,32 +21,59 @@ slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer 这些特性使得调整 `ArrayBuffer` 的大小更加高效——否则,你必须使用新的大小创建一个缓冲副本。这也使得 JavaScript 在这方面与 WebAssembly 相当(Wasm 线性内存可以使用 [`WebAssembly.Memory.prototype.grow()`](/zh-CN/docs/WebAssembly/JavaScript_interface/Memory/grow) 调整大小)。 +### 传输 ArrayBuffer + +`ArrayBuffer` 对象可以在不同的执行上下文之间传输,就像 [Web Worker](/zh-CN/docs/Web/API/Web_Workers_API) 或 [Service Worker](/zh-CN/docs/Web/API/Service_Worker_API) 那样,使用[结构化克隆算法](/zh-CN/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)。这可以通过在 {{domxref("Worker.postMessage()")}} 或 {{domxref("ServiceWorker.postMessage()")}} 的调用中传入 `ArrayBuffer` 对象作为[可转移对象](/zh-CN/docs/Web/API/Web_Workers_API/Transferable_objects)来完成。在纯 JavaScript 中,也可以使用 {{jsxref("ArrayBuffer/transfer", "transfer()")}} 或 {{jsxref("ArrayBuffer/transferToFixedLength", "transferToFixedLength()")}} 方法来转移内存的所有权。 + +当一个 `ArrayBuffer` 对象被传输时,它原来的副本会被*分离(detached)*,这意味着它不再可用。在任何时候,只有一个 `ArrayBuffer` 的副本实际拥有底层内存。分离的缓冲区具有以下行为: + +- {{jsxref("ArrayBuffer/byteLength", "byteLength")}} 变为 0(在缓冲区和关联的类型化数组视图中)。 +- 所有实例方法,比如 {{jsxref("ArrayBuffer/resize", "resize()")}} 和 {{jsxref("ArrayBuffer/slice", "slice()")}},会在调用时抛出 {{jsxref("TypeError")}}。关联的类型化数组视图的方法也会抛出 `TypeError`。 + +你可以通过其 {{jsxref("ArrayBuffer/detached", "detached")}} 属性来检查 `ArrayBuffer` 是否已分离。 + ## 构造函数 -- {{jsxref("ArrayBuffer.ArrayBuffer", "ArrayBuffer()")}} +- {{jsxref("ArrayBuffer/ArrayBuffer", "ArrayBuffer()")}} - : 创建一个新的 `ArrayBuffer` 对象。 ## 静态属性 -- {{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}} +- {{jsxref("ArrayBuffer/@@species", "ArrayBuffer[@@species]")}} - : 用于创建派生对象的构造函数。 ## 静态方法 - {{jsxref("ArrayBuffer.isView()")}} - - : 如果 `arg` 是 ArrayBuffer 视图之一,则返回 `true`,例如[类型化数组对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/TypedArray)或者{{jsxref("DataView")}}。否则返回 `false`。 + - : 如果 `arg` 是 ArrayBuffer 视图之一,则返回 `true`,例如[类型化数组对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/TypedArray)或者 {{jsxref("DataView")}}。否则返回 `false`。 ## 实例属性 -- `ArrayBuffer.prototype[@@toStringTag]` - - : [`@@toStringTag`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) 属性的初始值是 `"ArrayBuffer"` 字符串。该属性在 {{jsxref("Object.prototype.toString()")}} 中被使用。 +这些属性在 `ArrayBuffer.prototype` 上定义,并由所有 `ArrayBuffer` 实例共享。 + - {{jsxref("ArrayBuffer.prototype.byteLength")}} - - : `ArrayBuffer` 的只读大小(以字节为单位)。这是在数组构建时确定的,无法更改。 + - : `ArrayBuffer` 的大小,以字节为单位。它在构造时确定,并且只有在 `ArrayBuffer` 可调整大小的情况下才能通过 {{jsxref("ArrayBuffer.prototype.resize()")}} 方法进行改变。 +- {{jsxref("Object/constructor", "ArrayBuffer.prototype.constructor")}} + - : 创建实例对象的构造函数。对于 `ArrayBuffer` 实例,初始值为 {{jsxref("ArrayBuffer/ArrayBuffer", "ArrayBuffer")}} 构造函数。 +- {{jsxref("ArrayBuffer.prototype.detached")}} {{experimental_inline}} + - : 只读。如果 `ArrayBuffer` 已分离(传输),则返回 `true`,否则返回 `false`。 +- {{jsxref("ArrayBuffer.prototype.maxByteLength")}} + - : 只读,`ArrayBuffer` 可以调整到的最大字节长度。它在构造时确定,并且无法更改。 +- {{jsxref("ArrayBuffer.prototype.resizable")}} + - : 只读。如果 `ArrayBuffer` 可调整大小,则返回 `true`,否则返回 `false`。 +- `ArrayBuffer.prototype[@@toStringTag]` + - : [`@@toStringTag`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) 属性的初始值是字符串 `"ArrayBuffer"`。它用于 {{jsxref("Object.prototype.toString()")}}。 ## 实例方法 +- {{jsxref("ArrayBuffer.prototype.resize()")}} + - : 将 `ArrayBuffer` 调整为指定大小,以字节为单位。 - {{jsxref("ArrayBuffer.prototype.slice()")}} - - : 返回一个新的 `ArrayBuffer`,它的内容是该 `ArrayBuffer` 从 `begin`(包括)到 `end`(不包括)字节的拷贝。如果 `begin` 或 `end` 是负数,它则指的是从数组末尾开始的索引,而不是从头开始的索引。 + - : 返回一个新的 `ArrayBuffer` 对象,其内容是从 `begin`(包含)到 `end`(不包含)的 `ArrayBuffer` 的字节内容的副本。如果 `begin` 或 `end` 为负数,则它将从数组的末尾开始计算索引,而非从数组的开头。 +- {{jsxref("ArrayBuffer.prototype.transfer()")}} {{experimental_inline}} + - : 创建一个新的 `ArrayBuffer` 对象,其内容是与此缓冲区相同的字节内容,然后分离此缓冲区。 +- {{jsxref("ArrayBuffer.prototype.transferToFixedLength()")}} {{experimental_inline}} + - : 创建一个新的不可调整大小的 `ArrayBuffer` 对象,其内容与此缓冲区相同,然后分离此缓冲区。 ## 示例 @@ -69,7 +96,7 @@ const view = new Int32Array(buffer); ## 参见 -- [`core-js` 中的 `ArrayBuffer` Polyfill](https://github.com/zloirock/core-js#ecmascript-typed-arrays) +- [`core-js` 中 `ArrayBuffer` 的 polyfill](https://github.com/zloirock/core-js#ecmascript-typed-arrays) - [JavaScript 类型化数组](/zh-CN/docs/Web/JavaScript/Guide/Typed_arrays) - {{jsxref("SharedArrayBuffer")}} -- [RangeError:无效的数组长度](/zh-CN/docs/Web/JavaScript/Reference/Errors/Invalid_array_length) +- [RangeError: invalid array length](/zh-CN/docs/Web/JavaScript/Reference/Errors/Invalid_array_length) From f6a25b9cf31fcafcba5193e310a6aa869aa18a32 Mon Sep 17 00:00:00 2001 From: Rustam M <34323404+rustam-mukhametshin@users.noreply.github.com> Date: Thu, 16 Nov 2023 11:08:53 +0500 Subject: [PATCH 034/130] ru: add embedded interactive example (#16729) --- .../javascript/reference/global_objects/object/assign/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/files/ru/web/javascript/reference/global_objects/object/assign/index.md b/files/ru/web/javascript/reference/global_objects/object/assign/index.md index e90782145f849a..52adae11397e6b 100644 --- a/files/ru/web/javascript/reference/global_objects/object/assign/index.md +++ b/files/ru/web/javascript/reference/global_objects/object/assign/index.md @@ -7,6 +7,8 @@ slug: Web/JavaScript/Reference/Global_Objects/Object/assign Метод **`Object.assign()`** используется для копирования значений всех собственных перечисляемых свойств из одного или более исходных объектов в целевой объект. После копирования он возвращает целевой объект. +{{EmbedInteractiveExample("pages/js/object-assign.html")}} + ## Синтаксис ``` From 3948f9debc64d8b4901817fc65307de83c826857 Mon Sep 17 00:00:00 2001 From: Rustam M <34323404+rustam-mukhametshin@users.noreply.github.com> Date: Thu, 16 Nov 2023 11:13:13 +0500 Subject: [PATCH 035/130] ru: update Object description (#16730) --- .../reference/global_objects/object/index.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/files/ru/web/javascript/reference/global_objects/object/index.md b/files/ru/web/javascript/reference/global_objects/object/index.md index 919f81f0d1141a..c4b0fcc353170c 100644 --- a/files/ru/web/javascript/reference/global_objects/object/index.md +++ b/files/ru/web/javascript/reference/global_objects/object/index.md @@ -5,10 +5,14 @@ slug: Web/JavaScript/Reference/Global_Objects/Object {{JSRef("Global_Objects", "Object")}} -## Сводка - Тип **`Object`** представляет один из [типов данных JavaScript](/ru/docs/Web/JavaScript/Data_structures). Он используется для хранения различных коллекций с ключами и более сложных сущностей. Объекты могут быть созданы с использованием конструктора {{jsxref("Object/Object", "Object()")}} или [синтаксиса инициализатора / литерала объекта](/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer). +## Описание + +Почти все [объекты](/ru/docs/Web/JavaScript/Data_structures#объекты) в JavaScript являются экземплярами `Object`; типичный объект наследует свойства (включая методы) от `Object.prototype`, хотя эти свойства могут быть затенены (т.е. переопределены). Единственные объекты, которые не наследуют от `Object.prototype`, - это те, у которых [прототип `null`](#null-prototype_objects), или которые происходят от других объектов с прототипом `null`. + +Изменения в объекте `Object.prototype` видны всем объектам с помощью цепочки прототипов, если свойства и методы, подверженные этим изменениям, не переопределены дальше по цепочке прототипов. Это предоставляет очень мощный, хотя и потенциально опасный механизм для переопределения или расширения поведения объектов. Для обеспечения большей безопасности, `Object.prototype` - единственный объект в основном языке JavaScript, у которого [неизменяемый прототип](/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf#описание) - прототип `Object.prototype` всегда `null` и не может быть изменен. + ## Синтаксис ```js @@ -26,14 +30,6 @@ new Object([value]) - `value` - : Любое значение. -## Описание - -Конструктор `Object` создаёт объект-обёртку для переданного значения. Если значением является {{jsxref("Global_Objects/null", "null")}} или {{jsxref("Global_Objects/undefined", "undefined")}}, создаёт и возвращает пустой объект, в противном случае возвращает объект такого типа, который соответствует переданному значению. Если значение уже является объектом, конструктор вернёт это значение. - -При вызове в не-конструктором контексте, `Object` ведёт себя идентично коду `new Object()`. - -Так же смотрите {{jsxref("Operators/Object_initializer", "синтаксис инициализатора объекта / литеральный синтаксис", "", 1)}}. - ## Свойства конструктора `Object` - `Object.length` From 3f6b91d5af7b4f508d41e958199e5042b3575dbe Mon Sep 17 00:00:00 2001 From: Leonid Vinogradov Date: Thu, 16 Nov 2023 09:30:40 +0300 Subject: [PATCH 036/130] [ru]: fix links in docs/Web/CSS (#16787) [ru]: fix links in docs/Web/CSS --------- Co-authored-by: Artem Shibakov --- files/ru/web/css/index.md | 51 ++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/files/ru/web/css/index.md b/files/ru/web/css/index.md index b37f282e08801a..3d472eb344a659 100644 --- a/files/ru/web/css/index.md +++ b/files/ru/web/css/index.md @@ -1,13 +1,13 @@ --- -title: CSS +title: "CSS: каскадные таблицы стилей" slug: Web/CSS --- {{CSSRef}} -**Cascading Style Sheets** (**CSS**) — это язык иерархических правил ([таблиц стилей](/ru/docs/DOM/stylesheet)), используемый для представления внешнего вида документа, написанного на [HTML](/ru/docs/HTML) или [XML](/ru/docs/XML) (включая различные языки XML, такие как [SVG](/ru/docs/SVG) и [XHTML](/ru/docs/XHTML)). CSS описывает, каким образом элемент должен отображаться на экране, на бумаге, голосом или с использованием других медиа средств. +**Cascading Style Sheets** (**CSS**) — это язык иерархических правил ([таблиц стилей](/ru/docs/Web/API/StyleSheet)), используемый для представления внешнего вида документа, написанного на [HTML](/ru/docs/Web/HTML) или [XML](/ru/docs/Web/XML/XML_introduction) (включая различные языки XML, такие как [SVG](/ru/docs/Web/SVG) и {{Glossary("XHTML")}}. CSS описывает, каким образом элемент должен отображаться на экране, на бумаге, голосом или с использованием других медиа средств. -**CSS** является одним из основных языков _свободной веб-разработки,_ который стандартизован [спецификацией W3C](http://w3.org/Style/CSS/#specs). Стандарт CSS делится на уровни: CSS1 в настоящее время устарел, CSS2.1 — рекомендован для применения, а [CSS3](/ru/docs/CSS/CSS3), разбитый на более мелкие модули, развивается на пути стандартизации. +**CSS** является одним из основных языков _свободной веб-разработки,_ который стандартизован [спецификацией W3C](https://w3.org/Style/CSS/#specs). Стандарт CSS делится на уровни: CSS1 в настоящее время устарел, CSS2.1 — рекомендован для применения, а CSS3, разбитый на более мелкие модули, развивается на пути стандартизации. - Справочник по CSS @@ -15,31 +15,42 @@ slug: Web/CSS - Самоучитель по CSS - [Пошаговое руководство](/Learn/CSS/Introduction_to_CSS) для помощи начинающим программистам CSS. Содержит все необходимые основы. + [Пошаговое руководство](/ru/docs/Learn/CSS/First_steps) для помощи начинающим программистам CSS. Содержит все необходимые основы. - Примеры CSS3 - [Набор примеров](/ru/demos/tag/tech:css3) представляющий новейшие технологии CSS в действии: толчок к креативности. + [Набор примеров](/ru/docs/Web/Demos_of_open_web_technologies) представляющий новейшие технологии CSS в действии: толчок к креативности. -## Документация и самоучители +## Документация -- Ключевые понятия CSS - - : Описание [синтаксиса и внешнего вида языка](/ru/docs/CSS/Syntax) и введение в фундаментальные понятия такие как [специфичность](/ru/docs/CSS/Specificity), [наследование(каскадирование)](/ru/docs/CSS/inheritance), блочная модель([box-model](/ru/docs//ru/docs/CSS/box_model)) и схлопывание отступов([margin-collapse](/ru/docs/CSS/margin_collapsing)), [наложение](/ru/docs/CSS/Understanding_z-index/The_stacking_context) и контекст форматирования([Block formatting context](/ru/docs/CSS/block_formatting_context)), начальное([initial](/ru/docs/CSS/initial_value)), вычисленное([computed](/ru/docs/CSS/computed_value)), используемое([used](/ru/docs/CSS/used_value)) и актуальное([actual](/ru/docs/CSS/actual_value)) значения. Кроме того, описана [краткая форма записи](/ru/docs/CSS/Shorthand_properties) свойств CSS. -- [Руководство разработчика CSS](/ru/docs/Web/Guide/CSS) - - : Статьи, которые помогут вам узнать все: начиная от основ организации стилей в HTML, заканчивая различными методами языка CSS, чтобы сделать свой контент сияющим. -- [Распространённые вопросы по CSS](/ru/docs/Web/CSS/Common_CSS_Questions) - - : Ответы на часто возникающие вопросы о **CSS**. +- [Справочник CSS](/ru/docs/Web/CSS/Reference): исчерпывающий справочник для опытных веб-разработчиков, в котором описаны все свойства и понятия CSS. +- Ключевые понятия CSS: + - [Описание синтаксиса и внешнего вида языка](/ru/docs/Web/CSS/Syntax) + - [Специфичность](/ru/docs/Web/CSS/Specificity), [наследование](/ru/docs/Web/CSS/Inheritance) и [каскадирование](/ru/docs/Web/CSS/Cascade) + - [Единицы измерения в CSS](/ru/docs/Web/CSS/CSS_Values_and_Units) и [функции в CSS](/ru/docs/Web/CSS/CSS_Functions) + - [Блоковая модель](/ru/docs/Web/CSS/CSS_box_model/Introduction_to_the_CSS_box_model) и [схлопывание внешних отступов](/ru/docs/Web/CSS/CSS_box_model/Mastering_margin_collapsing) + - [Содержащий блок](/ru/docs/Web/CSS/Containing_block) + - [Контекст наложения](/ru/docs/Web/CSS/CSS_positioned_layout/Understanding_z-index/Stacking_context) и [блочный контекст форматирования](/ru/docs/Web/Guide/CSS/Block_formatting_context) + - [Начальное](/ru/docs/Web/CSS/initial_value), [вычисленное](/ru/docs/Web/CSS/computed_value), [используемое](/ru/docs/Web/CSS/used_value) и [действительное](/ru/docs/Web/CSS/actual_value) значения + - [Краткая форма записи CSS свойств](/ru/docs/Web/CSS/Shorthand_properties) + - [Флексбокс-раскладка в CSS](/ru/docs/Web/CSS/CSS_flexible_box_layout) + - [Грид-раскладка в CSS](/ru/docs/Web/CSS/CSS_grid_layout) + - [CSS-селекторы](/ru/docs/Web/CSS/CSS_selectors) + - [Медиавыражения](/ru/docs/Web/CSS/CSS_media_queries) + - [Анимация](/ru/docs/Web/CSS/animation) + +## Книга рецептов + +В [Книге рецептов CSS разметки](/ru/docs/Web/CSS/Layout_cookbook) собраны примеры распространённых подходов, используемых для реализации разметки, которые вы сможете реализовать на своих сайтах. Эти рецепты также освещают различные способы использования спецификаций разметки и помогают сделать выбор нужной. ## Инструменты для разработки CSS -- [Служба проверки W3C CSS](http://jigsaw.w3.org/css-validator/) проверяет правильность работы вашего CSS кода. Служба [OnlineWebCheck.com](//www.OnlineWebCheck.com/) делает то же самое. Это отличные инструменты для отладки. -- [Инструменты разработчика Firefox](/ru/docs/Tools) позволяют рассматривать и изменять "на лету" CSS страницы с помощью инструментов [Инспектор](/ru/docs/Tools/Page_Inspector) и [Редактор таблиц стилей](/ru/docs/Tools/Style_Editor). -- [Расширение Firebug](https://addons.mozilla.org/ru/firefox/addon/1843) для Firefox, популярное расширение для этого браузера, которое также позволяет редактировать "на лету" CSS код при просмотре сайтов. Помогает легко тестировать работу кода при внесении различных изменений. Помимо этого, расширение имеет другие полезные функции. -- [Расширение Web Developer](https://addons.mozilla.org/ru/firefox/addon/60) для Firefox позволяет отслеживать и изменять "на лету" CSS код на просматриваемых сайтах. Проще чем Firebug, но обладает меньшей функциональностью. -- [Прочие инструменты CSS.](/ru/docs/Web/CSS/Tools) +- Используйте [Службу проверки W3C CSS](https://jigsaw.w3.org/css-validator/) для проверки правильности вашего CSS кода. Это отличный инструмент для отладки. +- [Инструменты разработчика Firefox](https://firefox-source-docs.mozilla.org/devtools-user/index.html) позволяют просматривать и изменять «на лету» CSS страницы с помощью инструментов [Инспектор](https://firefox-source-docs.mozilla.org/devtools-user/page_inspector/index.html) и [Редактор стилей](https://firefox-source-docs.mozilla.org/devtools-user/style_editor/index.html). +- [Расширение Web Developer](https://addons.mozilla.org/ru/firefox/addon/web-developer/) для Firefox позволяет отслеживать и изменять «на лету» CSS код на просматриваемых сайтах. ## Смотрите также -- Изучение [CSS](/ru/docs/Learn/CSS) от Mozilla. -- Веб-языки для которых часто применяется CSS: [HTML](/ru/docs/HTML), [SVG](/ru/docs/Web/SVG), [XHTML](/ru/docs/XHTML), [XML](/ru/docs/XML). -- Технологии Mozilla, широко использующие CSS: [XUL](/ru/docs/Mozilla/Tech/XUL), [Firefox](/ru/Firefox), а также [Thunderbird](/ru/docs/Mozilla/Thunderbird) [расширения](/ru/docs/Extensions) и [темы](/ru/Add-ons/Themes). +- [CSS демо](/ru/docs/Web/Demos#css): почерпните вдохновение, изучив примеры новейших технологий CSS в действии. +- Веб-языки в которых часто применяется CSS: [HTML](/ru/docs/Web/HTML), [SVG](/ru/docs/Web/SVG), [MathML](/ru/docs/Web/MathML), {{Glossary("XHTML")}} и [XML](/ru/docs/Web/XML/XML_introduction). +- [Вопросы о CSS на Stack Overflow](https://stackoverflow.com/questions/tagged/css) From 42d229ad360babbf802ec835aaefee86d2305459 Mon Sep 17 00:00:00 2001 From: Leonid Vinogradov Date: Thu, 16 Nov 2023 09:44:13 +0300 Subject: [PATCH 037/130] [ru]: fix `EmbedLiveSample` macro usage on docs/Web/CSS/accent-color page (#16985) * [ru]: fix link on docs/Web/CSS/accent-color page * [ru]: fix 'EmbedLiveSample' macro usage on docs/Web/CSS/accent-color page --- files/ru/web/css/accent-color/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/files/ru/web/css/accent-color/index.md b/files/ru/web/css/accent-color/index.md index 4b3d1ba58518d7..d245fb1e106366 100644 --- a/files/ru/web/css/accent-color/index.md +++ b/files/ru/web/css/accent-color/index.md @@ -79,7 +79,7 @@ input.custom { #### Результат -{{EmbedLiveSample('Setting_a_custom_accent_color', 500, 200)}} +{{EmbedLiveSample("Установка_пользовательского_акцентного_цвета", 500, 200)}} ## Спецификации @@ -92,6 +92,6 @@ input.custom { ## Смотрите также - {{HTMLElement("input")}} элемент -- [Применение цвета к HTML-элементам с помощью CSS](/ru/docs/Web/CSS/CSS_Colors/Applying_color) +- [Применение цвета к HTML-элементам с помощью CSS](/ru/docs/Web/CSS/CSS_colors/Applying_color) - {{cssxref("<color>")}} - Другие свойства, связанные с цветом: {{cssxref("color")}}, {{cssxref("background-color")}}, {{cssxref("border-color")}}, {{cssxref("outline-color")}}, {{cssxref("text-decoration-color")}}, {{cssxref("text-emphasis-color")}}, {{cssxref("text-shadow")}}, {{cssxref("caret-color")}} и {{cssxref("column-rule-color")}} From 7ae6424c218b9525f3ff7c4db721fcc1461c908f Mon Sep 17 00:00:00 2001 From: roose Date: Thu, 16 Nov 2023 12:47:26 +0600 Subject: [PATCH 038/130] [ru] Added missing words to the translation of the documentation for slice() (#16894) --- .../javascript/reference/global_objects/array/slice/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/ru/web/javascript/reference/global_objects/array/slice/index.md b/files/ru/web/javascript/reference/global_objects/array/slice/index.md index 22ae159ae01161..16f1f443860c0b 100644 --- a/files/ru/web/javascript/reference/global_objects/array/slice/index.md +++ b/files/ru/web/javascript/reference/global_objects/array/slice/index.md @@ -35,7 +35,7 @@ arr.slice([begin[, end]]) Если индекс отрицательный, `end` указывает смещение от конца последовательности. Вызов `slice(2, -1)` извлечёт из последовательности элементы начиная с третьего элемента с начала и заканчивая вторым с конца. - Если `end` опущен, `slice()` извлекает все элементы до конца последовательности (`arr.length`). + Если `end >= array.length` или `end` опущен, `slice()` извлекает все элементы до конца последовательности (`arr.length`). ### Возвращаемое значение From c7ae74318c18ddc8e5f2c512b5aeb35042f87e07 Mon Sep 17 00:00:00 2001 From: Leonid Vinogradov Date: Thu, 16 Nov 2023 10:05:14 +0300 Subject: [PATCH 039/130] feat(ru): update "SVG fill-rule" translation (#16926) Co-authored-by: A1lo --- files/ru/web/svg/attribute/fill-rule/index.md | 107 ++++++++++-------- 1 file changed, 62 insertions(+), 45 deletions(-) diff --git a/files/ru/web/svg/attribute/fill-rule/index.md b/files/ru/web/svg/attribute/fill-rule/index.md index 005cb5b7d5a653..0a3f4a0445df4a 100644 --- a/files/ru/web/svg/attribute/fill-rule/index.md +++ b/files/ru/web/svg/attribute/fill-rule/index.md @@ -5,11 +5,21 @@ slug: Web/SVG/Attribute/fill-rule {{SVGRef}} -The **`fill-rule`** этот атрибут представления, формулирует алгоритм, используемый для определения внутренней части фигуры. +Атрибут `fill-rule` указывает алгоритм, используемый для определения внутренней части фигуры. -> **Примечание:** Атрибут представления, `fill-rule` может быть использован как CSS-свойство. +> **Примечание:** Как атрибут представления, `fill-rule` можно использовать в качестве CSS-свойства. -Как атрибут представления, он может быть применён к следующим восьми элементам:: {{SVGElement('altGlyph')}}, {{SVGElement('path')}}, {{SVGElement('polygon')}}, {{SVGElement('polyline')}}, {{SVGElement('text')}}, {{SVGElement('textPath')}}, {{SVGElement('tref')}}, and {{SVGElement('tspan')}} +Этот атрибут может быть применён к следующим SVG элементам: + +- {{SVGElement('path')}} +- {{SVGElement('polygon')}} +- {{SVGElement('polyline')}} +- {{SVGElement('text')}} +- {{SVGElement('textPath')}} +- {{SVGElement('tref')}} +- {{SVGElement('tspan')}} + +## Пример ```css hidden html, @@ -21,17 +31,14 @@ svg { ```html - + ``` -{{EmbedLiveSample('topExample', '100%', 200)}} +{{EmbedLiveSample("Пример", '100%', 200)}} ## Примечания по использованию -| Значение | `nonzero` \| `evenodd` | -| --------------------- | ---------------------- | -| Значение по умолчанию | `nonzero` | -| Анимируемый | Да | - -The `fill-rule` attribute provides two options for how the inside (that is, the area to be filled) of a shape is determined: + + + + + + + + + + + + + + + +
Значениеnonzero | evenodd
Значение по умолчаниюnonzero
Поддержка анимацииdiscrete
+ +Атрибут `fill-rule` предоставляет два варианта определения внутренней части фигуры (то есть области, подлежащей заливке): ### nonzero -The value `nonzero` determines the "insideness" of a point in the shape by drawing a ray from that point to infinity in any direction, and then examining the places where a segment of the shape crosses the ray. Starting with a count of zero, add one each time a path segment crosses the ray from left to right and subtract one each time a path segment crosses the ray from right to left. After counting the crossings, if the result is zero then the point is outside the path. Otherwise, it is inside. +Значение `nonzero` определяет принадлежность точки фигуры к внутренней части с помощью рисования луча от этой точки до бесконечности в любом направлении, а затем проверки мест, где сегмент фигуры пересекает луч. Начиная с нуля, каждый раз, когда луч пересекает сегмент фигуры слева направо, происходит увеличение счётчика на единицу, а когда справа налево, то уменьшение. Если после подсчёта пересечений результат равен нулю, то точка находится за пределами фигуры, в противном случае — внутри. -#### Example +#### Пример ```css hidden html, @@ -67,33 +86,32 @@ svg { ```html - + + d="M110,0 h90 v90 h-90 z M130,20 h50 v50 h-50 z" /> + d="M210,0 h90 v90 h-90 z M230,20 v50 h50 v-50 z" /> ``` @@ -101,9 +119,9 @@ svg { ### evenodd -The value `evenodd` determines the "insideness" of a point in the shape by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses. If this number is odd, the point is inside; if even, the point is outside. +Значение `evenodd` определяет принадлежность точки фигуры к внутренней части с помощью рисования луча от этой точки до бесконечности в любом направлении и подсчёта количества сегментов фигуры, которые этот луч пересекает. Если это число нечётное, точка находится внутри, если чётное, то точка снаружи. -#### Example +#### Пример ```css hidden html, @@ -115,42 +133,41 @@ svg { ```html - + + d="M110,0 h90 v90 h-90 z M130,20 h50 v50 h-50 z" /> + d="M210,0 h90 v90 h-90 z M230,20 v50 h50 v-50 z" /> ``` {{EmbedLiveSample('evenodd', '100%', 200)}} -## Browser compatibility +## Спецификации -{{Compat}} +{{Specifications}} -## Specification +## Совместимость с браузерами -{{Specifications}} +{{Compat}} From bcf40c66ff06bbc35d6e713940dde1d578b436a6 Mon Sep 17 00:00:00 2001 From: Qichao Zhong Date: Thu, 16 Nov 2023 15:37:15 +0800 Subject: [PATCH 040/130] [zh-cn]: fix typo in webgpu (#16991) --- files/zh-cn/web/api/webgpu_api/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/zh-cn/web/api/webgpu_api/index.md b/files/zh-cn/web/api/webgpu_api/index.md index 14efd16c69f3f2..1aa4a286d44f79 100644 --- a/files/zh-cn/web/api/webgpu_api/index.md +++ b/files/zh-cn/web/api/webgpu_api/index.md @@ -13,7 +13,7 @@ WebGPU 是 {{domxref("WebGL_API", "WebGL", "", 1)}} 的继任者,为现代 GPU 很公平地说,{{domxref("WebGL_API", "WebGL", "", 1)}} 在 2011 年左右首次出现后,在图形功能方面彻底改变了 web。WebGL 是 [OpenGL ES 2.0](https://registry.khronos.org/OpenGL-Refpages/es2.0/) 图形库的 JavaScript 端口,允许 web 页面直接将渲染计算传递给设备的 GPU,这会以非常高的速度处理,并在 {{htmlelement("canvas")}} 内渲染结果。 -WebGL 和用于编写 WebGL 着色器代码的 [GLSL]() 语言十分负责,因此创建了几个 WebGL 库,以便更轻松地编写 WebGL 应用程序:流行的示例包括 [Three.js](https://threejs.org/)、[Babylon.js](https://www.babylonjs.com/) 以及 [PlayCanvas](https://playcanvas.com/)。开发者可以使用这些工具去构建身临其境的基于 web 3D 的游戏、音乐视频、培训和建模工具、VR 和 AR 体验等。 +WebGL 和用于编写 WebGL 着色器代码的 [GLSL]() 语言十分复杂,因此创建了几个 WebGL 库,以便更轻松地编写 WebGL 应用程序:流行的示例包括 [Three.js](https://threejs.org/)、[Babylon.js](https://www.babylonjs.com/) 以及 [PlayCanvas](https://playcanvas.com/)。开发者可以使用这些工具去构建身临其境的基于 web 3D 的游戏、音乐视频、培训和建模工具、VR 和 AR 体验等。 然而,WebGL 有一些需要解决的基本问题: From 2ada93d1d5a8a76fed0778764f5799e05d7f1573 Mon Sep 17 00:00:00 2001 From: Leonid Vinogradov Date: Thu, 16 Nov 2023 10:42:30 +0300 Subject: [PATCH 041/130] fix(ru): `MacroLiveSampleError` errors part-1 (#16968) Co-authored-by: Sasha Sushko --- files/ru/glossary/grid/index.md | 6 +- .../canvas_api/tutorial/compositing/index.md | 4 +- .../timing_element_visibility/index.md | 52 ++++---- .../recording_a_media_element/index.md | 30 +++-- files/ru/web/css/mix-blend-mode/index.md | 4 +- .../web/svg/attribute/attributename/index.md | 4 +- files/ru/web/svg/attribute/d/index.md | 6 +- files/ru/web/svg/attribute/dur/index.md | 4 +- files/ru/web/svg/attribute/id/index.md | 4 +- files/ru/web/svg/attribute/r/index.md | 4 +- files/ru/web/svg/attribute/rx/index.md | 4 +- files/ru/web/svg/attribute/ry/index.md | 4 +- .../svg/attribute/stroke-dashoffset/index.md | 122 ++---------------- .../web/svg/attribute/stroke-linecap/index.md | 4 +- files/ru/web/svg/attribute/viewbox/index.md | 10 +- files/ru/web/svg/attribute/width/index.md | 4 +- files/ru/web/svg/element/a/index.md | 10 +- files/ru/web/svg/element/ellipse/index.md | 6 +- .../ru/web/svg/element/foreignobject/index.md | 6 +- files/ru/web/svg/element/line/index.md | 6 +- .../web/svg/element/lineargradient/index.md | 4 +- files/ru/web/svg/element/path/index.md | 6 +- files/ru/web/svg/element/pattern/index.md | 6 +- files/ru/web/svg/element/polygon/index.md | 6 +- files/ru/web/svg/element/use/index.md | 10 +- 25 files changed, 136 insertions(+), 190 deletions(-) diff --git a/files/ru/glossary/grid/index.md b/files/ru/glossary/grid/index.md index 0b7f232855b0e8..795e4f08b76459 100644 --- a/files/ru/glossary/grid/index.md +++ b/files/ru/glossary/grid/index.md @@ -13,6 +13,8 @@ If you place content outside of this explicit grid, or if you are relying on aut В примере ниже отображена _точная сетка_ из трёх колонок и двух рядов. The _third_ row on the grid is an _implicit grid_ row track, formed due to their being more than the six items which fill the explicit tracks. +## Пример + ```css hidden * { box-sizing: border-box; @@ -54,7 +56,7 @@ If you place content outside of this explicit grid, or if you are relying on aut ``` -{{ EmbedLiveSample('example', '500', '330') }} +{{ EmbedLiveSample('Пример', '500', '330') }} ## Дополнительные материалы @@ -67,4 +69,4 @@ If you place content outside of this explicit grid, or if you are relying on aut ### Что почитать ещё -- Руководство по CSS Grid: _[Базовые принципы CSS сеток](/ru/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout)_ +- Руководство по CSS Grid: _[Базовые принципы CSS сеток](/ru/docs/Web/CSS/CSS_grid_layout/Basic_concepts_of_grid_layout)_ diff --git a/files/ru/web/api/canvas_api/tutorial/compositing/index.md b/files/ru/web/api/canvas_api/tutorial/compositing/index.md index 6ce44475fd33a6..c5936210d48285 100644 --- a/files/ru/web/api/canvas_api/tutorial/compositing/index.md +++ b/files/ru/web/api/canvas_api/tutorial/compositing/index.md @@ -16,8 +16,6 @@ slug: Web/API/Canvas_API/Tutorial/Compositing См. [примеры компоновки](/ru/docs/Web/API/Canvas_API/Tutorial/Compositing/Example) кода из следующих примеров. -{{ EmbedLiveSample("Compositing_example", "100%", 6750, "" ,"Web/API/Canvas_API/Tutorial/Compositing/Example" )}} - ## Обрезка контуров ![](canvas_clipping_path.png)Отсечённый контур похож на обычную форму холста, но он действует как маска, чтобы скрыть нежелательные части фигур. Это визуализируется на изображении справа. Форма красной звезды - наша отправочная дорожка. Все, что выходит за пределы этого пути, не будет нарисовано на холсте. @@ -99,6 +97,6 @@ draw(); Все, что нарисовано после создания отсечённого контура, появится только внутри этого пути. Вы можете видеть это чётко в линейном градиенте, который нарисован далее. После этого набирается набор из 50 случайно расположенных и масштабированных звёзд, используя `drawStar()`. Снова звезды появляются только в пределах определённого обтравочного контура. -{{EmbedLiveSample("A_clip_example", "180", "180", "canvas_clip.png")}} +{{EmbedLiveSample("Пример_обрезки", 180, 190, "canvas_clip.png")}} {{PreviousNext("Web/API/Canvas_API/Tutorial/Transformations", "Web/API/Canvas_API/Tutorial/Basic_animations")}} diff --git a/files/ru/web/api/intersection_observer_api/timing_element_visibility/index.md b/files/ru/web/api/intersection_observer_api/timing_element_visibility/index.md index 15a5c7cc0cc54e..86d28f84d1308c 100644 --- a/files/ru/web/api/intersection_observer_api/timing_element_visibility/index.md +++ b/files/ru/web/api/intersection_observer_api/timing_element_visibility/index.md @@ -13,9 +13,11 @@ slug: Web/API/Intersection_Observer_API/Timing_element_visibility Начнём! -## Структура приложения: HTML +## Создадим сайт -Структура Web-приложений не очень сложна. Мы будем использовать [CSS Grid](/ru/docs/Web/CSS/CSS_Grid_Layout) для стилизации и макетирования, так что всё достаточно очевидно: +### Структура приложения: HTML + +Структура Web-приложений не очень сложна. Мы будем использовать [CSS Grid](/ru/docs/Web/CSS/CSS_grid_layout) для стилизации и макетирования, так что всё достаточно очевидно: ```html
@@ -40,11 +42,11 @@ slug: Web/API/Intersection_Observer_API/Timing_element_visibility Это заготовка для приложения. В верхней части приложения находится блок {{HTMLElement("header")}}. Ниже - боковая панель {{HTMLElement("aside")}}, заполненная ссылками. В самом конце структуры - основное тело приложения. Приложение стартует с пустым элементом {{HTMLElement("main")}} - он будет заполнен позже с помощью JavaScript. -## Стилизация приложения с помощью CSS +### Стилизация приложения с помощью CSS После определения структуры приложения мы переходим к стилизации. Давайте рассмотрим каждый компонент по отдельности. -### Основа +#### Основа Мы создаём стили для {{HTMLElement("body")}} и {{HTMLElement("main")}} так, чтобы определить фоновый цвет и сеточную систему. @@ -74,7 +76,7 @@ body { The wrapper's width is fixed at 700px so that it will fit in the available space when presented inline on MDN below. -### Заголовок +#### Заголовок Заголовок достаточно прост, так как в нашем примере он содержит небольшой текст. @@ -88,7 +90,7 @@ header { Значение {{cssxref("grid-row")}} равно 1, так как мы хотим поместить заголовок в верхнюю строку сеточной системы. Более интересно использование {{cssxref("grid-column")}}; Мы указываем здесь, что блок занимает пространство с первой колонки до первой с конца (то есть последней). -### Боковая панель +#### Боковая панель Боковая панель используется для показа ссылок на другие страницы приложения. Ни одна из них не будет работать в нашем примере. Вся боковая панель нужна, чтобы просто приблизить внешний вид приложения к реальному блогу. Боковая панель создаётся с помощью элемента {{HTMLElement("aside")}}. @@ -115,7 +117,7 @@ aside ul li a { Важно отметить, что значение {{cssxref("grid-column")}} здесь установлено в 1 для того, чтобы поместить панель в левую часть экрана. Если вы поменяете это значение на "-1", то панель переместится вправо, однако, в этом случае, вам понадобится немного изменить стили внутренних элементов. Значение {{cssxref("grid-row")}} равно 2, чтобы боковая панель заняла область вдоль области контента. -### Область контента +#### Область контента Контент будет содержаться в элементе {{HTMLElement("main")}}. @@ -131,7 +133,7 @@ main { Главная особенность здесь - контент занимает вторую колонку и вторую строку. -### Статьи +#### Статьи Каждая статья состоит из элемента {{HTMLElement("article")}}: @@ -152,7 +154,7 @@ article h2 { Эти стили создают область с белым фоном с небольшими отступами как внутри области, так и между областями. -### Рекламные блоки +#### Рекламные блоки Наконец, рекламные блоки. Нужно заметить, что каждый отдельный рекламный блок может изменять свои стили динамически (мы увидим это позже): @@ -188,7 +190,7 @@ article h2 { Здесь нет никакой магии. Простой CSS. -## Совмещаем с JavaScript +### Совмещаем с JavaScript Перейдём к JavaScript-коду, который всё оживит. Начнём с глобальных переменных: @@ -216,9 +218,9 @@ let refreshIntervalID = 0; - `adObserver` - : Содержит экземпляр {{domxref("IntersectionObserver")}}, используемый для вычисления наложения рекламных блоков и границ элемента `
`. - `refreshIntervalID` - - : Переменная для хранения ID интервала, который возвращается функцией {{domxref("WindowOrWorkerGlobalScope.setInterval", "setInterval()")}}. Этот интервал будет использоваться для запуска периодических обновлений рекламных блоков. + - : Переменная для хранения ID интервала, который возвращается функцией {{domxref("setInterval", "setInterval()")}}. Этот интервал будет использоваться для запуска периодических обновлений рекламных блоков. -### Установка +#### Установка Для первичного запуска приложения мы вызовем функцию `startup()`: @@ -243,7 +245,7 @@ function startup() { } ``` -Вначале мы получаем элемент {{HTMLElement("main")}}, в который можем вставлять содержимое. Затем мы устанавливаем обработчик на событие {{event("visibilitychange")}}. Это событие срабатывает, когда документ меняет состояние между видим/невидим, например, когда пользователь переключается между табами. Intersection Observer API не должен засчитывать пересечение с элементом Main, если пользователь не будет в это время смотреть на вкладку. Таким образом, мы должны останавливать наши таймеры каждый раз, когда пользователь уходит со страницы. С помощью этого обработчика. +Вначале мы получаем элемент {{HTMLElement("main")}}, в который можем вставлять содержимое. Затем мы устанавливаем обработчик на событие . Это событие срабатывает, когда документ меняет состояние между видим/невидим, например, когда пользователь переключается между табами. Intersection Observer API не должен засчитывать пересечение с элементом Main, если пользователь не будет в это время смотреть на вкладку. Таким образом, мы должны останавливать наши таймеры каждый раз, когда пользователь уходит со страницы. С помощью этого обработчика. Затем мы устанавливаем параметры для {{domxref("IntersectionObserver")}}. Параметры определяют, что IntersectionObserver должен отслеживать перекрытия с областью видимости документа (параметр `root` в значении `null`). У нас нет отступов для модификации корневой области; мы хотим отслеживать совпадение границ элементов и видимого документа именно для целей обнаружения перекрытий. @@ -255,9 +257,9 @@ function startup() { В конце мы устанавливаем интервал, который каждую секунду запускает проверку - нужно ли что-то обновить. Нам необходимо второе обновление, так как в каждом отдельном рекламном блоке мы показываем таймер. В реальном приложении это не понадобится. -### Обработка изменения видимости документа +#### Обработка изменения видимости документа -Давайте рассмотрим обработчик события {{event("visibilitychange")}}. Это событие срабатывает, когда документ становится видим или невидим. Как правило, это случается, когда пользователь переключается между табами. Так как Intersection Observer отслеживает только перекрытия элемента с корневым элементом, нам необходимо отдельно позаботиться о детекции видимости документа. Для этого мы используем [Page Visibility API](/ru/docs/Web/API/Page_Visibility_API). +Давайте рассмотрим обработчик события . Это событие срабатывает, когда документ становится видим или невидим. Как правило, это случается, когда пользователь переключается между табами. Так как Intersection Observer отслеживает только перекрытия элемента с корневым элементом, нам необходимо отдельно позаботиться о детекции видимости документа. Для этого мы используем [Page Visibility API](/ru/docs/Web/API/Page_Visibility_API). ```js function handleVisibilityChange() { @@ -286,7 +288,7 @@ function handleVisibilityChange() { Если документ стал видимым, мы выполняем обратный процесс: сначала мы проходим через коллекцию `previouslyVisibleAds`. Для каждого элемента мы присваиваем `dataset.lastViewStarted` значение, соответствующее текущему времени документа (в миллисекундах с момента создания документа). Это время можно узнать с помощью метода {{domxref("Performance.now", "performance.now()")}}. Затем мы присваиваем переменной `visibleAds` закешированное ранее значение `previouslyVisibleAds`, с обнулением последней переменной. Теперь рекламные блоки перезапущены и настроены, так что время простоя не будет учитываться. -### Обработчик изменений наложения +#### Обработчик изменений наложения При каждой итерации в браузерном event loop, каждый наблюдатель {{domxref("IntersectionObserver")}} проверяет, не прошёл ли какой-либо из элементов-целей через пороговые значения наблюдателя. Для каждого наблюдателя список таких целей собирается в один список и отправляется в колбэк-функцию наблюдателя. Каждый элемент списка - это {{domxref("IntersectionObserverEntry")}} объект. В нашем приложении `intersectionCallback()` выглядит так: @@ -317,7 +319,7 @@ function intersectionCallback(entries) { Если рекламный блок уходит из зоны видимости, мы удаляем его из набор видимых элементов. Затем, в зависимости от значения {{domxref("IntersectionObserverEntry.intersectionRatio", "entry.ratio")}}, мы либо меняем рекламу, либо ставим на паузу. Так, если значение равно 0.0 и реклама уже была видна минимум минуту, мы вызываем функцию `replaceAd()` . В этом случае пользователь видит разные рекламные блоки, но сама реклама меняется незаметно для пользователя. -### Обработка периодический событий +#### Обработка периодический событий Каждую секунду у нас срабатывает интервал `handleRefreshInterval()`, который мы задали в функции `startup()`. Главная задача этого интервала - обновлять таймеры каждую секунду и перерисовывать значение таймеров. @@ -350,7 +352,7 @@ function handleRefreshInterval() { И, наконец, если существует хоть один элемент, который нужно перерисовать, мы будем используем {{domxref("window.requestAnimationFrame", "requestAnimationFrame()")}}, чтобы отложить отрисовку каждого элемента на тот момент, когда будет формироваться следующий кадр. -### Обновление таймера видимости рекламы +#### Обновление таймера видимости рекламы Ранее мы уже видели, что если нам нужно обновить общее время видимости рекламы - мы вызываем функцию `updateAdTimer()`. Эта функция принимает в качестве аргумента объект {{domxref("HTMLDivElement")}}. @@ -385,7 +387,7 @@ function updateAdTimer(adBox) { В конце мы присваиваем `lastViewStarted` текущее значение. Это делается вне зависимости от того, был ли элемент видим во время вызова функции или нет - это позволяет таймеру рекламных блоков срабатывать всегда, когда эта функция вызывается. Это имеет смысл, потому что вызов может сработать ровно в тот момент, когда реклама только появилась. -### Показываем таймер рекламы +#### Показываем таймер рекламы Внутри каждого рекламного блока мы отображаем текущее значение общего времени видимости в формате мин:сек. Для этого мы передаём в функцию `drawAdTimer` контейнер: @@ -404,7 +406,7 @@ function drawAdTimer(adBox) { Метод {{jsxref("String.padStart()")}} используется для того, чтобы убедиться, что число секунд всегда состоят из двух цифр. -### Строим содержимое страницы +#### Строим содержимое страницы Функция `buildContents()` вызывается при старте приложения. Она формирует тело статьи и добавляет рекламные блоки: @@ -435,7 +437,7 @@ function buildContents() { Рекламные блоки создаются с помощью функции `loadRandomAd()`. Эта функция создаёт и вставляет блоки одновременно. Как мы увидим позже, эта же функция может и заменить уже существующую рекламу. Но пока что просто добавим рекламу в существующий текст. -### Создаём статью +#### Создаём статью Для создания элемента статьи {{HTMLElement("article")}} и её содержимого мы используем функцию `createArticle()`, которая в качестве входных данных принимает строку-текст статьи. @@ -458,7 +460,7 @@ function createArticle(contents) { Сперва, элемент `
` создаётся и ему присваивается уникальный ID `nextArticleID` (это просто счётчик от нуля до бесконечности). Затем мы создаём и добавляем элемент {{HTMLElement("h2")}} для заголовка и применяем HTML из переменной `contents`. Наконец, мы увеличиваем значение `nextArticleID` (таким образом, следующий элемент получит уникальный ID) и возвращаем элемент статьи обратно. -### Создание рекламного блока +#### Создание рекламного блока Функция `loadRandomAd()` имитирует загрузку рекламы и её добавление на страницу. Если вы не указываете значение для `replaceBox`, создаётся и применяется новый контейнер для рекламы. Если вы указали `replaceBox`, этот контейнер рассматривается, как уже существующий элемент. Вместо создания нового, существующий элемент изменяется, чтобы содержать актуальные данные. Это помогает избежать риска неэффективной перерисовки элементов, если вы сначала будете удалять элемент из DOM, а затем вставлять новый. @@ -545,7 +547,7 @@ function loadRandomAd(replaceBox) { Если `replaceBox` содержит какое-то значение, мы рассматриваем его как элемент рекламного блока. Мы завершаем наблюдение за элементом с помощью {{domxref("IntersectionObserver.unobserve()")}}. Затем собираем в локальные переменные данные из каждого свойства элемента: заголовок, тело и таймер. -Если никакое значение не указано для `replaceBox`, мы создаём новый элемент. Создаётся новый контейнер {{HTMLElement("div")}}. Его CSS-параметры задаются с помощью класса `"ad"`. Затем создаются заголовок рекламного блока, его текст и таймер. Соотстветвенно, это {{HTMLElement("h2")}}, {{HTMLElement("p")}} и {{HTMLElement("div")}}. Эти элементы применяются к контейнеру `adBox`. +Если никакое значение не указано для `replaceBox`, мы создаём новый элемент. Создаётся новый контейнер {{HTMLElement("div")}}. Его CSS-параметры задаются с помощью класса `"ad"`. Затем создаются заголовок рекламного блока, его текст и таймер. Соответственно, это {{HTMLElement("h2")}}, {{HTMLElement("p")}} и {{HTMLElement("div")}}. Эти элементы применяются к контейнеру `adBox`. После этого разветвления наш код вновь возвращается к единому. Фоновый цвет рекламных блоков присваивается соответственно записям. Элементам присваиваются классы и содержимое. @@ -555,7 +557,7 @@ function loadRandomAd(replaceBox) { Если мы создаём новую рекламу, мы должны применить элемент к страницы с помощью {{domxref("Node.appendChild", "Document.appendChild()")}}. Если мы лишь заменяем рекламный блок - он уже представлен в DOM и всё, что нам нужно сделать - это обновить его. Затем мы вызываем функцию {{domxref("IntersectionObserver.observe", "observe()")}}. `adObserver` начинает отслеживать изменения перекрытия элементов в видимой области приложения. С этого момента любой рекламный блок, который становится на 100% скрыт или хотя бы на один пиксель видим или преодолевает порог в 75% видимости в любом направлении, запускает вычисление таймингов и обновление содержимого таймеров. -### Замена существующей рекламы +#### Замена существующей рекламы Наша [функция обработки перекрытия](#handling_intersection_changes) отслеживает рекламные блоки. Когда они становятся на 100% и общее время их видимости достаточное для того, рекламный блок заменяется на новый. Когда это происходит, вызывается функция `replaceAd()`. @@ -583,7 +585,7 @@ function replaceAd(adBox) { Вы можете увидеть результат в окне ниже. Попробуйте экспериментировать с прокруткой и понаблюдайте за тем, как изменение видимости затрагивает каждый таймер. Кроме того, обратите внимание, что каждый рекламный блок обновляется только в том случае, если он уже был видим в течение минуты. -{{EmbedLiveSample("fullpage_example", 750, 800)}} +{{EmbedLiveSample("Создадим_сайт", 750, 800)}} ## Смотрите также diff --git a/files/ru/web/api/mediastream_recording_api/recording_a_media_element/index.md b/files/ru/web/api/mediastream_recording_api/recording_a_media_element/index.md index d014b271732b57..5cb05a0e64aa7d 100644 --- a/files/ru/web/api/mediastream_recording_api/recording_a_media_element/index.md +++ b/files/ru/web/api/mediastream_recording_api/recording_a_media_element/index.md @@ -7,7 +7,9 @@ slug: Web/API/MediaStream_Recording_API/Recording_a_media_element В статье Использование интерфейса MediaStream Recording API демонстрируется использование объекта типа {{domxref("MediaRecorder")}} для захвата потока, представляющего объект типа {{domxref("MediaStream")}} , сгенерированного аппаратными средствами устройства и возвращаемого методом {{domxref("MediaDevices.getUserMedia()","navigator.mediaDevices.getUserMedia()")}}, но можно также использовать HTML медиа элемент (а именно {{HTMLElement("audio")}} или {{HTMLElement("video")}}) в качестве источника потока `MediaStream` для его записи. В этой статье рассматривается пример выполняющий это. -## HTML содержимое +## Пример записи с помощью медиа элемента + +### HTML ```html hidden

@@ -101,11 +103,11 @@ h2 { } ``` -## JavaScript +### JavaScript Теперь давайте посмотрим на код JavaScript -### Установка глобальных переменных +#### Установка глобальных переменных Мы начнём с установления некоторых глобальных переменных, которые нам понадобятся. @@ -122,7 +124,7 @@ let recordingTimeMS = 5000; Большинство из них являются ссылками на элементы, с которыми нам нужно работать. Последняя, `recordingTimeMS`, установлена на 5000 миллисекунд (5 секунд);. -### Используемые функции +#### Используемые функции Далее мы создадим несколько служебных функций, которые будут использованы позже. @@ -142,7 +144,7 @@ function wait(delayInMS) { The `wait()` function returns a new {{jsxref("Promise")}} which resolves once the specified number of milliseconds have elapsed. It works by using an [arrow function](/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions) which calls {{domxref("window.setTimeout()")}}, specifying the promise's resolution handler as the timeout handler function. That lets us use promise syntax when using timeouts, which can be very handy when chaining promises, as we'll see later. -### Starting media recording +#### Starting media recording The `startRecording()` function handles starting the recording process: @@ -173,9 +175,9 @@ function startRecording(stream, lengthInMS) { - Line 2 - : Creates the `MediaRecorder` that will handle recording the input `stream`. - Line 3 - - : Creates an empty array, `data`, which will be used to hold the {{domxref("Blob")}}s of media data provided to our {{domxref("MediaRecorder.ondataavailable", "ondataavailable")}} event handler. + - : Creates an empty array, `data`, which will be used to hold the {{domxref("Blob")}}s of media data provided to our {{domxref("MediaRecorder/dataavailable_event", "ondataavailable")}} event handler. - Line 5 - - : Sets up the handler for the {{event("dataavailable")}} event. The received event's `data` property is a {{domxref("Blob")}} that contains the media data. The event handler simply pushes the `Blob` onto the `data` array. + - : Sets up the handler for the {{domxref("MediaRecorder.dataavailable_event", "dataavailable")}} event. The received event's `data` property is a {{domxref("Blob")}} that contains the media data. The event handler simply pushes the `Blob` onto the `data` array. - Lines 6-7 - : Starts the recording process by calling {{domxref("MediaRecorder.start", "recorder.start()")}}, and outputs a message to the log with the updated state of the recorder and the number of seconds it will be recording. - Lines 9-12 @@ -185,7 +187,7 @@ function startRecording(stream, lengthInMS) { - Lines 18-22 - : These lines create a new `Promise` which is fulfilled when both of the two `Promise`s (`stopped` and `recorded`) have resolved. Once that resolves, the array data is returned by `startRecording()` to its caller. -### Stopping the input stream +#### Stopping the input stream The `stop()` function simply stops the input media: @@ -197,7 +199,7 @@ function stop(stream) { This works by calling {{domxref("MediaStream.getTracks()")}}, using {{jsxref("Array.forEach", "forEach()")}} to call {{domxref("MediaStreamTrack.stop()")}} on each track in the stream. -### Getting an input stream and setting up the recorder +#### Getting an input stream and setting up the recorder Now let's look at the most intricate piece of code in this example: our event handler for clicks on the start button: @@ -238,7 +240,7 @@ startButton.addEventListener( ); ``` -When a {{event("click")}} event occurs, here's what happens: +When a {{domxref("Element/click_event", "click")}} event occurs, here's what happens: - Lines 2-4 - : {{domxref("navigator.mediaDevices.getUserMedia()")}} is called to request a new {{domxref("MediaStream")}} that has both video and audio tracks. This is the stream we'll record. @@ -248,7 +250,7 @@ When a {{event("click")}} event occurs, here's what happens: - : When the preview video begins to play, we know there's media to record, so we respond by calling the [`startRecording()`](#starting_media_recording) function we created earlier, passing in the preview video stream (as the source media to be recorded) and `recordingTimeMS` as the number of milliseconds of media to record. As mentioned before, `startRecording()` returns a {{jsxref("Promise")}} whose resolution handler is called (receiving as input an array of {{domxref("Blob")}} objects containing the chunks of recorded media data) once recording has completed. - Lines 11-15 - - : The recording process's resolution handler receives as input an array of media data `Blob`s locally known as `recordedChunks`. The first thing we do is merge the chunks into a single {{domxref("Blob")}} whose MIME type is `"video/webm"` by taking advantage of the fact that the {{domxref("Blob.Blob", "Blob()")}} constructor concatenates arrays of objects into one object. Then {{domxref("URL.createObjectURL()")}} is used to create an URL that references the blob; this is then made the value of the recorded video playback element's [`src`](/ru/docs/Web/HTML/Element/video#src) attribute (so that you can play the video from the blob) as well as the target of the download button's link. + - : The recording process's resolution handler receives as input an array of media data `Blob`s locally known as `recordedChunks`. The first thing we do is merge the chunks into a single {{domxref("Blob")}} whose MIME type is `"video/webm"` by taking advantage of the fact that the {{domxref("Blob.Blob", "Blob()")}} constructor concatenates arrays of objects into one object. Then {{domxref("URL.createObjectURL_static", "URL.createObjectURL()")}} is used to create an URL that references the blob; this is then made the value of the recorded video playback element's [`src`](/ru/docs/Web/HTML/Element/video#src) attribute (so that you can play the video from the blob) as well as the target of the download button's link. Then the download button's [`download`](/ru/docs/Web/HTML/Element/a#download) attribute is set. While the `download` attribute can be a Boolean, you can also set it to a string to use as the name for the downloaded file. So by setting the download link's `download` attribute to "RecordedVideo.webm", we tell the browser that clicking the button should download a file named `"RecordedVideo.webm"` whose contents are the recorded video. @@ -257,9 +259,9 @@ When a {{event("click")}} event occurs, here's what happens: - Line 20 - : The `catch()` for all the `Promise`s outputs the error to the logging area by calling our `log()` function. -### Handling the stop button +#### Handling the stop button -The last bit of code adds a handler for the {{event("click")}} event on the stop button using {{domxref("EventTarget.addEventListener", "addEventListener()")}}: +The last bit of code adds a handler for the {{domxref("Element/click_event", "click")}} event on the stop button using {{domxref("EventTarget.addEventListener", "addEventListener()")}}: ```js stopButton.addEventListener( @@ -277,7 +279,7 @@ This simply calls the [`stop()`](#stopping_the_input_stream) function we covered When put all together with the rest of the HTML and the CSS not shown above, it looks and works like this: -{{ EmbedLiveSample('Example', 600, 440, "", "", "", "camera;microphone") }} +{{ EmbedLiveSample("Пример_записи_с_помощью_медиа_элемента", 600, 440) }} You can {{LiveSampleLink("Example", "take a look at all the code")}}, including the parts hidden above because they aren't critical to the explanation of how the APIs are being used. diff --git a/files/ru/web/css/mix-blend-mode/index.md b/files/ru/web/css/mix-blend-mode/index.md index 36c8359ab5cffe..62e5d5d9b82440 100644 --- a/files/ru/web/css/mix-blend-mode/index.md +++ b/files/ru/web/css/mix-blend-mode/index.md @@ -47,6 +47,8 @@ mix-blend-mode: unset; ## Примеры +### Влияние различных значений режима смешивания + ```html hidden

@@ -624,7 +626,7 @@ body { } ``` -{{EmbedLiveSample("mix-blend-mode", "100%", 1600, "", "", "example-outcome-frame")}} +{{EmbedLiveSample("Влияние_различных_значений_режима_смешивания", "100%", 1600)}} ### Пример HTML diff --git a/files/ru/web/svg/attribute/attributename/index.md b/files/ru/web/svg/attribute/attributename/index.md index 035796ff47e7b7..11f4b3d8d26fc0 100644 --- a/files/ru/web/svg/attribute/attributename/index.md +++ b/files/ru/web/svg/attribute/attributename/index.md @@ -9,6 +9,8 @@ slug: Web/SVG/Attribute/attributeName Четыре элемента используют данный атрибут: {{SVGElement("animate")}}, {{SVGElement("animateColor")}}, {{SVGElement("animateTransform")}} и {{SVGElement("set")}} +## Пример + ```css hidden html, body, @@ -31,7 +33,7 @@ svg { ``` -{{EmbedLiveSample("topExample", "400", "250")}} +{{EmbedLiveSample("Пример", 400, 250)}} ## Контекст использования diff --git a/files/ru/web/svg/attribute/d/index.md b/files/ru/web/svg/attribute/d/index.md index 359cc8d38ca00e..76e9f84051da79 100644 --- a/files/ru/web/svg/attribute/d/index.md +++ b/files/ru/web/svg/attribute/d/index.md @@ -7,10 +7,12 @@ slug: Web/SVG/Attribute/d Атрибут **`d`** предоставляет определение пути для рисования. -Определение пути - это [список команд пути](#Path_commands), в которых каждая команда состоит из буквы и некоторых чисел, представляющих параметр команды. Ниже приведены все возможные команды. +Определение пути - это [список команд пути](#path_commands), в которых каждая команда состоит из буквы и некоторых чисел, представляющих параметр команды. Ниже приведены все возможные команды. Три элемента используют этот атрибут: {{SVGElement("path")}}, {{SVGElement("glyph")}}, и {{SVGElement("missing-glyph")}} +## Пример + ```css hidden html, body, @@ -32,7 +34,7 @@ svg { ``` -{{EmbedLiveSample('Example', '100%', 200)}} +{{EmbedLiveSample("Пример", '100%', 200)}} ## path diff --git a/files/ru/web/svg/attribute/dur/index.md b/files/ru/web/svg/attribute/dur/index.md index c4292e841dae20..f537fb94150fb7 100644 --- a/files/ru/web/svg/attribute/dur/index.md +++ b/files/ru/web/svg/attribute/dur/index.md @@ -9,6 +9,8 @@ slug: Web/SVG/Attribute/dur Пять элементов используют данный атрибут: {{SVGElement("animate")}}, {{SVGElement("animateColor")}}, {{SVGElement("animateMotion")}}, {{SVGElement("animateTransform")}}, и {{SVGElement("set")}} +## Пример + ```css hidden html, body, @@ -40,7 +42,7 @@ svg { ``` -{{EmbedLiveSample("topExample", "220", "150")}} +{{EmbedLiveSample("Пример", 220, 150)}} ## Примечания к использованию diff --git a/files/ru/web/svg/attribute/id/index.md b/files/ru/web/svg/attribute/id/index.md index 6aeffd0a35cb4c..8f5c42a2688570 100644 --- a/files/ru/web/svg/attribute/id/index.md +++ b/files/ru/web/svg/attribute/id/index.md @@ -9,6 +9,8 @@ slug: Web/SVG/Attribute/id Этот атрибут используется всеми элементами. +## Пример + ```html ``` -{{EmbedLiveSample("topExample", "120", "120")}} +{{EmbedLiveSample("Пример", 120, 120)}} ## Примечания по использованию diff --git a/files/ru/web/svg/attribute/r/index.md b/files/ru/web/svg/attribute/r/index.md index 452f2c80992371..c1d51f06bcd141 100644 --- a/files/ru/web/svg/attribute/r/index.md +++ b/files/ru/web/svg/attribute/r/index.md @@ -7,6 +7,8 @@ slug: Web/SVG/Attribute/r Этот атрибут используют два элемента: {{SVGElement("circle")}}, и {{SVGElement("radialGradient")}} +## Пример + ```css hidden html, body, @@ -40,7 +42,7 @@ svg { ``` -{{EmbedLiveSample('topExample', '100%', 200)}} +{{EmbedLiveSample("Пример", '100%', 200)}} ## circle diff --git a/files/ru/web/svg/attribute/rx/index.md b/files/ru/web/svg/attribute/rx/index.md index b5af6333d683ce..8373e170ba2889 100644 --- a/files/ru/web/svg/attribute/rx/index.md +++ b/files/ru/web/svg/attribute/rx/index.md @@ -9,6 +9,8 @@ slug: Web/SVG/Attribute/rx Два элемента используют этот атрибут: {{SVGElement("ellipse")}} и {{SVGElement("rect")}} +## Пример + ```css hidden html, body, @@ -29,7 +31,7 @@ svg { ``` -{{EmbedLiveSample('topExample', '100%', 200)}} +{{EmbedLiveSample("Пример", '100%', 200)}} ## ellipse diff --git a/files/ru/web/svg/attribute/ry/index.md b/files/ru/web/svg/attribute/ry/index.md index 24ef563a7919c1..1342e2cbdc8b9e 100644 --- a/files/ru/web/svg/attribute/ry/index.md +++ b/files/ru/web/svg/attribute/ry/index.md @@ -9,6 +9,8 @@ slug: Web/SVG/Attribute/ry Два элемента используют этот атрибут: [``](/ru/docs/Web/SVG/Element/ellipse) и [``](/ru/docs/Web/SVG/Element/rect) +## Пример + ```css hidden html, body, @@ -29,7 +31,7 @@ svg { ``` -{{EmbedLiveSample('topExample', '100%', 200)}} +{{EmbedLiveSample("Пример", '100%', 200)}} ## ellipse diff --git a/files/ru/web/svg/attribute/stroke-dashoffset/index.md b/files/ru/web/svg/attribute/stroke-dashoffset/index.md index 6110d13f5795cb..7294fecd7611f9 100644 --- a/files/ru/web/svg/attribute/stroke-dashoffset/index.md +++ b/files/ru/web/svg/attribute/stroke-dashoffset/index.md @@ -5,7 +5,7 @@ slug: Web/SVG/Attribute/stroke-dashoffset > **Примечание:** **Прежняя редакция:** « [Справочник SVG атрибутов](/ru/docs/Web/SVG/Attribute) > Этот атрибут определяет смещение обводки относительно начального положения. -> При использовании [\](/ru/SVG/Content_type#Percentage), значение будет вычисляться от текущего viewport. +> При использовании [\](/ru/docs/SVG/Content_type#percentage), значение будет вычисляться от текущего viewport. > Значение может быть отрицательным. {{SVGRef}} @@ -15,6 +15,8 @@ slug: Web/SVG/Attribute/stroke-dashoffset Как атрибут представления, он может применяться к любому элементу, но влияет только на следующие одиннадцать элементов: {{SVGElement('altGlyph')}}, {{SVGElement('circle')}}, {{SVGElement('ellipse')}}, {{SVGElement('path')}}, {{SVGElement('polygon')}}, {{SVGElement('polyline')}}, {{SVGElement('rect')}}, {{SVGElement('text')}}, {{SVGElement('textPath')}}, {{SVGElement('tref')}}, and {{SVGElement('tspan')}} +## Пример + ```css hidden html, body, @@ -75,120 +77,20 @@ svg { ``` -{{EmbedLiveSample('topExample', '100%', 200)}} +{{EmbedLiveSample("Пример", '100%', 200)}} ## Usage context -| Категория | Атрибут оформления | -| ----------------- | ------------------------------------------------------------------------------------------------------- | -| Значение | [\](/en/SVG/Content_type#Percentage) \| [\](/en/SVG/Content_type#Length) \| inherit | -| Исходное значение | 0 | -| Анимируемый | Да | -| Спецификация | [SVG 1.1 (2nd Edition)](http://www.w3.org/TR/SVG11/painting.html#StrokeDashoffsetProperty) | - -## Пример - -### HTML - -```html - - - - - - - - - - - - - - - - - - - - -``` - -### Результат - -{{EmbedLiveSample('Пример', '220', '240')}} +| Категория | Атрибут оформления | +| ----------------- | ----------------------------------------------------------------------------------------------- | +| Значение | [\](/ru/docs/Web/SVG#percentage) \| [\](/ru/docs/Web/SVG#length) \| inherit | +| Исходное значение | 0 | +| Анимируемый | Да | +| Спецификация | [SVG 1.1 (2nd Edition)](https://www.w3.org/TR/SVG11/painting.html#StrokeDashoffsetProperty) | ## Элементы Следующие элементы могут использовать атрибут `stroke-dashoffset` -- [Элементы форм](/ru/SVG/Element#Shape) -- [Текстовые элементы](/ru/SVG/Element#TextContent) +- [Элементы форм](/ru/docs/SVG/Element#shape) +- [Текстовые элементы](/ru/docs/SVG/Element#textcontent) diff --git a/files/ru/web/svg/attribute/stroke-linecap/index.md b/files/ru/web/svg/attribute/stroke-linecap/index.md index d9b5295cce0afd..cbf2b7cc1ed4d4 100644 --- a/files/ru/web/svg/attribute/stroke-linecap/index.md +++ b/files/ru/web/svg/attribute/stroke-linecap/index.md @@ -11,6 +11,8 @@ slug: Web/SVG/Attribute/stroke-linecap В качестве атрибута представления он может применяться к любому элементу, но он влияет только на следующие семь элементов: {{SVGElement('altGlyph')}}, {{SVGElement('path')}}, {{SVGElement('polyline')}}, {{SVGElement('text')}}, {{SVGElement('textPath')}}, {{SVGElement('tref')}}, and {{SVGElement('tspan')}} +## Пример + ```css hidden html, body, @@ -38,7 +40,7 @@ svg { ``` -{{EmbedLiveSample('topExample', '100%', 200)}} +{{EmbedLiveSample("Пример", '100%', 200)}} ## Нотации diff --git a/files/ru/web/svg/attribute/viewbox/index.md b/files/ru/web/svg/attribute/viewbox/index.md index 71ec305a252096..6c487592ddc332 100644 --- a/files/ru/web/svg/attribute/viewbox/index.md +++ b/files/ru/web/svg/attribute/viewbox/index.md @@ -3,12 +3,14 @@ title: viewBox slug: Web/SVG/Attribute/viewBox --- -« [SVG Attribute reference home](/en/SVG/Attribute) +{{SVGRef}} -`Аттрибут viewBox` определяет расположение и размеры окна отображения SVG. +Аттрибут `viewBox` определяет расположение и размеры окна отображения SVG. Значение атрибута `viewBox` — это набор четырёх чисел: `min-x`, `min-y`, `width` и `height`, — разделённых пробелами и/или запятой, которые задают прямоугольник в пользовательском пространстве, стороны которого определяют границы окна отображения элемента SVG (не [браузера](/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/Viewport)). +## Пример + ``` html, body, svg { height:100% @@ -68,7 +70,7 @@ svg:not(:root) { ``` -{{EmbedLiveSample('topExample', '100%', 200)}} +{{EmbedLiveSample("Пример", '100%', 200)}} На отображение с `viewBox` также влияет атрибут {{ SVGAttr("preserveAspectRatio") }}. @@ -123,4 +125,4 @@ svg:not(:root) { ## Смотрите также -- [SVG Getting Started: Positions](/en/SVG/Tutorial/Positions) +- [SVG Getting Started: Positions](/ru/docs/Web/SVG/Tutorial/Positions) diff --git a/files/ru/web/svg/attribute/width/index.md b/files/ru/web/svg/attribute/width/index.md index c6df802c6d892b..8be336d23c922a 100644 --- a/files/ru/web/svg/attribute/width/index.md +++ b/files/ru/web/svg/attribute/width/index.md @@ -9,6 +9,8 @@ slug: Web/SVG/Attribute/width Двадцать пять элементов используют эти атрибуты: {{SVGElement('feBlend')}}, {{SVGElement('feColorMatrix')}}, {{SVGElement('feComponentTransfer')}}, {{SVGElement('feComposite')}}, {{SVGElement('feConvolveMatrix')}}, {{SVGElement('feDiffuseLighting')}}, {{SVGElement('feDisplacementMap')}}, {{SVGElement('feDropShadow')}}, {{SVGElement('feFlood')}}, {{SVGElement('feGaussianBlur')}}, {{SVGElement('feImage')}}, {{SVGElement('feMerge')}}, {{SVGElement('feMorphology')}}, {{SVGElement('feOffset')}}, {{SVGElement('feSpecularLighting')}}, {{SVGElement('feTile')}}, {{SVGElement('feTurbulence')}}, {{SVGElement('filter')}}, {{SVGElement('foreignObject')}}, {{SVGElement('image')}}, {{SVGElement('mask')}}, {{SVGElement('pattern')}}, {{SVGElement('rect')}}, {{SVGElement('svg')}}, and {{SVGElement('use')}} +## Пример + ```css hidden html, body, @@ -26,7 +28,7 @@ svg { ``` -{{EmbedLiveSample('topExample', '100%', 200)}} +{{EmbedLiveSample("Пример", '100%', 200)}} ## feBlend diff --git a/files/ru/web/svg/element/a/index.md b/files/ru/web/svg/element/a/index.md index b89ddf829ce41c..19424f026d606e 100644 --- a/files/ru/web/svg/element/a/index.md +++ b/files/ru/web/svg/element/a/index.md @@ -9,6 +9,8 @@ SVG элемент **\** создаёт гиперссылку на друг Элемент `` является контейнером. Это означает, что вы можете обернуть текст в ссылку (как в HTML). Таким же образом можно обернуть фигуру. +## Пример + ```css hidden @namespace svg url(http://www.w3.org/2000/svg); html, @@ -55,9 +57,9 @@ svg|a:hover, svg|a:active { } ``` -{{EmbedLiveSample('Exemple', 100, 100)}} +{{EmbedLiveSample("Пример", 100, 100)}} -> **Предупреждение:** Поскольку этот элемент разделяет своё имя с [элементом HTML ``](/ru/docs/Web/HTML/Element/A), выбор `a` через CSS или [`querySelector`](/ru/docs/Web/API/Document/querySelector) может выбрать не тот тип элемента. Попробуйте [правило `@namespace`](/ru/docs/Web/CSS/@namespace), чтобы разделять их. +> **Предупреждение:** Поскольку этот элемент разделяет своё имя с [элементом HTML ``](/ru/docs/Web/HTML/Element/a), выбор `a` через CSS или [`querySelector`](/ru/docs/Web/API/Document/querySelector) может выбрать не тот тип элемента. Попробуйте [правило `@namespace`](/ru/docs/Web/CSS/@namespace), чтобы разделять их. ## Атрибуты @@ -74,7 +76,7 @@ svg|a:hover, svg|a:active { - : Разделённый пробелами список URL при переходе по которым браузер будет отправлять [`POST`](/ru/docs/Web/HTTP/Methods/POST) запросы с телом `PING` (в фоне). Обычно используется для трекинга. _Тип_: **[\](/docs/Web/SVG/Content_type#List-of-Ts)**; _Значение по умолчанию_: _none_; _Анимируем_: **нет** - [`referrerpolicy`](/ru/docs/Web/HTML/Element/a#referrerpolicy) {{experimental_inline}} - - : Какой [referrer](/ru/docs/Web/HTTP/Заголовки/Referer) отправить при получении {{Glossary("URL")}}. + - : Какой [referrer](/ru/docs/Web/HTTP/Headers/Referer) отправить при получении {{Glossary("URL")}}. _Тип_: `no-referrer`|`no-referrer-when-downgrade`|`same-origin`|`origin`|`strict-origin`|`origin-when-cross-origin`|`strict-origin-when-cross-origin`|`unsafe-url` ; _Значение по умолчанию_: _none_; _Анимируем_: **нет** - [`rel`](/ru/docs/Web/HTML/Element/a#rel) {{experimental_inline}} - : Отношение между целевым объектом и объектом link. @@ -91,7 +93,7 @@ svg|a:hover, svg|a:active { ### Глобальные атрибуты -- [Core Attributes](/docs/Web/SVG/Attribute/Core) +- [Core Attributes](/ru/docs/Web/SVG/Attribute/Core) - : Наиболее используемые: {{SVGAttr('id')}}, {{SVGAttr('lang')}}, {{SVGAttr('tabindex')}} - [Styling Attributes](/docs/Web/SVG/Attribute/Styling) - : {{SVGAttr('class')}}, {{SVGAttr('style')}} diff --git a/files/ru/web/svg/element/ellipse/index.md b/files/ru/web/svg/element/ellipse/index.md index 2664417aad1dbe..fe739703cffe76 100644 --- a/files/ru/web/svg/element/ellipse/index.md +++ b/files/ru/web/svg/element/ellipse/index.md @@ -9,6 +9,8 @@ slug: Web/SVG/Element/ellipse > **Примечание:** Сам по себе элемент `ellipse` не позволяет задать точное его расположение (например, нельзя сразу отобразить эллипс, повёрнутый на 45**°**), однако его можно повернуть с помощью атрибута {{SVGAttr("transform")}}. +## Пример + ```css hidden html, body, @@ -23,7 +25,7 @@ svg { ``` -{{EmbedLiveSample('LiveSample', 100, '100%')}} +{{EmbedLiveSample("Пример", 100, '100%')}} ## Атрибуты @@ -49,7 +51,7 @@ svg { ### Глобальные Атрибуты -- [Основные атрибуты](/docs/Web/SVG/Attribute/Core) +- [Основные атрибуты](/ru/docs/Web/SVG/Attribute/Core) - : Самые важные: {{SVGAttr('id')}}, {{SVGAttr('tabindex')}} - [Атрибуты стиля](/docs/Web/SVG/Attribute/Styling) - : {{SVGAttr('class')}}, {{SVGAttr('style')}} diff --git a/files/ru/web/svg/element/foreignobject/index.md b/files/ru/web/svg/element/foreignobject/index.md index 83a8da486b4bd0..fe93cef1fc88c1 100644 --- a/files/ru/web/svg/element/foreignobject/index.md +++ b/files/ru/web/svg/element/foreignobject/index.md @@ -7,6 +7,8 @@ slug: Web/SVG/Element/foreignObject Элемент **``** [SVG](/ru/docs/Web/SVG) позволяет включать другое пространство имён XML. В контексте браузера это, скорее всего, XHTML / HTML. +## Пример + ```css hidden html, body, @@ -47,7 +49,7 @@ svg { ``` -{{EmbedLiveSample('Exemple', 150, '100%')}} +{{EmbedLiveSample("Пример", 150, '100%')}} ## Атрибуты @@ -70,7 +72,7 @@ svg { ### Глобальные атрибуты -- [Core Attributes](/docs/Web/SVG/Attribute/Core) +- [Core Attributes](/ru/docs/Web/SVG/Attribute/Core) - : Most notably: {{SVGAttr('id')}}, {{SVGAttr('tabindex')}} - [Styling Attributes](/docs/Web/SVG/Attribute/Styling) - : {{SVGAttr('class')}}, {{SVGAttr('style')}} diff --git a/files/ru/web/svg/element/line/index.md b/files/ru/web/svg/element/line/index.md index 0ad92c33b2c98a..ab49e9914f4904 100644 --- a/files/ru/web/svg/element/line/index.md +++ b/files/ru/web/svg/element/line/index.md @@ -7,6 +7,8 @@ slug: Web/SVG/Element/line Элемент **``** одна из базовых фигур SVG, используемая для создания линии, связывающей две точки. +## Пример + ```css hidden html, body, @@ -24,7 +26,7 @@ svg { ``` -{{EmbedLiveSample('Example', 100, 100)}} +{{EmbedLiveSample("Пример", 100, 100)}} ## Атрибуты @@ -46,7 +48,7 @@ svg { ### Глобальные атрибуты -- [Основные атрибуты](/docs/Web/SVG/Attribute/Core) +- [Основные атрибуты](/ru/docs/Web/SVG/Attribute/Core) - : В первую очередь: {{SVGAttr('id')}}, {{SVGAttr('tabindex')}} - [Атрибуты оформления (стилей)](/docs/Web/SVG/Attribute/Styling) - : {{SVGAttr('class')}}, {{SVGAttr('style')}} diff --git a/files/ru/web/svg/element/lineargradient/index.md b/files/ru/web/svg/element/lineargradient/index.md index b3f69455cf5bdd..7fa69b21cc36eb 100644 --- a/files/ru/web/svg/element/lineargradient/index.md +++ b/files/ru/web/svg/element/lineargradient/index.md @@ -9,6 +9,8 @@ slug: Web/SVG/Element/linearGradient > **Примечание:** Не путайте с CSS {{cssxref('linear-gradient()')}}, CSS-градиенты могут быть применены только к HTML-элементам, тогда как SVG-градиент применим только к SVG-элементам. +## Пример + ```css hidden html, body, @@ -34,7 +36,7 @@ svg { ``` -{{EmbedLiveSample('Example', 150, '100%')}} +{{EmbedLiveSample("Пример", 150, '100%')}} ## Атрибуты diff --git a/files/ru/web/svg/element/path/index.md b/files/ru/web/svg/element/path/index.md index 4778d028e45806..62294ec20b8ba7 100644 --- a/files/ru/web/svg/element/path/index.md +++ b/files/ru/web/svg/element/path/index.md @@ -7,6 +7,8 @@ slug: Web/SVG/Element/path Элемент **``** является общим элементом для описания фигуры. Все базовые фигуры могут быть созданы с помощью элемента path. +## Пример + ```css hidden html, body, @@ -26,7 +28,7 @@ svg { ``` -{{EmbedLiveSample('Example', 100, 100)}} +{{EmbedLiveSample("Пример", 100, 100)}} ## Атрибуты @@ -39,7 +41,7 @@ svg { ### Глобальные атрибуты -- [Атрибуты ядра](/docs/Web/SVG/Attribute/Core) +- [Атрибуты ядра](/ru/docs/Web/SVG/Attribute/Core) - : Most notably: {{SVGAttr('id')}}, {{SVGAttr('tabindex')}} - [Атрибуты стиля](/docs/Web/SVG/Attribute/Styling) - : {{SVGAttr('class')}}, {{SVGAttr('style')}} diff --git a/files/ru/web/svg/element/pattern/index.md b/files/ru/web/svg/element/pattern/index.md index 8113651313c2b9..b38b7ef5f57eaa 100644 --- a/files/ru/web/svg/element/pattern/index.md +++ b/files/ru/web/svg/element/pattern/index.md @@ -7,6 +7,8 @@ slug: Web/SVG/Element/pattern Элемент **``** определяет графический объект, который может быть перерисован с повторяющимися координатами **x** и **y** («мозаичным»), чтобы покрыть область. На ссылку `` ссылаются атрибуты {{SVGAttr("fill")}} и / или {{SVGAttr("stroke")}} на других [графических элементах](/ru/docs/Web/SVG/Tutorial/Basic_Shapes) , чтобы заполнить или обвести эти элементы указанным шаблоном. +## Пример + ```css hidden html, body, @@ -34,7 +36,7 @@ svg { ``` -{{EmbedLiveSample('Exemple', 150, '100%')}} +{{EmbedLiveSample("Пример", 150, '100%')}} ## Атрибуты @@ -82,7 +84,7 @@ svg { ### Глобальные атрибуты -- [Core Attributes](/docs/Web/SVG/Attribute/Core) +- [Core Attributes](/ru/docs/Web/SVG/Attribute/Core) - : Most notably: {{SVGAttr('id')}}, {{SVGAttr('tabindex')}} - [Styling Attributes](/docs/Web/SVG/Attribute/Styling) - : {{SVGAttr('class')}}, {{SVGAttr('style')}} diff --git a/files/ru/web/svg/element/polygon/index.md b/files/ru/web/svg/element/polygon/index.md index e4aa50a4423231..25423ee4d775fe 100644 --- a/files/ru/web/svg/element/polygon/index.md +++ b/files/ru/web/svg/element/polygon/index.md @@ -7,6 +7,8 @@ slug: Web/SVG/Element/polygon Элемент **``** описывает замкнутую фигуру, состоящую из набора последовательно соединённых между собой прямых линий. Для создания незамкнутых фигур используется элемент {{SVGElement("polyline")}}. +## Пример + ```css hidden html, body, @@ -25,7 +27,7 @@ svg { ``` -{{EmbedLiveSample('Exemple', 100, 100)}} +{{EmbedLiveSample("Пример", 100, 100)}} ## Атрибуты @@ -38,7 +40,7 @@ svg { ### Global attributes -- [Основные атрибуты](/docs/Web/SVG/Attribute/Core) +- [Основные атрибуты](/ru/docs/Web/SVG/Attribute/Core) - : Самые важные: {{SVGAttr('id')}}, {{SVGAttr('tabindex')}} - [Атрибуты стилизации](/docs/Web/SVG/Attribute/Styling) - : {{SVGAttr('class')}}, {{SVGAttr('style')}} diff --git a/files/ru/web/svg/element/use/index.md b/files/ru/web/svg/element/use/index.md index 01cf42c10787ff..761f13c435c34d 100644 --- a/files/ru/web/svg/element/use/index.md +++ b/files/ru/web/svg/element/use/index.md @@ -7,6 +7,8 @@ slug: Web/SVG/Element/use Элемент **``** берёт элементы из SVG-документа и дублирует их где-то ещё. +## Пример + ```css hidden html, body, @@ -30,13 +32,13 @@ svg { ``` -{{EmbedLiveSample('Exemple', 100, 100)}} +{{EmbedLiveSample("Пример", 100, 100)}} Эффект такой же, как если бы элементы были полностью склонированы в DOM, а затем расположены в месте, где находится элемент `use`, подобно элементам `