Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(zh): maintain redirected links (part 3) #22865

Merged
merged 9 commits into from
Aug 13, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ window.addEventListener("load", function () {
```

> [!NOTE]
> Chrome 不允許於載入事件中呼叫 [`Notification.requestPermission()`](/zh-TW/docs/Web/API/Notification.requestPermission) (參閱 [issue 274284](https://code.google.com/p/chromium/issues/detail?id=274284))。
> Chrome 不允許於載入事件中呼叫 [`Notification.requestPermission()`](/zh-TW/docs/Web/API/Notification.requestPermission) (參閱 [issue 274284](https://bugs.chromium.org/p/chromium/issues/detail?id=274284))。

### 已安裝的 Apps

Expand Down
2 changes: 1 addition & 1 deletion files/zh-tw/web/api/response/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ slug: Web/API/Response

## 範例

在[基本 fetch 範例](https://github.com/mdn/fetch-examples/tree/master/basic-fetch) ([run example live](http://mdn.github.io/fetch-examples/basic-fetch/)) 中,我們使用 `fetch()` 呼叫來得到圖片,並使用 {{htmlelement("img")}} tag 顯示。 這裡的`fetch()` 呼叫返回了一個 promise,它使用與資源 fetch 操作有關的 `Response` 進行解析。你可能有發現,由於我們要求的是一張圖片,所以需要用 {{domxref("Body.blob")}} ({{domxref("Response")}} 時做了 body) 讓 response 有正確的 MIME 類型。
在[基本 fetch 範例](https://github.com/mdn/fetch-examples/tree/main/basic-fetch) ([run example live](https://mdn.github.io/fetch-examples/basic-fetch/)) 中,我們使用 `fetch()` 呼叫來得到圖片,並使用 {{htmlelement("img")}} tag 顯示。 這裡的`fetch()` 呼叫返回了一個 promise,它使用與資源 fetch 操作有關的 `Response` 進行解析。你可能有發現,由於我們要求的是一張圖片,所以需要用 {{domxref("Body.blob")}} ({{domxref("Response")}} 時做了 body) 讓 response 有正確的 MIME 類型。

```js
const image = document.querySelector(".my-image");
Expand Down
6 changes: 3 additions & 3 deletions files/zh-tw/web/api/server-sent_events/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ slug: Web/API/Server-sent_events

- Remy Sharp's [EventSource polyfill](https://github.com/remy/polyfills/blob/master/EventSource.js)
- Yaffle's [EventSource polyfill](https://github.com/Yaffle/EventSource)
- Rick Waldron's [jquery plugin](https://github.com/rwldrn/jquery.eventsource)
- Rick Waldron's [jquery plugin](https://github.com/rwaldron/jquery.eventsource)

## 相關主題

Expand All @@ -31,5 +31,5 @@ slug: Web/API/Server-sent_events
## 參見

- A [Twitter like application](http://hacks.mozilla.org/2011/06/a-wall-powered-by-eventsource-and-server-sent-events/) powered by server-sent events and [its code on Github](https://github.com/mozilla/webowonder-demos/tree/master/demos/friends%20timeline).
- [HTML5 and Server-sent events](http://dsheiko.com/weblog/html5-and-server-sent-events)
- [Server-sent events using Asp.Net](http://rajudasa.blogspot.in/2012/05/html5-server-sent-events-using-aspnet.html)
- [HTML5 and Server-sent events](https://dsheiko.com/weblog/html5-and-server-sent-events/)
- [Server-sent events using Asp.Net](http://web.archive.org/web/20120913025456/http://rajudasa.blogspot.in/2012/05/html5-server-sent-events-using-aspnet.html)
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ evtSource.addEventListener("ping", function (event) {
上述的程式碼大同小異,不同之處在於若伺服器傳送了 `event` 欄位值為「ping」的訊息時它就會把 `data` 欄位的值解析為 JSON 並輸出到畫面上。

> [!WARNING]
> 當連線不是透過 **HTTP/2** 時,SSE 會受到最大連線數限制所苦,尤其當開啟多個分頁。每個瀏覽器有自己的限制數而且被限制在很低的數量(6)。這個問題已經被 [Chrome](https://bugs.chromium.org/p/chromium/issues/detail?id=275955) 和 [Firefox](https://bugzilla.mozilla.org/show_bug.cgi?id=906896) 標註為「Won't fix」(不修復)。限制是基於每個瀏覽器 + 網域,也就是說你可以針對 www\.example1.com 網域在所有的分頁中開啟六個 SSE 連線,另一個網域 www\.example2.com 也可以開啟六個(根據 [Stackoverflow](https://stackoverflow.com/a/5326159/1905229))。當使用 HTTP/2 時最大同時 _HTTP streams_ 連線數是由伺服器和客戶端之間協調(預設 100)。
> 當連線不是透過 **HTTP/2** 時,SSE 會受到最大連線數限制所苦,尤其當開啟多個分頁。每個瀏覽器有自己的限制數而且被限制在很低的數量(6)。這個問題已經被 [Chrome](https://bugs.chromium.org/p/chromium/issues/detail?id=275955) 和 [Firefox](https://bugzilla.mozilla.org/show_bug.cgi?id=906896) 標註為「Won't fix」(不修復)。限制是基於每個瀏覽器 + 網域,也就是說你可以針對 www\.example1.com 網域在所有的分頁中開啟六個 SSE 連線,另一個網域 www\.example2.com 也可以開啟六個(根據 [Stackoverflow](https://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource/5326159#5326159))。當使用 HTTP/2 時最大同時 _HTTP streams_ 連線數是由伺服器和客戶端之間協調(預設 100)。

## 從伺服器發送事件

Expand Down Expand Up @@ -97,7 +97,7 @@ while (true) {
迴圈的執行會獨立於連線的狀態,,所以在迴圈裡必須檢查連線的狀態,若斷線了要關閉連線(譬如,客戶端關閉了網頁)。

> [!NOTE]
> 你可以從下列的 Github 文章中找到包含本文所使用程式碼的完整範例 —— 參考 [Simple SSE demo using PHP.](https://github.com/mdn/dom-examples/tree/master/server-sent-events)
> 你可以從下列的 Github 文章中找到包含本文所使用程式碼的完整範例 —— 參考 [Simple SSE demo using PHP.](https://github.com/mdn/dom-examples/tree/main/server-sent-events)

## 錯誤處理

Expand Down Expand Up @@ -133,7 +133,7 @@ evtSource.close();
- `event`
- : 事件的類型。如果有指定則在瀏覽器端會對該事件名稱的監聽器發布事件;網頁的原始碼必須使用 `addEventListener()` 來監聽已命名的事件。 `onmessage` 處理器只有在訊息沒有指定事件名稱時才會被呼叫。
- `data`
- : 訊息的資料欄位。當 EventSource 連續接收到多列以 `data:` 開頭的內容;[它會串接這些內容](http://www.w3.org/TR/eventsource/#dispatchMessage)並為每一列插入一個換行字元。最後的換行會被移除。
- : 訊息的資料欄位。當 EventSource 連續接收到多列以 `data:` 開頭的內容;[它會串接這些內容](https://html.spec.whatwg.org/multipage/#dispatchMessage)並為每一列插入一個換行字元。最後的換行會被移除。
- `id`
- : {{domxref("EventSource")}} 物件的最新一個事件 ID 。
- `retry`
Expand Down
6 changes: 3 additions & 3 deletions files/zh-tw/web/api/web_audio_api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ Web Audio API 亦可控制音訊的空間定位 (Spatialized) 作業:透過 so
## 線上教學

- 使用 Web Audio API
- [Getting Started with the Web Audio API](http://www.html5rocks.com/tutorials/webaudio/intro/) (僅說明 WebKit-only 的非標準建置)
- [混合定位音訊 (Positional Audio) 與 WebGL](http://www.html5rocks.com/tutorials/webaudio/positional_audio/)
- [以 Web Audio API 開發遊戲音訊](http://www.html5rocks.com/tutorials/webaudio/games/)
- [Getting Started with the Web Audio API](https://www.html5rocks.com/tutorials/webaudio/intro/) (僅說明 WebKit-only 的非標準建置)
- [混合定位音訊 (Positional Audio) 與 WebGL](https://www.html5rocks.com/tutorials/webaudio/positional_audio/)
- [以 Web Audio API 開發遊戲音訊](https://www.html5rocks.com/tutorials/webaudio/games/)
- [將 webkitAudioContext 程式碼移植為標準的 AudioContext](/zh-TW/docs/Web_Audio_API/Porting_webkitAudioContext_code_to_standards_based_AudioContext)

## 規格
Expand Down
18 changes: 9 additions & 9 deletions files/zh-tw/web/api/web_workers_api/using_web_workers/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ dedicated worker 只能被產生它的檔案存取,下面我們先介紹簡單

### 偵測 Worker 功能

為了向下相容、避免錯誤,最好是確保 worker 存在後再取用之 ([main.js](https://github.com/mdn/simple-web-worker/blob/gh-pages/main.js)):
為了向下相容、避免錯誤,最好是確保 worker 存在後再取用之 ([main.js](https://github.com/mdn/simple-web-worker/blob/main/main.js)):

```js
if (window.Worker) {
Expand All @@ -40,15 +40,15 @@ if (window.Worker) {

### 產生 dedicated worker

只要呼叫 {{domxref("Worker.Worker", "Worker()")}} 建構子,傳入 JS 檔案的 URI,便可以生成一個 worker 執行緒 ([main.js](https://github.com/mdn/simple-web-worker/blob/gh-pages/main.js)):
只要呼叫 {{domxref("Worker.Worker", "Worker()")}} 建構子,傳入 JS 檔案的 URI,便可以生成一個 worker 執行緒 ([main.js](https://github.com/mdn/simple-web-worker/blob/main/main.js)):

```js hidden
var myWorker = new Worker("worker.js");
```

### 和 dedicated worker 發送訊息

{{domxref("Worker.postMessage", "postMessage()")}} 方法以及 {{domxref("Worker.onmessage", "onmessage")}} 事件處理器就是和 worker 發送訊息的關鍵 ([main.js](https://github.com/mdn/simple-web-worker/blob/gh-pages/main.js)):
{{domxref("Worker.postMessage", "postMessage()")}} 方法以及 {{domxref("Worker.onmessage", "onmessage")}} 事件處理器就是和 worker 發送訊息的關鍵 ([main.js](https://github.com/mdn/simple-web-worker/blob/main/main.js)):

```js
first.onchange = function () {
Expand All @@ -64,7 +64,7 @@ second.onchange = function () {

範例中有兩個 {{htmlelement("input")}} 元素,first 和 second,當元素值改變時,我們會利用 postMessage() 方法告訴 worker 改變的值 (這邊用陣列,也可以用其他類別)。

然後在 worker 裡我們從 `onmessage` 接收訊息 ([worker.js](https://github.com/mdn/simple-web-worker/blob/gh-pages/worker.js)):
然後在 worker 裡我們從 `onmessage` 接收訊息 ([worker.js](https://github.com/mdn/simple-web-worker/blob/main/worker.js)):

```js
onmessage = function (e) {
Expand Down Expand Up @@ -158,15 +158,15 @@ shared worker 能夠被多個程式腳本存取,縱使跨越不同 window、if

### 產生 shared worker

和 dedicated worker 做法差不多,只是用另一個 SharedWorker 建構子來產生 shared worker,見 [index.html](https://github.com/mdn/simple-shared-worker/blob/gh-pages/index.html) 和 [index2.html](http://mdn.github.io/simple-shared-worker/index2.html):
和 dedicated worker 做法差不多,只是用另一個 SharedWorker 建構子來產生 shared worker,見 [index.html](https://github.com/mdn/simple-shared-worker/blob/main/index.html) 和 [index2.html](http://mdn.github.io/simple-shared-worker/index2.html):

```js
var myWorker = new SharedWorker("worker.js");
```

相當不 一樣的是和 shared worker 溝通必須要透過 port 物件,其實 dedicated worker 也是如此,只不過一切是在背景後自動完成。

開啟 port 連線一是在 onmessage 事件下背景完成,二是藉由主動呼叫 start() 好開始傳送訊息。範例 [multiply.js](https://github.com/mdn/simple-shared-worker/blob/gh-pages/multiply.js) 以及 [worker.js](https://github.com/mdn/simple-shared-worker/blob/gh-pages/worker.js) 因為註冊了 onmessage 事件,所以其實可以省略呼叫 start(),然而若是 message 事件是經由 `addEventListener()註冊,那麼便需要呼叫 start() 了。`
開啟 port 連線一是在 onmessage 事件下背景完成,二是藉由主動呼叫 start() 好開始傳送訊息。範例 [multiply.js](https://github.com/mdn/simple-shared-worker/blob/main/multiply.js) 以及 [worker.js](https://github.com/mdn/simple-shared-worker/blob/main/worker.js) 因為註冊了 onmessage 事件,所以其實可以省略呼叫 start(),然而若是 message 事件是經由 `addEventListener()註冊,那麼便需要呼叫 start() 了。`

當使用 start() 開啟 port 連線,那麼雙向溝通便需要主執行緒和 worker 兩端都呼叫 start()。

Expand All @@ -180,7 +180,7 @@ port.start(); // called in worker thread, assuming the port variable references

### 和 shared worker 發送訊息

如同前面,現在可以呼叫 `postMessage()` 發送訊息,只不過這次需要透過 port 物件 (一樣請參考 [multiply.js](https://github.com/mdn/simple-shared-worker/blob/gh-pages/multiply.js) 和 [square.js](https://github.com/mdn/simple-shared-worker/blob/gh-pages/square.js)):
如同前面,現在可以呼叫 `postMessage()` 發送訊息,只不過這次需要透過 port 物件 (一樣請參考 [multiply.js](https://github.com/mdn/simple-shared-worker/blob/main/multiply.js) 和 [square.js](https://github.com/mdn/simple-shared-worker/blob/main/square.js)):

```js
squareNumber.onchange = function () {
Expand All @@ -189,7 +189,7 @@ squareNumber.onchange = function () {
};
```

worker 方面也增加了一些程式碼 ([worker.js](https://github.com/mdn/simple-shared-worker/blob/gh-pages/worker.js)):
worker 方面也增加了一些程式碼 ([worker.js](https://github.com/mdn/simple-shared-worker/blob/main/worker.js)):

```js
onconnect = function (e) {
Expand All @@ -208,7 +208,7 @@ onconnect = function (e) {

取得 port 之後,我們註冊 port 上的 onmessage 事件,當有訊息進來便取回資料進行運算後回傳回去;註冊 onmessage 事件的同時也自動建立連線,所以說不需要呼叫 start() 了。

最後在主執行緒端,我們同樣由 onmessage 事件取回回傳過來的訊息 (一樣請參考 [multiply.js](https://github.com/mdn/simple-shared-worker/blob/gh-pages/multiply.js) 和 [square.js](https://github.com/mdn/simple-shared-worker/blob/gh-pages/square.js)):
最後在主執行緒端,我們同樣由 onmessage 事件取回回傳過來的訊息 (一樣請參考 [multiply.js](https://github.com/mdn/simple-shared-worker/blob/main/multiply.js) 和 [square.js](https://github.com/mdn/simple-shared-worker/blob/main/square.js)):

```js
myWorker.port.onmessage = function (e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -266,12 +266,12 @@ function drawScene(gl, programInfo, buffers) {

## 矩陣運算

矩陣的運算看起來很複雜,但其實[一步一步運算其實不會那麼困難](https://webglfundamentals.org/webgl/lessons/webgl-2d-matrices.html)。大部分使用者不會寫自己的運算函數,多半是使用現成的矩陣函數庫,這個例子中我們用的是 [glMatrix library](http://glmatrix.net/) 。
矩陣的運算看起來很複雜,但其實[一步一步運算其實不會那麼困難](https://webglfundamentals.org/webgl/lessons/webgl-2d-matrices.html)。大部分使用者不會寫自己的運算函數,多半是使用現成的矩陣函數庫,這個例子中我們用的是 [glMatrix library](https://glmatrix.net/) 。

可參考以下資料

- [Matrices](https://webglfundamentals.org/webgl/lessons/webgl-2d-matrices.html) on WebGLFundamentals
- [Matrices](http://mathworld.wolfram.com/Matrix.html) on Wolfram MathWorld
- [Matrix](<http://en.wikipedia.org/wiki/Matrix_(mathematics)>) on Wikipedia
- [Matrices](https://mathworld.wolfram.com/Matrix.html) on Wolfram MathWorld
- [Matrix](<https://en.wikipedia.org/wiki/Matrix_(mathematics)>) on Wikipedia

{{PreviousNext("Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL", "Web/API/WebGL_API/Tutorial/Using_shaders_to_apply_color_in_WebGL")}}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ slug: Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL

{{DefaultAPISidebar("WebGL")}} {{Next("Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context")}}

[WebGL](http://www.khronos.org/webgl/) 讓網頁內容能藉由一種基於 [OpenGL ES](http://www.khronos.org/opengles/) 2.0 的 API 的幫助,於支援此 API 的瀏覽器環境中,不需使用外掛程式就能在 HTML 的 [`canvas`](/zh-TW/docs/Web/API/Canvas_API) 元素中實現二維及三維渲染。 WebGL 程式包含了由 JavaSrcipt 及著色器(GLSL)撰寫的控制碼以及在電腦的圖形處理器( GPU )上執行的特效程式碼(著色器程式碼)。WebGL 元素可以加入其他 HTML 元素之中並與網頁或網頁背景的其他部分混合。
[WebGL](https://www.khronos.org/webgl/) 讓網頁內容能藉由一種基於 [OpenGL ES](https://www.khronos.org/opengles/) 2.0 的 API 的幫助,於支援此 API 的瀏覽器環境中,不需使用外掛程式就能在 HTML 的 [`canvas`](/zh-TW/docs/Web/API/Canvas_API) 元素中實現二維及三維渲染。 WebGL 程式包含了由 JavaSrcipt 及著色器(GLSL)撰寫的控制碼以及在電腦的圖形處理器( GPU )上執行的特效程式碼(著色器程式碼)。WebGL 元素可以加入其他 HTML 元素之中並與網頁或網頁背景的其他部分混合。

這篇文章將會向你介紹 WebGL 的基礎。這篇文章假設你已經對於三維圖學涉及的數學有所了解,並且它將不會被佯裝為三維圖學的教材。在我們的學習區域內有初學者指南讓你完成編程任務:[Learn WebGL for 2D and 3D graphics](/zh-TW/docs/Learn/WebGL).

Expand Down Expand Up @@ -64,8 +64,8 @@ function main() {

## 亦可參考

- [An introduction to WebGL](https://dev.opera.com/articles/introduction-to-webgl-part-1/): 由 Luz Caballero 撰寫,並出版在 dev.opera.com。 這篇文章點出了 WebGL 的意義,解釋了其運作(包含渲染管路的觀念),並介紹了一些 WebGL libraries。
- [WebGL Fundamentals](http://webglfundamentals.org/)
- [An intro to modern OpenGL:](http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html) 由 Joe Groff 撰寫的一系列關於 OpenGL 的好文章,提供了 OpenGL 清楚的簡介,從其歷史到重要的圖像管路概念,以及一些展示其原理的範例。如果你完全不懂 OpenGL,這將是一個好的入門介紹。
- [An introduction to WebGL](http://web.archive.org/web/20240212020729/https://dev.opera.com/articles/introduction-to-webgl-part-1/): 由 Luz Caballero 撰寫,並出版在 dev.opera.com。 這篇文章點出了 WebGL 的意義,解釋了其運作(包含渲染管路的觀念),並介紹了一些 WebGL libraries。
- [WebGL Fundamentals](https://webglfundamentals.org/)
- [An intro to modern OpenGL:](https://duriansoftware.com/joe/an-intro-to-modern-opengl.-table-of-contents) 由 Joe Groff 撰寫的一系列關於 OpenGL 的好文章,提供了 OpenGL 清楚的簡介,從其歷史到重要的圖像管路概念,以及一些展示其原理的範例。如果你完全不懂 OpenGL,這將是一個好的入門介紹。

{{Next("Web/API/WebGL_API/Tutorial/Adding_2D_content_to_a_WebGL_context")}}
2 changes: 1 addition & 1 deletion files/zh-tw/web/api/webgl_api/tutorial/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ slug: Web/API/WebGL_API/Tutorial

{{DefaultAPISidebar("WebGL")}}

[WebGL](http://www.khronos.org/webgl/) 讓網頁內容可以使用一個基於 [OpenGL ES](http://www.khronos.org/opengles/) 2.0 的 API 以在 HTML {{HTMLElement("canvas")}}中執行 3D 渲染,且瀏覽器無需使用任何 plug-in。WebGL programs 由 JavaScript 撰寫的指令碼以及透過電腦的 Graphics Processing Unit (GPU)上運行的特殊效果程式碼(shader code)組成。WebGL 元件可與其他 HTML 元件混合,並與該頁的其他部分或該頁背景組合使用。
[WebGL](https://www.khronos.org/webgl/) 讓網頁內容可以使用一個基於 [OpenGL ES](https://www.khronos.org/opengles/) 2.0 的 API 以在 HTML {{HTMLElement("canvas")}}中執行 3D 渲染,且瀏覽器無需使用任何 plug-in。WebGL programs 由 JavaScript 撰寫的指令碼以及透過電腦的 Graphics Processing Unit (GPU)上運行的特殊效果程式碼(shader code)組成。WebGL 元件可與其他 HTML 元件混合,並與該頁的其他部分或該頁背景組合使用。

本教學描述如何使用 `<canvas>` 元件描繪 WebGL 圖像/圖形, 從基礎開始。提供的範例將讓你對於可以用 WebGL 做到什麼有清楚的概念,並提供程式碼片段讓你可以著手建立自己的內容。

Expand Down
2 changes: 1 addition & 1 deletion files/zh-tw/web/api/websocket/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ void send(
## 參見

- [製作 WebSocket 客戶端應用程式](/zh_tw/WebSockets/Writing_WebSocket_client_applications)
- [HTML5: WebSockets](http://dev.w3.org/html5/websockets/)
- [HTML5: WebSockets](https://websockets.spec.whatwg.org/)

## 瀏覽器兼容

Expand Down
2 changes: 1 addition & 1 deletion files/zh-tw/web/api/websockets_api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ WebSocket 是一種讓瀏覽器與伺服器進行一段互動通訊的技術。

## 參見

- [WebSocket API Specification](http://dev.w3.org/html5/websockets/)
- [WebSocket API Specification](https://websockets.spec.whatwg.org/)
- [Server-Sent Events](/zh-TW/Server-sent_events)

## 瀏覽器兼容
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,4 +179,4 @@ mySocket.close();

## 參考資料

[IETF: The WebSocket protocol draft-abarth-thewebsocketprotocol-01](https://tools.ietf.org/html/draft-abarth-thewebsocketprotocol-01)
[IETF: The WebSocket protocol draft-abarth-thewebsocketprotocol-01](https://datatracker.ietf.org/doc/html/draft-abarth-thewebsocketprotocol-01)
Loading