(P)NaCl 淘汰公告
由於越來越多瀏覽器支援 WebAssembly,因此我們打算將
並計劃移除對 WebAssembly 的支援
PNaCl 在 2019 年第 4 季推出 (Chrome 應用程式除外)。我們認為,圍繞 WebAssembly 的蓬勃生態系統更適合新舊高效能網頁應用程式,而 PNaCl 的使用率也已低到足以淘汰。
自 Chrome 76 起,開放網路上的 PNaCl 已移至原點測試後方,這是網頁開發人員註冊並取得預設未啟用的功能的機制。這通常是新提案的功能,但在本例中,這是已淘汰的功能。開發人員可以透過來源試用控制台註冊
並接收符記,您可以將該符記嵌入網頁中,這樣使用者無需使用旗標即可啟用功能。
(詳情請參閱連結的指南)。試用預計至 Chrome 78 為止 (大約至 2019 年 12 月為止)。
這項異動不適用於 Chrome 應用程式或擴充功能中的 NaCl 或 PNaCl,以及「enable-nacl」
chrome://flags 中的旗標也可以用來在本機啟用 PNaCl 進行測試
(此標記會保留該標記目前用來在任何頁面啟用非 PNaCl「原生」NCl 的功能)。
我們也於近期宣布,將在 2018 年第 1 季停用 ChromeOS 以外的 Chrome 應用程式。
以大多數的 (P)NaCl 用途來說,我們建議您將
從 NaCl SDK 改用 Emscripten。
遷移作業可能相當簡單明瞭
如果應用程式可攜至 Linux,請使用
SDL 或 POSIX API。
雖然無法直接支援 NaCl / Ppper API,
因此我們嘗試列出 Web API 對等項目
如需更複雜的移植案例,請透過 native-client-discuss@googlegroups.com 與我們聯絡。
API 遷移
我們在此概略說明 (P)NaCl 公開的每個 API 的 Web Platform 替代方案狀態。此外,這個表格列出 Emscripten 的資料庫或選項
提供最接近的替代品
我們預計在 2017 年為 WebAssembly 新增共用記憶體執行緒支援功能,因為執行緒對於 (P)NaCl 最有趣的用途而言至關重要。假設即將支援執行緒的遷移項目
。如果應用程式的流量控制嚴重仰賴封鎖功能
API 時,您可能也會需要支援執行緒,以便輕鬆進行攜碼轉移。
雖然我們力求在這個表格中提供準確的資訊,
沒有懷疑的錯誤或遺漏。
如果您遇到問題,請透過 native-client-discuss@googlegroups.com 與我們聯絡
PPAPI
PPB_Audio
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
x |
SDL (部分) |
GAP (部分) - AudioWorkletNode ROUGHLY 同等 |
AudioWorkletSpec 已完成,但 AudioDeviceClient 或許更適合這個 API。社群仍在指定 AudioDeviceClient。工作區塊可能與此 API 不完全相同。 |
GetCurrentConfig |
|
SDL |
音訊情境*。(取得設定傳遞) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (參數) |
每次都會傳遞,而非附加至緩衝區。 |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (參數) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP - WebAudio 只會使用 32 位元的浮點值,PPAPI 則使用 16 位元 int。 |
PPAPI 理論上支援多種取樣大小。實際上,它僅支援 16 位元樣本。不幸的是,開發人員要求使用 16 位元樣本大小,以節省記憶體用量。下一版 Web Audio 規格將實作 16 位元取樣支援功能。您可以使用與 Firefox 類似的方式實作 AudioBuffer 最佳化,方法是針對來自 decodeAudioData 的音訊使用 16 位元緩衝區 |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 Stereo16Bit |
|
GAP |
GAP - 僅支援 32 位元浮點值 |
下一個版本的網路音訊規格將支援 16 位元樣本。 |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (來自預設建構) |
根據預設,AudioContext 的偏好取樣率會與硬體音訊裝置的實際取樣率相符。 |
RecommendSampleFrameCount |
|
GAP |
GAP - 將與規劃的 AudioDeviceClient 進行處理 |
目前有一個開放問題,允許使用者指定大小,但仍在定義中。這類問題最好透過 AudioDeviceClient 處理,因為它可以告訴您給定硬體的適當大小。 |
PPB_Console
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
記錄 |
|
utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
除非開發人員針對 LogWithSource 提供的功能提出特定用途,否則 Console API 可視為相當完整的替代方案。開發人員工具來源對應可用於偵錯轉譯後的 JavaScript,並以原始來源語言進行偵錯。 |
PPB_Core
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
getTime |
|
utime |
新的 Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
可以建構對等的同步處理作業。 |
PPB_FileIO
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
FS (部分) |
window.chooseFileSystemEntries() |
create 和 open 的用法不同,但兩者具有相同的權限。 |
開啟 |
|
FS (部分) |
window.chooseFileSystemEntries() |
|
查詢 |
|
FS (部分) |
Blob.size、FileSystemHandle.getFile()、FileSystemHandle.getDirectory()、File.lastModified |
GAP (部分) - Blob.type 也可用來檢查 MIME 類型。您無法使用原生檔案系統 API 判斷檔案系統類型、建立時間和上次存取時間。 |
輕觸 |
|
FS (部分) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
閱讀資料 |
|
FS (部分) |
Blob.slice().arrayBuffer() |
|
寫入 |
|
FS (部分) |
FileSystemWriter.write() |
|
SetLength |
|
FS (部分) |
FileSystemWriter.truncate() |
|
清除 |
|
GAP (部分) |
GAP (部分) - 呼叫 FileSystemWrite.close() 時會刷新檔案 |
這與設計相關的設計在於,由於原生 File System API 檔案會暴露在作業系統上,因此在向作業系統顯示資料之前,必須先執行安全瀏覽檢查。 |
關閉 |
|
FS (部分) |
FileSystemWriter.close() |
不會取消待處理的作業,但會將目前寫入磁碟的所有資料刷新。 |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() 或 Blob.arrayBuffer() |
允許平行讀取多個子範圍讀取作業。 |
PPB_FileRef
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
FS (部分) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (部分) |
FileSystem.type |
|
GetName |
|
FS (部分) |
File.name |
|
GetPath |
|
FS (部分) |
GAP (部分) - 使用 Native File System API 時,可以從參照使用 FileSystemHandle.resolve(FileSystemHandle) 找出檔案的相對路徑 |
無法判斷檔案的絕對路徑,使用者必須授予存取包含檔案的目錄的權限。 |
GetParent |
|
FS (部分) |
GAP (部分) - 使用 Native File System API 時,可以從參照使用 FileSystemHandle.resolve(FileSystemHandle) 找出檔案的相對路徑 |
使用者必須授予存取檔案所在目錄的權限。 |
MakeDirectory |
|
FS (部分) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
輕觸 |
|
FS (部分) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
透過書面方式可以調整修改時間。 |
刪除 |
|
FS (部分) |
FileSystemDirectoryHandle.removeEntry() |
與 PPAPI 不同,目錄不必為空。 |
重新命名 |
|
FS (部分) |
GAP (部分) - 透過原生 File System API,您可以使用 FileSystemFileHandle.getFile() 作為新名稱的組合,以及含舊檔案內容的 FileSystemFileHandle.createWriter().write(),使用新名稱寫入檔案。接著 FileSystemDirectoryHandle.removeEntry() 刪除舊檔案。 |
在原生檔案系統 API 中,沒有任何直接的 API 可在單一步驟中執行這項操作。 |
查詢 |
|
GAP (部分) |
Blob.size、FileSystemHandle.getFile()、FileSystemHandle.getDirectory()、File.lastModified |
GAP (部分) - Blob.type 也可用來檢查 MIME 類型。您無法使用原生檔案系統 API 判斷檔案系統類型、建立時間和上次存取時間。 |
ReadDirectoryEntries |
|
FS (部分) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
FS (部分) |
window.requestFileSystem |
JS API 可在單一步驟中執行這兩項操作 |
開啟 |
|
GAP |
window.requestFileSystem |
JS API 一個步驟就能完成這兩項工作 |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
範例 |
|
SDL |
遊戲手把。* |
Gamepad 物件會顯示與 NavigationStart 相關的時間戳記。從硬體 https://www.w3.org/TR/gamepad/#gamepad-interface 接收資料時,已更新 |
PPB_Graphics2D
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
Canvas.getContext('2d') |
|
說明 |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
捲動 |
|
GAP |
CanvasRenderingContext2D.scrollIntoView、CanvasRenderingContext2D.drawImage |
GAP (部分):可使用 drawImage 將畫布繪製到自身上 (並加上偏移),然後填入其餘部分。 |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
清除 |
|
GAP |
沒有直接對等項目 |
GAP (部分) -
繪圖程式碼結尾會一律有隱含清除。不太可能
並做出相應的變更不過,OffscreenCanvas 和 ImageBitmapRenderingContext 的組合可提供類似的功能。 |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (部分) - WebGL 2.0 和 Emscripten 公開的 OpenGL ES 3.0 支援使用者定義的多重取樣螢幕緩衝區,可設定所有可透過 PPAPI 設定的參數。 |
建立 |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(..、OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w;Canvas.height = h; |
|
SwapBuffers |
|
GAP |
沒有直接對等項目 |
GAP (部分) -
繪圖程式碼結尾會一律有隱含清除。不太可能
並做出相應的變更不過,OffscreenCanvas 和 ImageBitmapRenderingContext 的組合可提供類似的功能。 |
PPB_ImageData
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetNativeImageDataFormat |
|
SDL |
ImageData 要求 RGBA 順序 |
|
IsImageDataFormatSupported |
|
SDL |
ImageData 規定 RGBA 順序 |
|
建立 |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
說明 |
|
SDL |
ImageData 從未有步幅 |
|
地圖 |
|
SDL |
ImageData.data |
|
取消對應 |
|
SDL |
ImageData.data |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
RequestInputEvents |
|
SDL |
沒有直接對等項目 |
由於 JS/Wasm 會在主執行緒上執行,且可以更經濟地篩選事件,而不會產生跨程序的往返作業,因此缺少這項功能可能不太重要。 |
RequestFilteringInputEvents |
|
SDL |
滑鼠* 鍵* 輪* 觸控* 構圖* 事件 |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
事件類別子系 |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
dblclick 與 mousedown 事件 |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode 種類包含這項資訊,但目前不完整。 |
我們也討論瞭如何實作 WheelEvent.deltaMode API:https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode 種類包含這項資訊,但目前不完整。 |
實作 WheelEvent.deltaMode API 的討論:https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (自行判斷) |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - 沒有直接對應項目 |
這類資料可能可從 CompositionEvent.data 擷取。 |
GetSegmentOffset |
|
GAP |
GAP - 沒有直接對等項目 |
|
GetTargetSegment |
|
GAP |
GAP - 沒有直接對等項目 |
|
GetSelection |
|
GAP |
GAP - 沒有直接對應項目 |
|
PPB_Instance
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
BindGraphics |
|
SDL |
Canvas.getContext (由於繫結是自動完成,因此無關緊要)。 |
|
IsFullFrame |
|
GAP |
GAP - 沒有等同於 mime type 處理常式的功能。 |
NaCl 應用程式可以註冊來處理特定 MIME 類型,並擁有整份文件。 |
DidCreate |
|
不適用 |
<Element>[key] |
一般 DOM 存取權可讓您篩選標籤屬性 |
DidDestroy |
|
不適用 |
不適用 |
未針對 NaCl 觸發 |
DidChangeView |
|
不適用 |
元素「resize」事件 |
|
DidChangeFocus |
|
不適用 |
元素「聚焦」、「焦點」、「焦點」活動 |
|
HandleDocumentLoad |
|
不適用 |
GAP - 無法註冊為 MIME 類型處理常式 |
您可以透過應用程式和資訊清單項目,設定 NaCl 模組來處理特定 mime 類型。 |
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
設定 |
|
GAP |
getUserMedia() |
getUserMedia() 的限制可提供要在 MediaStreamTrack 中使用的設定值。 |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP - 沒有對等項目 |
|
RecycleBuffer |
|
GAP |
GAP - 沒有等同功能 |
|
關閉 |
|
GAP |
MediaStreamTrack.stop() |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
畫布擷取 |
畫布擷取功能可讓你透過程式輔助方式導入影片影格。 |
設定 |
|
GAP |
applyConstraints()、getUserMedia() |
GAP (部分) - Web API 中的可用設定範圍可能與 PPAPI 不同。 |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP - 不等於 PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream 無法預先載入,因此不會進行緩衝處理:https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP - 不等於 PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - 沒有對等項目 |
|
RecycleFrame |
|
GAP |
GAP - 沒有等同功能 |
|
關閉 |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - 沒有對等項目 |
|
PutFrame |
|
GAP |
GAP - 沒有等同功能 |
|
PPB_MessageLoop
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
不適用 |
大多數情況下,工作站都有隱含的事件迴圈。 |
|
GetForMainThread |
|
不適用 |
大多是無關緊要的,worker 會取得隱含的事件迴圈。 |
|
GetCurrent |
|
不適用 |
大多數情況下,工作站都有隱含的事件迴圈。 |
|
AttachToCurrentThread |
|
不適用 |
大多是無關緊要的,worker 會取得隱含的事件迴圈。 |
|
在 |
|
不適用 |
大多數情況下,工作站都有隱含的事件迴圈。 |
|
PostWork |
|
不適用 |
大多是無關緊要的,worker 會取得隱含的事件迴圈。 |
|
PostQuit |
|
不適用 |
大多是無關緊要的,worker 會取得隱含的事件迴圈。 |
|
PPB_Messaging
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
PostMessage |
|
不適用 |
Window.postMessage |
|
RegisterMessageHandler |
|
不適用 |
Window.addEventListener |
|
UnregisterMessageHandler |
|
不適用 |
Window.removeEventListener |
|
PPB_MouseCursor
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
SetCursor |
|
SDL |
Element.style.cursor |
系統支援同一組股票遊標。
您可以使用 url(..) 建立自訂游標。動態自訂游標則可使用資料 URI 建立。CSS3 支援指定互動區。 |
PPB_MouseLock
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
幾種方法 |
|
OpenGLES |
關閉 WebGL 1.0 功能。 |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
SetTextInputType |
|
GAP |
GAP - 可能由 Input Method Editor API 填入 |
部分開發人員希望能夠以這個方式提示,或者希望能夠在畫布中以內嵌方式攔截及顯示輸入法編輯器事件 / 輸出內容。 |
UpdateCaretPosition |
|
GAP |
GAP - 可能由輸入法編輯器 API 填補 |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP - 可能由輸入法編輯器 API 填補 |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP - 可能由輸入法編輯器 API 填補 |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
embind |
new XMLHttpRequest(); |
|
開啟 |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - 沒有 XMLHTTPRequest 等同項目 |
|
GetUploadProgress |
|
embind |
XMLHttpRequest 的「progress」事件 |
|
|
|
GAP |
FetchObserver |
尚未推測或實作;https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest 的「progress」事件 |
|
|
|
GAP |
FetchObserver |
尚未規範或實作;https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
擷取回應。* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
內文。* (回應是主體) |
|
FinishStreamingToFile |
|
embind |
GAP - 沒有直接對等項目 |
XMLHttpRequest 和 Fetch 都假設會將資料串流至記憶體,而非直接傳送至儲存空間。 |
關閉 |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API:AbortSignal 和 AbortController |
|
PPB_URLRequestInfo
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
embind |
XMLHttpRequest |
|
|
|
embind |
擷取要求 |
|
SetProperty |
|
GAP |
GAP - 沒有 XMLHttpRequest 的直接對等項目 |
XMLHttpRequest 無法直接針對個別請求限制下列重新導向、串流至檔案、設定參照網址或憑證政策。 |
|
|
embind |
要求。* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - 兩者都必須有完整的圖片,而非區塊。 |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
fetch() 上傳串流 |
https://www.chromestatus.com/features/5274139738767360 |
|
|
不適用 |
<form> |
您也可以使用 FileReader 讀取並上傳檔案,但比較像是 AttachDataToBody |
PPB_URLResponseInfo
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders 和其他參數 |
|
|
|
embind |
擷取回應。* |
|
GetBodyAsFileRef |
|
embind |
擷取回應 (內文) .blob() |
假設儲存層會最佳化傳輸作業。 |
PPB_Var
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
不適用 |
不適用 |
|
VarToResource |
|
不適用 |
不適用 |
|
PPB_VarArray
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
取得 |
|
embind |
陣列[i] |
|
Set |
|
embind |
陣列 [i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
embind |
新 ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
地圖 |
|
GAP |
GAP - 沒有直接對等項目 |
Asm.js / Wasm 模組無法對應 ArrayBuffer 的區域,但只能對應其單一線性記憶體堆積。
日後推出的多個回憶集錦或記憶體對應功能,或許能改善這個問題。 |
取消對應 |
|
GAP |
GAP - 沒有直接對應項目 |
|
PPB_VarDictionary
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
embind |
{} |
|
取得 |
|
embind |
<Object>[i] |
|
Set |
|
embind |
<Object>[i] = x |
|
刪除 |
|
embind |
delete <Object>[i] |
|
HasKey |
|
embind |
<Object> 中的 x |
|
GetKeys |
|
embind |
for (<Object> 中的 k) {} |
沒有對等的常值,但可以建構。 |
PPB_VideoDecoder
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
GAP - 使用 VideoDecoder() 以提議的 WebCodecs API 進行處理 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
初始化 |
|
GAP |
GAP - 會使用建議的 WebCodecs API 處理,並使用 VideoDecoder() 初始化參數 (VideoDecoderInitParameters) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP - 使用 ReadableStream.pipeThrough(VideoDecoder) 時,透過提議的 WebCodecs API 進行處理 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - 會使用建議的 WebCodecs API 處理,方法是使用 ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。目前的設計會自動回收圖片,並繼續進行解碼程序。 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
清除 |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。這個 API 會呼叫 Flush(),但仍有待討論如何在解碼呼叫中排序。 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
重設 |
|
GAP |
GAP - 刪除 VideoDecoder 執行個體並建立新執行個體,以處理提議的 WebCodecs API 進行處理。這不如專屬的重設方法效率,但我們仍在討論 Reset() API 的語意。 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
GAP - 會使用 VideoEncoder() 處理建議的 WebCodecs API |
|
GetSupportedProfiles |
|
GAP |
GAP (部分) - navigator.mediaCapabilities.encodingInfo() |
您必須逐一檢查支援的設定檔。 |
初始化 |
|
GAP |
GAP - 將使用提議的 WebCodecs API 使用 VideoEncoder() 初始化參數進行處理 |
|
GetFramesRequired |
|
GAP |
GAP - 沒有等同功能 |
Web Codecs API 內部使用的影格池不太可能會公開。 |
GetFrameCodedSize |
|
GAP |
GAP - 沒有等同功能 |
Web Codecs API 內部使用的影格集區不太可能對外公開。 |
GetVideoFrame |
|
GAP |
GAP - 會使用 ReadableStream.pipeThrough(VideoEncoder) 使用建議的 WebCodecs API 處理。這樣可直接將可讀串流中的資料編碼,而不必在編碼前擷取單一影格來填入資料。 |
|
編碼 |
|
GAP |
GAP - 使用 ReadableStream.pipeThrough(VideoEncoder) 時,透過提議的 WebCodecs API 進行處理 |
|
GetBitstreamBuffer |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。目前的設計將自動通過傳輸的編碼位元串流緩衝區。 |
WebCodecs API 目前假設位元串流緩衝區可以複製而非集區,因此不需要回收。 |
RecycleBitstreamBuffer |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。目前設計會自動回收緩衝區,以便繼續進行編碼程序。 |
由於效能影響較小,這項做法日後不太可能有所變動。 |
RequestEncodingParametersChange |
|
GAP |
GAP - 將由提案的 Web Codecs API 處理。某些參數可立即變更,有些參數則需要先終止編碼器。 |
|
關閉 |
|
GAP |
GAP - 使用 VideoEncoder.Close(),以提議的 WebCodecs API 處理 |
|
PPB_VideoFrame
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetTimestamp |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。 |
|
SetTimestamp |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。 |
|
GetFormat |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。 |
|
GetSize |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。 |
|
GetDataBuffer |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。 |
|
GetDataBufferSize |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。 |
|
PPB_View
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
屬於文件,而非單一元素。 |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<元素>.scrollTop/<元素>.scrollLeft |
|
PPB_WebSocket
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
WebSocket.WebSocket |
|
連結 |
|
GAP |
WebSocket.WebSocket(網址, ...)
WebSocket 開啟活動 |
|
關閉 |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
WebSocket 的「訊息」活動
WebSocket 的「錯誤」活動
WebSocket 的「close」活動 |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
圖形 3D 情境遺失 |
|
SDL |
畫布「webglcontextlost」事件 |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
DidCreate |
|
不適用 |
<Element>[key] |
一般 DOM 存取權可讓您篩選標籤屬性 |
DidDestroy |
|
不適用 |
不適用 |
未針對 NaCl 觸發 |
DidChangeView |
|
不適用 |
元素「resize」事件 |
|
DidChangeFocus |
|
不適用 |
元素「聚焦」、「焦點」、「焦點」活動 |
|
HandleDocumentLoad |
|
不適用 |
GAP - 無法註冊為 MIME 類型處理常式 |
透過應用程式提供的 NaCl 模組 + 資訊清單項目可以進行設定,處理特定的 MIME 類型。 |
PPP_MessageHandler
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
HandleMessage |
|
embind |
MessagePort「message」事件
Window「message」事件 |
|
HandleBlockingMessage |
|
不適用 |
GAP - 沒有直接對等項目 |
您也可以使用 Atomics.wait 在主執行緒外執行類似的同步處理作業。這項功能是為了支援同步外掛程式 API 的模擬。 |
PPP_Messaging
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
HandleMessage |
|
embind |
MessagePort「message」事件
Window「message」事件 |
|
PPP_MouseLock
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
MouseLockLost |
|
SDL |
元素「pointerlockchange」和「pointerlockerror」事件 |
|
IRT
PPB_Audio
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
x |
SDL (部分) |
GAP (部分) - AudioWorkletNode ROUGHLY 同等 |
AudioWorkletSpec 已完成,但 AudioDeviceClient 或許更適合這個 API。社群仍在指定 AudioDeviceClient。工作區塊可能與此 API 不完全相同。 |
GetCurrentConfig |
|
SDL |
音訊情境*。(取得設定傳遞) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (參數) |
每次都會傳遞,而非附加至緩衝區。 |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (參數) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP - WebAudio 只會使用 32 位元的浮點值,PPAPI 則使用 16 位元 int。 |
PPAPI 理論上支援多種取樣大小。實際上,它僅支援 16 位元樣本。不幸的是,開發人員要求使用 16 位元樣本大小,以節省記憶體用量。下一版 Web Audio 規格將實作 16 位元取樣支援功能。您可以使用與 Firefox 類似的方式實作 AudioBuffer 最佳化,方法是針對來自 decodeAudioData 的音訊使用 16 位元緩衝區 |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 Stereo16Bit |
|
GAP |
GAP - 僅支援 32 位元浮點值 |
下一個版本的網路音訊規格將支援 16 位元樣本。 |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (來自預設建構) |
根據預設,AudioContext 的偏好取樣率會與硬體音訊裝置的實際取樣率相符。 |
RecommendSampleFrameCount |
|
GAP |
GAP - 將與規劃的 AudioDeviceClient 進行處理 |
目前有一個開放問題,允許使用者指定大小,但仍在定義中。這類問題最好透過 AudioDeviceClient 處理,因為它可以告訴您給定硬體的適當大小。 |
PPB_Console
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
記錄 |
|
utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
除非開發人員針對 LogWithSource 提供的功能提出特定用途,否則 Console API 可視為相當完整的替代方案。開發人員工具來源對應可用於偵錯轉譯後的 JavaScript,並以原始來源語言進行偵錯。 |
PPB_Core
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
getTime |
|
utime |
新的 Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
可以建構對等的同步處理作業。 |
PPB_FileIO
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
FS (部分) |
window.chooseFileSystemEntries() |
create 和 open 的用法不同,但兩者具有相同的權限。 |
開啟 |
|
FS (部分) |
window.chooseFileSystemEntries() |
|
查詢 |
|
FS (部分) |
Blob.size、FileSystemHandle.getFile()、FileSystemHandle.getDirectory()、File.lastModified |
GAP (部分) - Blob.type 也可用來檢查 MIME 類型。您無法使用原生檔案系統 API 判斷檔案系統類型、建立時間和上次存取時間。 |
輕觸 |
|
FS (部分) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
閱讀資料 |
|
FS (部分) |
Blob.slice().arrayBuffer() |
|
寫入 |
|
FS (部分) |
FileSystemWriter.write() |
|
SetLength |
|
FS (部分) |
FileSystemWriter.truncate() |
|
清除 |
|
GAP (部分) |
GAP (部分) - 呼叫 FileSystemWrite.close() 時會刷新檔案 |
這與設計相關的設計在於,由於原生 File System API 檔案會暴露在作業系統上,因此在向作業系統顯示資料之前,必須先執行安全瀏覽檢查。 |
關閉 |
|
FS (部分) |
FileSystemWriter.close() |
不會取消待處理的作業,但會將目前寫入磁碟的所有資料刷新。 |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() 或 Blob.arrayBuffer() |
允許平行讀取多個子範圍讀取作業。 |
PPB_FileRef
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
FS (部分) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (部分) |
FileSystem.type |
|
GetName |
|
FS (部分) |
File.name |
|
GetPath |
|
FS (部分) |
GAP (部分) - 使用 Native File System API 時,可以從參照使用 FileSystemHandle.resolve(FileSystemHandle) 找出檔案的相對路徑 |
無法判斷檔案的絕對路徑,使用者必須授予存取包含檔案的目錄的權限。 |
GetParent |
|
FS (部分) |
GAP (部分) - 使用 Native File System API 時,可以從參照使用 FileSystemHandle.resolve(FileSystemHandle) 找出檔案的相對路徑 |
使用者必須授予存取檔案所在目錄的權限。 |
MakeDirectory |
|
FS (部分) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
輕觸 |
|
FS (部分) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
透過書面方式可以調整修改時間。 |
刪除 |
|
FS (部分) |
FileSystemDirectoryHandle.removeEntry() |
與 PPAPI 不同,目錄不必為空。 |
重新命名 |
|
FS (部分) |
GAP (部分) - 透過原生 File System API,您可以使用 FileSystemFileHandle.getFile() 作為新名稱的組合,以及含舊檔案內容的 FileSystemFileHandle.createWriter().write(),使用新名稱寫入檔案。接著 FileSystemDirectoryHandle.removeEntry() 刪除舊檔案。 |
在原生檔案系統 API 中,沒有任何直接的 API 可在單一步驟中執行這項操作。 |
查詢 |
|
GAP (部分) |
Blob.size、FileSystemHandle.getFile()、FileSystemHandle.getDirectory()、File.lastModified |
GAP (部分) - Blob.type 也可用來檢查 MIME 類型。您無法使用原生檔案系統 API 判斷檔案系統類型、建立時間和上次存取時間。 |
ReadDirectoryEntries |
|
FS (部分) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
FS (部分) |
window.requestFileSystem |
JS API 可在單一步驟中執行這兩項操作 |
開啟 |
|
GAP |
window.requestFileSystem |
JS API 一個步驟就能完成這兩項工作 |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
範例 |
|
SDL |
遊戲手把。* |
Gamepad 物件會顯示與 NavigationStart 相關的時間戳記。從硬體 https://www.w3.org/TR/gamepad/#gamepad-interface 接收資料時,已更新 |
PPB_Graphics2D
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
Canvas.getContext('2d') |
|
說明 |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
捲動 |
|
GAP |
CanvasRenderingContext2D.scrollIntoView、CanvasRenderingContext2D.drawImage |
GAP (部分):可使用 drawImage 將畫布繪製到自身上 (並加上偏移),然後填入其餘部分。 |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
清除 |
|
GAP |
沒有直接對等項目 |
GAP (部分) - 繪圖程式碼結尾處一律會隱含刷新,這項情況不太可能改變。不過,OffscreenCanvas 和 ImageBitmapRenderingContext 的組合可提供類似的功能。 |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (部分) - WebGL 2.0 和 Emscripten 公開的 OpenGL ES 3.0 支援使用者定義的多重取樣螢幕緩衝區,可設定所有可透過 PPAPI 設定的參數。 |
建立 |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(..、OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w;Canvas.height = h; |
|
SwapBuffers |
|
GAP |
沒有直接對等項目 |
GAP (部分) - 繪圖程式碼結尾處一律會隱含刷新,這項情況不太可能改變。不過,OffscreenCanvas 和 ImageBitmapRenderingContext 的組合可提供類似的功能。 |
PPB_ImageData
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetNativeImageDataFormat |
|
SDL |
ImageData 要求 RGBA 順序 |
|
IsImageDataFormatSupported |
|
SDL |
ImageData 規定 RGBA 順序 |
|
建立 |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
說明 |
|
SDL |
ImageData 從未有步幅 |
|
地圖 |
|
SDL |
ImageData.data |
|
取消對應 |
|
SDL |
ImageData.data |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
RequestInputEvents |
|
SDL |
沒有直接對等項目 |
由於 JS/Wasm 會在主執行緒上執行,且可以更經濟地篩選事件,而不會產生跨程序的往返作業,因此缺少這項功能可能不太重要。 |
RequestFilteringInputEvents |
|
SDL |
滑鼠* 鍵* 輪* 觸控* 構圖* 事件 |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
事件類別子系 |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
dblclick 與 mousedown 事件 |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode 種類包含這項資訊,但目前不完整。 |
我們也討論瞭如何實作 WheelEvent.deltaMode API:https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode 種類包含這項資訊,但目前不完整。 |
實作 WheelEvent.deltaMode API 的討論:https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (自行判斷) |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - 沒有直接對應項目 |
這類資料可能可從 CompositionEvent.data 擷取。 |
GetSegmentOffset |
|
GAP |
GAP - 沒有直接對等項目 |
|
GetTargetSegment |
|
GAP |
GAP - 沒有直接對等項目 |
|
GetSelection |
|
GAP |
GAP - 沒有直接對應項目 |
|
PPB_Instance
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
BindGraphics |
|
SDL |
Canvas.getContext (由於繫結是自動完成,因此無關緊要)。 |
|
IsFullFrame |
|
GAP |
GAP - 沒有等同於 mime type 處理常式的功能。 |
NaCl 應用程式可以註冊來處理特定 MIME 類型,並擁有整份文件。 |
DidCreate |
|
不適用 |
<Element>[key] |
一般 DOM 存取權可讓您篩選標籤屬性 |
DidDestroy |
|
不適用 |
不適用 |
未針對 NaCl 觸發 |
DidChangeView |
|
不適用 |
元素「resize」事件 |
|
DidChangeFocus |
|
不適用 |
元素「聚焦」、「焦點」、「焦點」活動 |
|
HandleDocumentLoad |
|
不適用 |
GAP - 無法註冊為 MIME 類型處理常式 |
您可以透過應用程式和資訊清單項目,設定 NaCl 模組來處理特定 mime 類型。 |
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
設定 |
|
GAP |
getUserMedia() |
getUserMedia() 的限制可提供要在 MediaStreamTrack 中使用的設定值。 |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP - 沒有對等項目 |
|
RecycleBuffer |
|
GAP |
GAP - 沒有等同功能 |
|
關閉 |
|
GAP |
MediaStreamTrack.stop() |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
畫布擷取 |
畫布擷取功能可讓你透過程式輔助方式導入影片影格。 |
設定 |
|
GAP |
applyConstraints()、getUserMedia() |
GAP (部分) - Web API 中的可用設定範圍可能與 PPAPI 不同。 |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP - 不等於 PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream 無法預先載入,因此不會進行緩衝處理:https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP - 不等於 PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - 沒有對等項目 |
|
RecycleFrame |
|
GAP |
GAP - 沒有等同功能 |
|
關閉 |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - 沒有對等項目 |
|
PutFrame |
|
GAP |
GAP - 沒有等同功能 |
|
PPB_MessageLoop
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
不適用 |
大多數情況下,工作站都有隱含的事件迴圈。 |
|
GetForMainThread |
|
不適用 |
大多是無關緊要的,worker 會取得隱含的事件迴圈。 |
|
GetCurrent |
|
不適用 |
大多數情況下,工作站都有隱含的事件迴圈。 |
|
AttachToCurrentThread |
|
不適用 |
大多是無關緊要的,worker 會取得隱含的事件迴圈。 |
|
在 |
|
不適用 |
大多數情況下,工作站都有隱含的事件迴圈。 |
|
PostWork |
|
不適用 |
大多是無關緊要的,worker 會取得隱含的事件迴圈。 |
|
PostQuit |
|
不適用 |
大多是無關緊要的,worker 會取得隱含的事件迴圈。 |
|
PPB_Messaging
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
PostMessage |
|
不適用 |
Window.postMessage |
|
RegisterMessageHandler |
|
不適用 |
Window.addEventListener |
|
UnregisterMessageHandler |
|
不適用 |
Window.removeEventListener |
|
PPB_MouseCursor
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
SetCursor |
|
SDL |
Element.style.cursor |
系統支援同一組股票遊標。
您可以使用 url(..) 建立自訂游標。動態自訂游標則可使用資料 URI 建立。CSS3 支援指定互動區。 |
PPB_MouseLock
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
幾種方法 |
|
OpenGLES |
關閉 WebGL 1.0 功能。 |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
SetTextInputType |
|
GAP |
GAP - 可能由 Input Method Editor API 填入 |
部分開發人員希望能夠以這個方式提示,或者希望能夠在畫布中以內嵌方式攔截及顯示輸入法編輯器事件 / 輸出內容。 |
UpdateCaretPosition |
|
GAP |
GAP - 可能由輸入法編輯器 API 填補 |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP - 可能由輸入法編輯器 API 填補 |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP - 可能由輸入法編輯器 API 填補 |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
embind |
new XMLHttpRequest(); |
|
開啟 |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - 沒有 XMLHTTPRequest 等同項目 |
|
GetUploadProgress |
|
embind |
XMLHttpRequest 的「progress」事件 |
|
|
|
GAP |
FetchObserver |
尚未推測或實作;https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest 的「progress」事件 |
|
|
|
GAP |
FetchObserver |
尚未規範或實作;https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
擷取回應。* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
內文。* (回應是主體) |
|
FinishStreamingToFile |
|
embind |
GAP - 沒有直接對等項目 |
XMLHttpRequest 和 Fetch 都假設會將資料串流至記憶體,而非直接傳送至儲存空間。 |
關閉 |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API:AbortSignal 和 AbortController |
|
PPB_URLRequestInfo
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
embind |
XMLHttpRequest |
|
|
|
embind |
擷取要求 |
|
SetProperty |
|
GAP |
GAP - 沒有 XMLHttpRequest 的直接對等項目 |
XMLHttpRequest 無法直接針對個別請求限制下列重新導向、串流至檔案、設定參照網址或憑證政策。 |
|
|
embind |
要求。* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - 兩者都必須有完整的圖片,而非區塊。 |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
fetch() 上傳串流 |
https://www.chromestatus.com/features/5274139738767360 |
|
|
不適用 |
<form> |
您也可以使用 FileReader 讀取並上傳檔案,但比較像是 AttachDataToBody |
PPB_URLResponseInfo
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders 和其他參數 |
|
|
|
embind |
擷取回應。* |
|
GetBodyAsFileRef |
|
embind |
擷取回應 (內文) .blob() |
假設儲存層會最佳化傳輸作業。 |
PPB_Var
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
不適用 |
不適用 |
|
VarToResource |
|
不適用 |
不適用 |
|
PPB_VarArray
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
取得 |
|
embind |
陣列[i] |
|
Set |
|
embind |
陣列 [i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
embind |
新 ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
地圖 |
|
GAP |
GAP - 沒有直接對等項目 |
Asm.js / Wasm 模組無法對應 ArrayBuffer 的區域,但只能對應其單一線性記憶體堆積。
日後推出的多個回憶集錦或記憶體對應功能,或許能改善這個問題。 |
取消對應 |
|
GAP |
GAP - 沒有直接對應項目 |
|
PPB_VarDictionary
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
embind |
{} |
|
取得 |
|
embind |
<Object>[i] |
|
Set |
|
embind |
<Object>[i] = x |
|
刪除 |
|
embind |
delete <Object>[i] |
|
HasKey |
|
embind |
<Object> 中的 x |
|
GetKeys |
|
embind |
for (<Object> 中的 k) {} |
沒有對等的常值,但可以建構。 |
PPB_VideoDecoder
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
GAP - 使用 VideoDecoder() 以提議的 WebCodecs API 進行處理 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
初始化 |
|
GAP |
GAP - 會使用建議的 WebCodecs API 處理,並使用 VideoDecoder() 初始化參數 (VideoDecoderInitParameters) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP - 使用 ReadableStream.pipeThrough(VideoDecoder) 時,透過提議的 WebCodecs API 進行處理 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - 會使用建議的 WebCodecs API 處理,方法是使用 ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。目前的設計會自動回收圖片,並繼續進行解碼程序。 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
清除 |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。這個 API 會呼叫 Flush(),但仍有待討論如何在解碼呼叫中排序。 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
重設 |
|
GAP |
GAP - 刪除 VideoDecoder 執行個體並建立新執行個體,以處理提議的 WebCodecs API 進行處理。這不如專屬的重設方法效率,但我們仍在討論 Reset() API 的語意。 |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
GAP - 會使用 VideoEncoder() 處理建議的 WebCodecs API |
|
GetSupportedProfiles |
|
GAP |
GAP (部分) - navigator.mediaCapabilities.encodingInfo() |
您必須逐一檢查支援的設定檔。 |
初始化 |
|
GAP |
GAP - 將使用提議的 WebCodecs API 使用 VideoEncoder() 初始化參數進行處理 |
|
GetFramesRequired |
|
GAP |
GAP - 沒有等同功能 |
Web Codecs API 內部使用的影格池不太可能會公開。 |
GetFrameCodedSize |
|
GAP |
GAP - 沒有等同功能 |
Web Codecs API 內部使用的影格集區不太可能對外公開。 |
GetVideoFrame |
|
GAP |
GAP - 會使用 ReadableStream.pipeThrough(VideoEncoder) 使用建議的 WebCodecs API 處理。這樣可直接將可讀串流中的資料編碼,而不必在編碼前擷取單一影格來填入資料。 |
|
編碼 |
|
GAP |
GAP - 使用 ReadableStream.pipeThrough(VideoEncoder) 時,透過提議的 WebCodecs API 進行處理 |
|
GetBitstreamBuffer |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。目前的設計將自動通過傳輸的編碼位元串流緩衝區。 |
WebCodecs API 目前假設位元串流緩衝區可以複製而非集區,因此不需要回收。 |
RecycleBitstreamBuffer |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。目前設計會自動回收緩衝區,以便繼續進行編碼程序。 |
由於效能影響較小,這項做法日後不太可能有所變動。 |
RequestEncodingParametersChange |
|
GAP |
GAP - 將由提案的 Web Codecs API 處理。某些參數可立即變更,有些參數則需要先終止編碼器。 |
|
關閉 |
|
GAP |
GAP - 使用 VideoEncoder.Close(),以提議的 WebCodecs API 處理 |
|
PPB_VideoFrame
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetTimestamp |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。 |
|
SetTimestamp |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。 |
|
GetFormat |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。 |
|
GetSize |
|
GAP |
GAP - 會透過建議的 WebCodecs API 處理。 |
|
GetDataBuffer |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。 |
|
GetDataBufferSize |
|
GAP |
GAP - 將使用提議的 WebCodecs API 處理。 |
|
PPB_View
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
屬於文件,而非單一元素。 |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<元素>.scrollTop/<元素>.scrollLeft |
|
PPB_WebSocket
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
|
GAP |
WebSocket.WebSocket |
|
連結 |
|
GAP |
WebSocket.WebSocket(網址, ...)
WebSocket 開啟活動 |
|
關閉 |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
WebSocket 的「訊息」活動
WebSocket 的「錯誤」活動
WebSocket 的「close」活動 |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
圖形 3D 情境遺失 |
|
SDL |
畫布「webglcontextlost」事件 |
|
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
DidCreate |
|
不適用 |
<Element>[key] |
一般 DOM 存取權可讓您篩選標籤屬性 |
DidDestroy |
|
不適用 |
不適用 |
未針對 NaCl 觸發 |
DidChangeView |
|
不適用 |
元素「resize」事件 |
|
DidChangeFocus |
|
不適用 |
元素「聚焦」、「焦點」、「焦點」活動 |
|
HandleDocumentLoad |
|
不適用 |
GAP - 無法註冊為 MIME 類型處理常式 |
透過應用程式提供的 NaCl 模組 + 資訊清單項目可以進行設定,處理特定的 MIME 類型。 |
PPP_MessageHandler
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
HandleMessage |
|
embind |
MessagePort「message」事件
Window「message」事件 |
|
HandleBlockingMessage |
|
不適用 |
GAP - 沒有直接對等項目 |
您也可以使用 Atomics.wait 在主執行緒外執行類似的同步處理作業。這項功能是為了支援同步外掛程式 API 的模擬。 |
PPP_Messaging
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
HandleMessage |
|
embind |
MessagePort「message」事件
Window「message」事件 |
|
PPP_MouseLock
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
MouseLockLost |
|
SDL |
元素「pointerlockchange」和「pointerlockerror」事件 |
|
PPAPI (應用程式)
PPB_HostResolver
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
x |
GAP |
GAP (部分) - 沒有直接對等項目 |
|
解決 |
x |
GAP |
部分差距 - 沒有直接等同項目 |
|
GetCanonicalName |
x |
GAP |
部分差距 - 沒有直接等同項目 |
|
GetNetAddressCount |
x |
GAP |
GAP (部分) - 沒有直接對等項目 |
|
GetNetAddress |
x |
GAP |
GAP (部分) - 沒有直接對等項目 |
|
PPB_NetAddress
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
CreateFromIPv4Address |
x |
GAP |
GAP (部分) - 沒有直接對等項目 |
|
CreateFromIPv6Address |
x |
GAP |
部分差距 - 沒有直接等同項目 |
|
GetFamily |
x |
GAP |
GAP (部分) - 沒有直接對等項目 |
|
DescribeAsString |
x |
GAP |
GAP (部分) - 沒有直接對等項目 |
|
DescribeAsIPv4Address |
x |
GAP |
部分差距 - 沒有直接等同項目 |
|
DescribeAsIPv6Address |
x |
GAP |
部分差距 - 沒有直接等同項目 |
|
PPB_NetworkList
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetCount |
x |
GAP |
GAP - 沒有直接對應項目 |
|
GetName |
x |
GAP |
GAP - 沒有直接對等項目 |
|
GetType |
x |
GAP |
GAP - 沒有直接對等項目 |
|
GetState |
x |
GAP |
GAP - 沒有直接對等項目 |
|
GetIpAddress |
x |
GAP |
GAP - 沒有直接對應項目 |
|
GetDisplayName |
x |
GAP |
GAP - 沒有直接對應項目 |
|
GetMTU |
x |
GAP |
GAP - 沒有直接對等項目 |
|
PPB_NetworkMonitor
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
建立 |
x |
GAP |
GAP - 沒有直接對應項目 |
|
UpdateNetworkList |
x |
GAP |
GAP - 沒有直接對應項目 |
|
PPB_NetworkProxy
PPAPI 方法 |
假設執行緒 |
Emscripten |
網路 API |
限制 |
GetProxyForURL |
x |
GAP |
GAP - 沒有直接對等項目 |
|
PPB_TCPSocket 和 PPB_UDPSocket
遷移作業並非 1:1 對應。我們改為提供
和建議的遷移路徑。
*:未來也採用 WebTransport
**:如要瞭解支援情形,請參閱 chromestatus