Pengumuman Penghentian (P)NaCl
Mengingat momentum dukungan WebAssembly lintas browser, kami berencana untuk
upaya kode native di WebAssembly ke depannya dan berencana menghapus dukungan untuk
PNaCl pada K4 2019 (kecuali untuk Aplikasi Chrome). Kami percaya bahwa lingkungan
ekosistem di sekitar WebAssembly
membuatnya lebih cocok untuk aset berperforma tinggi baru dan lama
aplikasi web dan bahwa penggunaan PNaCl cukup rendah sehingga diperlukan penghentian penggunaan.
Mulai Chrome 76, PNaCl di web terbuka telah dipindahkan ke dalam
Uji Coba Origin,
yang merupakan mekanisme bagi developer web untuk mendaftar dan mendapatkan akses ke fitur yang tidak diaktifkan secara default.
Fitur ini biasanya adalah fitur baru yang diusulkan, tetapi dalam kasus ini, fitur tersebut tidak digunakan lagi.
Developer dapat mendaftar di Konsol Uji Coba Origin
dan menerima token, yang dapat disematkan ke halaman dan akan mengaktifkan fitur tanpa perlu menggunakan flag.
(Untuk detail selengkapnya, lihat panduan tertaut). Uji coba ini dijadwalkan akan berlangsung hingga Chrome 78, kira-kira hingga Desember 2019.
Perubahan ini tidak dimaksudkan untuk memengaruhi NaCl atau PNaCl di ekstensi atau Aplikasi Chrome, dan “enable-nacl”
tanda di chrome://flags juga dapat digunakan untuk mengaktifkan PNaCl secara lokal untuk pengujian
(tanda ini juga mempertahankan fungsinya saat ini untuk mengaktifkan NaCl “asli” non-PNaCl di halaman mana pun).
Kami juga baru-baru ini mengumumkan penghentian
Aplikasi Chrome
di luar ChromeOS pada Kuartal 1 2018.
Untuk sebagian besar kasus penggunaan (P)NaCl, sebaiknya bertransisi
dari NaCl SDK ke Emscripten.
Migrasi cenderung cukup mudah
jika aplikasi Anda portabel untuk Linux, menggunakan
SDL, atau POSIX API.
Meskipun dukungan langsung untuk NaCl/Pepper API tidak tersedia,
kami telah mencoba mencantumkan Web API yang setara.
Untuk kasus transfer yang lebih sulit, silakan hubungi
native-client-discuss@googlegroups.com
Migrasi API
Di sini, kami telah menguraikan status pengganti
Platform Web untuk masing-masing
dari API yang diekspos ke (P)NaCl.
Selain itu, tabel akan mencantumkan library atau opsi di Emscripten
yang menawarkan
pengganti terdekat.
Kami berharap dapat menambahkan dukungan thread memori bersama ke WebAssembly pada tahun 2017,
karena thread sangat penting untuk mencocokkan kasus penggunaan (P)NaCl yang paling menarik. Item migrasi yang mengasumsikan dukungan thread mendatang
ditandai di bawah. Jika kontrol alur aplikasi Anda sangat bergantung pada pemblokiran
API, Anda mungkin juga menemukan bahwa dukungan thread diperlukan untuk porting yang mudah.
Meskipun kami telah mencoba untuk akurat dalam tabel ini,
mungkin ada kesalahan atau kelalaian.
Jika Anda mengalaminya, hubungi kami di
native-client-discuss@googlegroups.com
PPAPI
PPB_Audio
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
x |
SDL (sebagian) |
GAP (sebagian) - AudioWorkletNode setara dengan ROUGH |
AudioWorkletSpec sudah selesai, tetapi AudioDeviceClient mungkin lebih cocok untuk API ini. AudioDeviceClient masih ditentukan oleh komunitas. Worklet mungkin bukan setara kasar untuk API ini. |
GetCurrentConfig |
|
SDL |
Konteks Audio.* (mendapatkan kembali setelan yang diteruskan) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parameter) |
Dilewati setiap kali, bukan dilampirkan ke buffering. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parameter) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP - WebAudio hanya menggunakan float 32-bit, PPAPI melakukan int 16-bit. |
PPAPI secara teori mendukung beberapa ukuran pengambilan sampel. Dalam praktiknya, ini hanya mendukung sampel 16-bit. Sayangnya, developer telah meminta ukuran sampel 16-bit untuk menghemat penggunaan memori. Versi berikutnya dari spesifikasi Audio Web akan menerapkan dukungan untuk sampel 16-bit. Pengoptimalan AudioBuffer dapat diterapkan seperti pada Firefox, dengan menggunakan buffer 16-bit untuk audio yang berasal dari decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
CreateStereo16Bit |
|
GAP |
GAP - Hanya sampel float 32-bit yang didukung |
Versi berikutnya dari spesifikasi Audio Web akan menerapkan dukungan untuk sampel 16-bit. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (dari konstruksi default) |
AudioContext akan memiliki frekuensi sampling pilihan yang cocok dengan frekuensi sampel sebenarnya dari perangkat audio hardware secara default. |
RecommendSampleFrameCount |
|
GAP |
GAP - Akan ditangani dengan AudioDeviceClient yang direncanakan |
Ada masalah terbuka untuk mengizinkan ukuran yang ditentukan pengguna, tetapi hal itu masih dalam proses penentuan. Hal ini mungkin sebaiknya ditangani dengan AudioDeviceClient yang dapat memberi tahu Anda ukuran yang sesuai untuk hardware tertentu. |
PPB_Console
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Log |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
Console API dianggap sebagai pengganti yang cukup lengkap, kecuali jika ada kasus penggunaan tertentu yang diajukan oleh developer untuk fungsi yang disediakan oleh LogWithSource. Source Maps DevTools dapat digunakan untuk men-debug JavaScript yang ditranspil dalam bahasa sumber aslinya. |
PPB_Core
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
getTime |
|
utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Sinkronisasi yang setara dapat dibuat. |
PPB_FileIO
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
FS (sebagian) |
window.chooseFileSystemEntries() |
Buat dan buka digunakan secara berbeda, tetapi bagian-bagiannya memiliki kekuatan yang sama. |
Buka |
|
FS (sebagian) |
window.chooseFileSystemEntries() |
|
Kueri |
|
FS (sebagian) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (sebagian) - Blob.type juga dapat digunakan untuk memeriksa jenis MIME. Jenis sistem file, waktu pembuatan, dan waktu akses terakhir tidak dapat ditentukan dengan Native File System API. |
Sentuh |
|
FS (sebagian) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Baca |
|
FS (sebagian) |
Blob.slice().arrayBuffer() |
|
Tulis |
|
FS (sebagian) |
FileSystemWriter.write() |
|
SetLength |
|
FS (sebagian) |
FileSystemWriter.truncate() |
|
Flush |
|
GAP (sebagian) |
GAP (sebagian) - File dibersihkan saat FileSystemWrite.close() dipanggil |
Hal ini disengaja karena file Native File System API diekspos ke OS, sehingga pemeriksaan Safe Browsing perlu dilakukan sebelum data ditampilkan ke OS. |
Tutup |
|
FS (sebagian) |
FileSystemWriter.close() |
Tidak membatalkan operasi yang tertunda, tetapi menghapus data apa pun yang ditulis sejauh ini ke disk. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() atau Blob.arrayBuffer() |
Memungkinkan beberapa operasi baca subrentang secara paralel. |
PPB_FileRef
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
FS (sebagian) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (sebagian) |
FileSystem.type |
|
GetName |
|
FS (sebagian) |
File.name |
|
GetPath |
|
FS (sebagian) |
GAP (sebagian) - Dengan Native File System API, jalur relatif file dapat ditentukan dari referensi ke direktori yang berisi file menggunakan FileSystemHandle.resolve(FileSystemHandle) |
Jalur absolut file tidak dapat ditentukan, dan pengguna harus memberikan izin untuk mengakses direktori yang berisi file tersebut. |
GetParent |
|
FS (sebagian) |
GAP (sebagian) - Dengan Native File System API, jalur relatif file dapat ditentukan dari referensi ke direktori yang berisi file menggunakan FileSystemHandle.resolve(FileSystemHandle) |
Pengguna harus memberikan izin untuk mengakses direktori yang berisi file. |
MakeDirectory |
|
FS (sebagian) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Sentuh |
|
FS (sebagian) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
Waktu modifikasi dapat diubah dengan menulis. |
Hapus |
|
FS (sebagian) |
FileSystemDirectoryHandle.removeEntry() |
Tidak seperti PPAPI, direktori tidak harus kosong. |
Ganti nama |
|
FS (sebagian) |
GAP (sebagian) - Dengan Native File System API, file dapat ditulis dengan nama baru menggunakan kombinasi FileSystemFileHandle.getFile() untuk nama baru dan FileSystemFileHandle.createWriter().write() dengan konten file lama. Kemudian, FileSystemDirectoryHandle.removeEntry() untuk menghapus file lama. |
Tidak ada API langsung yang akan melakukan ini dalam satu langkah di Native File System API. |
Kueri |
|
GAP (sebagian) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (sebagian) - Blob.type juga dapat digunakan untuk memeriksa jenis MIME. Jenis sistem file, waktu pembuatan, dan waktu akses terakhir tidak dapat ditentukan dengan Native File System API. |
ReadDirectoryEntries |
|
FS (sebagian) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
FS (sebagian) |
window.requestFileSystem |
JS API melakukan keduanya dalam satu langkah |
Buka |
|
GAP |
window.requestFileSystem |
JS API melakukan keduanya dalam satu langkah |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Contoh |
|
SDL |
Gamepad.* |
Objek Gamepad mengekspos stempel waktu yang terkait dengan navigationStart. Update ini diperbarui ketika data diterima dari hardware https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
Canvas.getContext('2d') |
|
Deskripsikan |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Scroll |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (sebagian) - Dapat diterapkan dengan menggambar kanvas ke kanvas itu sendiri, dengan offset, menggunakan drawImage, lalu mengisi bagian lainnya. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Flush |
|
GAP |
Tidak ada padanan langsung |
GAP (sebagian) -
Selalu ada flush implisit di akhir kode gambar; hal ini tidak mungkin
berubah. Namun, kombinasi
OffscreenCanvas
dan
ImageBitmapRenderingContext
memberikan fungsi yang serupa. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (sebagian) - Eksposur OpenGL ES 3.0 dari WebGL 2.0 dan Emscripten mendukung framebuffer multisampel multisampel yang ditentukan pengguna, tempat semua parameter yang dapat dikonfigurasi melalui PPAPI dapat ditetapkan. |
Buat |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPSI) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
Tidak ada padanan langsung |
GAP (sebagian) -
Selalu ada flush implisit di akhir kode gambar; tidak mungkin
berubah. Namun, kombinasi
OffscreenCanvas
dan
ImageBitmapRenderingContext
memberikan fungsi yang serupa. |
PPB_ImageData
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetNativeImageDataFormat |
|
SDL |
ImageData mewajibkan urutan RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData mewajibkan urutan RGBA |
|
Buat |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Menjelaskan |
|
SDL |
ImageData tidak pernah memiliki langkah |
|
Peta |
|
SDL |
ImageData.data |
|
Batalkan peta |
|
SDL |
ImageData.data |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
RequestInputEvents |
|
SDL |
Tidak ada padanan langsung |
Ketiadaan fitur ini mungkin kurang relevan karena JS/Wasm berjalan di thread utama dan dapat memfilter peristiwa dengan lebih murah tanpa menimbulkan perjalanan bolak-balik lintas proses. |
RequestFilteringInputEvents |
|
SDL |
mouse* tombol* roda* sentuh* komposisi* Peristiwa |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Turunan class peristiwa |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
Peristiwa 'dblclick' vs. 'mousedown' |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode berisi info ini, tetapi tidak lengkap. |
Ada diskusi tentang penerapan WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode berisi info ini, tetapi tidak lengkap. |
Ada diskusi tentang penerapan WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (untuk mengetahuinya sendiri) |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - Tidak ada padanan langsung |
Data ini berpotensi diambil dari CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP - Tidak ada padanan langsung |
|
GetTargetSegment |
|
GAP |
GAP - Tidak ada padanan langsung |
|
GetSelection |
|
GAP |
GAP - Tidak ada padanan langsung |
|
PPB_Instance
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
BindGraphics |
|
SDL |
Canvas.getContext (tidak relevan karena binding bersifat otomatis). |
|
IsFullFrame |
|
GAP |
GAP - Tidak setara dengan pengendali jenis mime. |
Aplikasi NaCl dapat didaftarkan untuk menangani jenis mime tertentu dan memiliki seluruh dokumen. |
DidCreate |
|
T/A |
<Element>[key] |
Akses DOM umum memungkinkan Anda mencari atribut tag |
DidDestroy |
|
T/A |
T/A |
Tidak dipicu untuk NaCl |
DidChangeView |
|
T/A |
Peristiwa 'resize' Elemen |
|
DidChangeFocus |
|
T/A |
Elemen 'fokus', 'fokus', 'fokus' Acara |
|
HandleDocumentLoad |
|
T/A |
GAP - Tidak ada cara untuk mendaftar sebagai pengendali jenis mime |
Modul NaCl melalui aplikasi + entri manifes dapat disiapkan untuk menangani jenis mime tertentu. |
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Konfigurasi |
|
GAP |
getUserMedia() |
Batasan dari getUserMedia() dapat memberikan nilai konfigurasi yang akan digunakan di MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP - Tidak ada padanan |
|
RecycleBuffer |
|
GAP |
GAP - Tidak ada padanan |
|
Tutup |
|
GAP |
MediaStreamTrack.stop() |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
Canvas Capture |
Canvas Capture menyediakan kemampuan untuk memperkenalkan frame video secara terprogram. |
Konfigurasi |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (sebagian) - Cakupan konfigurasi yang tersedia di Web API mungkin berbeda dengan PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP - tidak setara dengan PP_MEDIASTREAMVIDEOTracking_ATTRIB_BUFFERED_FRAMES |
MediaStream tidak dapat dimuat sebelumnya, sehingga tidak akan pernah di-buffer: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP - tidak setara dengan PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - Tidak ada padanan |
|
RecycleFrame |
|
GAP |
GAP - Tidak ada padanan |
|
Tutup |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - Tidak ada padanan |
|
PutFrame |
|
GAP |
GAP - Tidak ada padanan |
|
PPB_MessageLoop
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
T/A |
Sebagian besar diperdebatkan, pekerja mendapatkan loop peristiwa implisit. |
|
GetForMainThread |
|
T/A |
Sebagian besar diperdebatkan, pekerja mendapatkan loop peristiwa implisit. |
|
GetCurrent |
|
T/A |
Sebagian besar tidak relevan, pekerja mendapatkan loop peristiwa implisit. |
|
AttachToCurrentThread |
|
T/A |
Sebagian besar diperdebatkan, pekerja mendapatkan loop peristiwa implisit. |
|
Jalankan |
|
T/A |
Sebagian besar tidak relevan, pekerja mendapatkan loop peristiwa implisit. |
|
PostWork |
|
T/A |
Sebagian besar diperdebatkan, pekerja mendapatkan loop peristiwa implisit. |
|
PostQuit |
|
T/A |
Sebagian besar tidak relevan, pekerja mendapatkan loop peristiwa implisit. |
|
PPB_Messaging
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
PostMessage |
|
T/A |
Window.postMessage |
|
RegisterMessageHandler |
|
T/A |
Window.addEventListener |
|
UnregisterMessageHandler |
|
T/A |
Window.removeEventListener |
|
PPB_MouseCursor
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
SetCursor |
|
SDL |
Element.style.cursor |
Kumpulan kursor stok yang sama didukung.
Kursor kustom dapat dilakukan dengan URL(..).
Kursor kustom dinamis dapat dilakukan dengan URI data.
CSS3 mendukung penentuan hotspot. |
PPB_MouseLock
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Beberapa Metode |
|
OpenGLES |
Fungsinya hampir sama dengan WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
SetTextInputType |
|
GAP |
GAP - Berpotensi diisi oleh Input Method Editor API |
Beberapa developer ingin dapat memberikan petunjuk dengan cara ini, atau sebaiknya kemampuan untuk mencegat dan menampilkan peristiwa / output IME secara inline di dalam kanvas. |
UpdateCaretPosition |
|
GAP |
GAP - Berpotensi diisi oleh Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP - Berpotensi diisi oleh Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP - Berpotensi diisi oleh Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
embind |
new XMLHttpRequest(); |
|
Buka |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - Tidak ada padanan XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
Peristiwa 'progres' XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Belum ditentukan spesifikasinya atau belum diterapkan; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
Peristiwa 'progres' XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Belum ditentukan spesifikasinya atau belum diterapkan; https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Ambil Respons.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Isi.* (Respons adalah Isi) |
|
FinishStreamingToFile |
|
embind |
GAP - Tidak ada padanan langsung |
XMLHttpRequest dan Fetch mengasumsikan streaming ke memori, bukan langsung ke penyimpanan. |
Tutup |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal dan AbortController |
|
PPB_URLRequestInfo
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Permintaan Pengambilan |
|
SetProperty |
|
GAP |
GAP - Tidak ada padanan langsung untuk XMLHttpRequest |
XMLHttpRequest tidak menyediakan cara langsung untuk batas per permintaan pengalihan berikut, mengalirkan ke file, menetapkan kebijakan perujuk atau kredensial. |
|
|
embind |
Permintaan.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - Keduanya harus memiliki keseluruhan tubuh, bukan sepotong. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
Streaming upload fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
T/A |
<form> |
Anda juga dapat membaca dengan FileReader dan mengupload, tetapi lebih mirip dengan AppendDataToBody |
PPB_URLResponseInfo
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + lainnya |
|
|
|
embind |
Ambil Respons.* |
|
GetBodyAsFileRef |
|
embind |
Respons Pengambilan (Isi) .blob() |
Mengasumsikan lapisan penyimpanan mengoptimalkan transfer. |
PPB_Var
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
T/A |
T/A |
|
VarToResource |
|
T/A |
T/A |
|
PPB_VarArray
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Dapatkan |
|
embind |
Array[i] |
|
Setel |
|
embind |
Array[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
embind |
ArrayBuffer(n) baru |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Peta |
|
GAP |
GAP - Tidak ada padanan langsung |
Modul Asm.js/Wasm tidak dapat memetakan region ArrayBuffer selain heap memori linear tunggalnya.
Beberapa memori atau pemetaan memori di masa mendatang mungkin dapat meningkatkan kualitas ini. |
Batalkan peta |
|
GAP |
GAP - Tidak ada padanan langsung |
|
PPB_VarDictionary
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
embind |
{} |
|
Dapatkan |
|
embind |
<Object>[i] |
|
Setel |
|
embind |
<Objek>[i] = x |
|
Hapus |
|
embind |
hapus <Object>[i] |
|
HasKey |
|
embind |
x di <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Tidak ada padanan literal, tetapi dapat dibuat. |
PPB_VideoDecoder
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Lakukan inisialisasi |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan parameter inisialisasi 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 - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan ReadableStream.pipe Through(VideoDecoder) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan 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 - Akan ditangani dengan WebCodecs API yang diusulkan. Desain saat ini akan otomatis mendaur ulang gambar dan melanjutkan proses decoding. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Flush |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. API tersebut akan disebut Flush(), tetapi masih ada diskusi tentang cara pengurutannya sehubungan dengan panggilan dekode. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Reset |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan dengan menghancurkan instance VideoDecoder dan membuat instance baru. Ini tidak akan seefisien metode reset khusus, tetapi semantik untuk Reset() API masih dibahas. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan VideoEncoder() |
|
GetSupportedProfiles |
|
GAP |
GAP (sebagian) - navigator.mediaCapabilities.encodingInfo() |
Profil yang didukung harus diperiksa satu per satu. |
Lakukan inisialisasi |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan parameter inisialisasi VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP - Tidak ada padanan |
Kumpulan frame yang digunakan secara internal oleh Web Codecs API kemungkinan tidak terekspos. |
GetFrameCodedSize |
|
GAP |
GAP - Tidak ada padanan |
Kemungkinan besar kumpulan frame yang digunakan secara internal oleh Web Codecs API tidak akan diekspos. |
GetVideoFrame |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan ReadableStream.pipe Through(VideoEncoder). Tindakan ini akan langsung mengenkode data dalam aliran Readable, bukan mengambil satu frame untuk diisi dengan data sebelum encoding. |
|
Encoding |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan ReadableStream.pipeThrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. Desain saat ini akan otomatis melewati buffer bitstream yang dienkode yang disalurkan. |
WebCodecs API saat ini mengasumsikan bahwa buffering bitstream dapat disalin, bukan digabungkan, sehingga tidak perlu didaur ulang. |
RecycleBitstreamBuffer |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. Desain saat ini akan otomatis mendaur ulang buffering untuk melanjutkan proses encoding. |
Hal ini tidak mungkin berubah di masa mendatang karena implikasi performa lebih kecil. |
RequestEncodingParametersChange |
|
GAP |
GAP - Akan ditangani oleh Web Codecs API yang diusulkan. Beberapa parameter tertentu dapat diubah dengan cepat, sedangkan parameter lainnya akan memerlukan encoder untuk dihapus. |
|
Tutup |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan VideoEncoder.Close() |
|
PPB_VideoFrame
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetTimestamp |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
SetTimestamp |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
GetFormat |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
GetSize |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
GetDataBuffer |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
GetDataBufferSize |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
PPB_View
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Berkaitan dengan dokumen, bukan hanya satu elemen. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop/<Element>.scrollLeft |
|
PPB_WebSocket
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
WebSocket.WebSocket |
|
Connect |
|
GAP |
WebSocket.WebSocket(url, ...)
Peristiwa 'buka' WebSocket |
|
Tutup |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
'Pesan' WebSocket Acara
'Error' WebSocket Acara
'close' WebSocket Acara |
|
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
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Graphics3DContextHilang |
|
SDL |
Peristiwa 'webglcontextlost' Kanvas |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
DidCreate |
|
T/A |
<Element>[key] |
Akses DOM umum memungkinkan Anda mencari atribut tag |
DidDestroy |
|
T/A |
T/A |
Tidak dipicu untuk NaCl |
DidChangeView |
|
T/A |
Peristiwa 'resize' Elemen |
|
DidChangeFocus |
|
T/A |
Elemen 'fokus', 'fokus', 'fokus' Acara |
|
HandleDocumentLoad |
|
T/A |
GAP - Tidak ada cara untuk mendaftar sebagai pengendali jenis mime |
Modul NaCl melalui aplikasi + entri manifes dapat disiapkan untuk menangani jenis mime tertentu. |
PPP_MessageHandler
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
HandleMessage |
|
embind |
'Message' MessagePort Acara
'Pesan' jendela Acara |
|
HandleBlockingMessage |
|
T/A |
GAP - Tidak ada padanan langsung |
Sinkronisasi serupa dapat dilakukan di luar thread utama dengan Atomics.wait. Class ini ditambahkan untuk mendukung emulasi API plugin sinkron. |
PPP_Messaging
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
HandleMessage |
|
embind |
Peristiwa 'message' MessagePort
Peristiwa 'message' Jendela |
|
PPP_MouseLock
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
MouseLockLost |
|
SDL |
Elemen 'pointerlockchange', 'pointerlockerror' Acara |
|
IRT
PPB_Audio
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
x |
SDL (sebagian) |
GAP (sebagian) - AudioWorkletNode setara dengan ROUGH |
AudioWorkletSpec sudah selesai, tetapi AudioDeviceClient mungkin lebih cocok untuk API ini. AudioDeviceClient masih ditentukan oleh komunitas. Worklet mungkin bukan setara kasar untuk API ini. |
GetCurrentConfig |
|
SDL |
Konteks Audio.* (mendapatkan kembali setelan yang diteruskan) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parameter) |
Dilewati setiap kali, bukan dilampirkan ke buffering. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parameter) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP - WebAudio hanya menggunakan float 32-bit, PPAPI melakukan int 16-bit. |
PPAPI secara teori mendukung beberapa ukuran pengambilan sampel. Dalam praktiknya, ini hanya mendukung sampel 16-bit. Sayangnya, developer telah meminta ukuran sampel 16-bit untuk menghemat penggunaan memori. Versi berikutnya dari spesifikasi Audio Web akan menerapkan dukungan untuk sampel 16-bit. Pengoptimalan AudioBuffer dapat diterapkan seperti pada Firefox, dengan menggunakan buffer 16-bit untuk audio yang berasal dari decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
CreateStereo16Bit |
|
GAP |
GAP - Hanya sampel float 32-bit yang didukung |
Versi berikutnya dari spesifikasi Audio Web akan menerapkan dukungan untuk sampel 16-bit. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (dari konstruksi default) |
AudioContext akan memiliki frekuensi sampling pilihan yang cocok dengan frekuensi sampel sebenarnya dari perangkat audio hardware secara default. |
RecommendSampleFrameCount |
|
GAP |
GAP - Akan ditangani dengan AudioDeviceClient yang direncanakan |
Ada masalah terbuka untuk mengizinkan ukuran yang ditentukan pengguna, tetapi hal itu masih dalam proses penentuan. Hal ini mungkin sebaiknya ditangani dengan AudioDeviceClient yang dapat memberi tahu Anda ukuran yang sesuai untuk hardware tertentu. |
PPB_Console
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Log |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
Console API dianggap sebagai pengganti yang cukup lengkap, kecuali jika ada kasus penggunaan tertentu yang diajukan oleh developer untuk fungsi yang disediakan oleh LogWithSource. Source Maps DevTools dapat digunakan untuk men-debug JavaScript yang ditranspil dalam bahasa sumber aslinya. |
PPB_Core
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
getTime |
|
utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Sinkronisasi yang setara dapat dibuat. |
PPB_FileIO
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
FS (sebagian) |
window.chooseFileSystemEntries() |
Buat dan buka digunakan secara berbeda, tetapi bagian-bagiannya memiliki kekuatan yang sama. |
Buka |
|
FS (sebagian) |
window.chooseFileSystemEntries() |
|
Kueri |
|
FS (sebagian) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (sebagian) - Blob.type juga dapat digunakan untuk memeriksa jenis MIME. Jenis sistem file, waktu pembuatan, dan waktu akses terakhir tidak dapat ditentukan dengan Native File System API. |
Sentuh |
|
FS (sebagian) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Baca |
|
FS (sebagian) |
Blob.slice().arrayBuffer() |
|
Tulis |
|
FS (sebagian) |
FileSystemWriter.write() |
|
SetLength |
|
FS (sebagian) |
FileSystemWriter.truncate() |
|
Flush |
|
GAP (sebagian) |
GAP (sebagian) - File dibersihkan saat FileSystemWrite.close() dipanggil |
Hal ini disengaja karena file Native File System API diekspos ke OS, sehingga pemeriksaan Safe Browsing perlu dilakukan sebelum data ditampilkan ke OS. |
Tutup |
|
FS (sebagian) |
FileSystemWriter.close() |
Tidak membatalkan operasi yang tertunda, tetapi menghapus data apa pun yang ditulis sejauh ini ke disk. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() atau Blob.arrayBuffer() |
Memungkinkan beberapa operasi baca subrentang secara paralel. |
PPB_FileRef
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
FS (sebagian) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (sebagian) |
FileSystem.type |
|
GetName |
|
FS (sebagian) |
File.name |
|
GetPath |
|
FS (sebagian) |
GAP (sebagian) - Dengan Native File System API, jalur relatif file dapat ditentukan dari referensi ke direktori yang berisi file menggunakan FileSystemHandle.resolve(FileSystemHandle) |
Jalur absolut file tidak dapat ditentukan, dan pengguna harus memberikan izin untuk mengakses direktori yang berisi file tersebut. |
GetParent |
|
FS (sebagian) |
GAP (sebagian) - Dengan Native File System API, jalur relatif file dapat ditentukan dari referensi ke direktori yang berisi file menggunakan FileSystemHandle.resolve(FileSystemHandle) |
Pengguna harus memberikan izin untuk mengakses direktori yang berisi file. |
MakeDirectory |
|
FS (sebagian) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Sentuh |
|
FS (sebagian) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
Waktu modifikasi dapat diubah dengan menulis. |
Hapus |
|
FS (sebagian) |
FileSystemDirectoryHandle.removeEntry() |
Tidak seperti PPAPI, direktori tidak harus kosong. |
Ganti nama |
|
FS (sebagian) |
GAP (sebagian) - Dengan Native File System API, file dapat ditulis dengan nama baru menggunakan kombinasi FileSystemFileHandle.getFile() untuk nama baru dan FileSystemFileHandle.createWriter().write() dengan konten file lama. Kemudian, FileSystemDirectoryHandle.removeEntry() untuk menghapus file lama. |
Tidak ada API langsung yang akan melakukan ini dalam satu langkah di Native File System API. |
Kueri |
|
GAP (sebagian) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (sebagian) - Blob.type juga dapat digunakan untuk memeriksa jenis MIME. Jenis sistem file, waktu pembuatan, dan waktu akses terakhir tidak dapat ditentukan dengan Native File System API. |
ReadDirectoryEntries |
|
FS (sebagian) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
FS (sebagian) |
window.requestFileSystem |
JS API melakukan keduanya dalam satu langkah |
Buka |
|
GAP |
window.requestFileSystem |
JS API melakukan keduanya dalam satu langkah |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Contoh |
|
SDL |
Gamepad.* |
Objek Gamepad mengekspos stempel waktu yang terkait dengan navigationStart. Update ini diperbarui ketika data diterima dari hardware https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
Canvas.getContext('2d') |
|
Deskripsikan |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Scroll |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (sebagian) - Dapat diterapkan dengan menggambar kanvas ke kanvas itu sendiri, dengan offset, menggunakan drawImage, lalu mengisi bagian lainnya. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Flush |
|
GAP |
Tidak ada padanan langsung |
GAP (sebagian) -
Selalu ada flush implisit di akhir kode gambar; hal ini tidak mungkin
berubah. Namun, kombinasi dari
OffscreenCanvas
dan
ImageBitmapRenderingContext
menyediakan fungsi serupa. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (sebagian) - Eksposur OpenGL ES 3.0 dari WebGL 2.0 dan Emscripten mendukung framebuffer multisampel multisampel yang ditentukan pengguna, tempat semua parameter yang dapat dikonfigurasi melalui PPAPI dapat ditetapkan. |
Buat |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPSI) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
Tidak ada padanan langsung |
GAP (sebagian) -
Selalu ada flush implisit di akhir kode gambar; tidak mungkin
berubah. Namun, kombinasi
OffscreenCanvas
dan
ImageBitmapRenderingContext
memberikan fungsi yang serupa. |
PPB_ImageData
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetNativeImageDataFormat |
|
SDL |
ImageData mewajibkan urutan RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData mewajibkan urutan RGBA |
|
Buat |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Menjelaskan |
|
SDL |
ImageData tidak pernah memiliki langkah |
|
Peta |
|
SDL |
ImageData.data |
|
Batalkan peta |
|
SDL |
ImageData.data |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
RequestInputEvents |
|
SDL |
Tidak ada padanan langsung |
Ketiadaan fitur ini mungkin kurang relevan karena JS/Wasm berjalan di thread utama dan dapat memfilter peristiwa dengan lebih murah tanpa menimbulkan perjalanan bolak-balik lintas proses. |
RequestFilteringInputEvents |
|
SDL |
mouse* tombol* roda* sentuh* komposisi* Peristiwa |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Turunan class peristiwa |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
Peristiwa 'dblclick' vs. 'mousedown' |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode berisi info ini, tetapi tidak lengkap. |
Ada diskusi tentang penerapan WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode berisi info ini, tetapi tidak lengkap. |
Ada diskusi tentang penerapan WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (untuk mengetahuinya sendiri) |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - Tidak ada padanan langsung |
Data ini berpotensi diambil dari CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP - Tidak ada padanan langsung |
|
GetTargetSegment |
|
GAP |
GAP - Tidak ada padanan langsung |
|
GetSelection |
|
GAP |
GAP - Tidak ada padanan langsung |
|
PPB_Instance
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
BindGraphics |
|
SDL |
Canvas.getContext (tidak relevan karena binding bersifat otomatis). |
|
IsFullFrame |
|
GAP |
GAP - Tidak setara dengan pengendali jenis mime. |
Aplikasi NaCl dapat didaftarkan untuk menangani jenis mime tertentu dan memiliki seluruh dokumen. |
DidCreate |
|
T/A |
<Element>[key] |
Akses DOM umum memungkinkan Anda mencari atribut tag |
DidDestroy |
|
T/A |
T/A |
Tidak dipicu untuk NaCl |
DidChangeView |
|
T/A |
Peristiwa 'resize' Elemen |
|
DidChangeFocus |
|
T/A |
Elemen 'fokus', 'fokus', 'fokus' Acara |
|
HandleDocumentLoad |
|
T/A |
GAP - Tidak ada cara untuk mendaftar sebagai pengendali jenis mime |
Modul NaCl melalui aplikasi + entri manifes dapat disiapkan untuk menangani jenis mime tertentu. |
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Konfigurasi |
|
GAP |
getUserMedia() |
Batasan dari getUserMedia() dapat memberikan nilai konfigurasi yang akan digunakan di MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP - Tidak ada padanan |
|
RecycleBuffer |
|
GAP |
GAP - Tidak ada padanan |
|
Tutup |
|
GAP |
MediaStreamTrack.stop() |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
Canvas Capture |
Canvas Capture menyediakan kemampuan untuk memperkenalkan frame video secara terprogram. |
Konfigurasi |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (sebagian) - Cakupan konfigurasi yang tersedia di Web API mungkin berbeda dengan PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP - tidak setara dengan PP_MEDIASTREAMVIDEOTracking_ATTRIB_BUFFERED_FRAMES |
MediaStream tidak dapat dimuat sebelumnya, sehingga tidak akan pernah di-buffer: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP - tidak setara dengan PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - Tidak ada padanan |
|
RecycleFrame |
|
GAP |
GAP - Tidak ada padanan |
|
Tutup |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - Tidak ada padanan |
|
PutFrame |
|
GAP |
GAP - Tidak ada padanan |
|
PPB_MessageLoop
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
T/A |
Sebagian besar diperdebatkan, pekerja mendapatkan loop peristiwa implisit. |
|
GetForMainThread |
|
T/A |
Sebagian besar diperdebatkan, pekerja mendapatkan loop peristiwa implisit. |
|
GetCurrent |
|
T/A |
Sebagian besar tidak relevan, pekerja mendapatkan loop peristiwa implisit. |
|
AttachToCurrentThread |
|
T/A |
Sebagian besar diperdebatkan, pekerja mendapatkan loop peristiwa implisit. |
|
Jalankan |
|
T/A |
Sebagian besar tidak relevan, pekerja mendapatkan loop peristiwa implisit. |
|
PostWork |
|
T/A |
Sebagian besar diperdebatkan, pekerja mendapatkan loop peristiwa implisit. |
|
PostQuit |
|
T/A |
Sebagian besar tidak relevan, pekerja mendapatkan loop peristiwa implisit. |
|
PPB_Messaging
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
PostMessage |
|
T/A |
Window.postMessage |
|
RegisterMessageHandler |
|
T/A |
Window.addEventListener |
|
UnregisterMessageHandler |
|
T/A |
Window.removeEventListener |
|
PPB_MouseCursor
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
SetCursor |
|
SDL |
Element.style.cursor |
Kumpulan kursor stok yang sama didukung.
Kursor kustom dapat dilakukan dengan URL(..).
Kursor kustom dinamis dapat dilakukan dengan URI data.
CSS3 mendukung penentuan hotspot. |
PPB_MouseLock
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Beberapa Metode |
|
OpenGLES |
Fungsinya hampir sama dengan WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
SetTextInputType |
|
GAP |
GAP - Berpotensi diisi oleh Input Method Editor API |
Beberapa developer ingin dapat memberikan petunjuk dengan cara ini, atau sebaiknya kemampuan untuk mencegat dan menampilkan peristiwa / output IME secara inline di dalam kanvas. |
UpdateCaretPosition |
|
GAP |
GAP - Berpotensi diisi oleh Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP - Berpotensi diisi oleh Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP - Berpotensi diisi oleh Input Method Editor API |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
embind |
new XMLHttpRequest(); |
|
Buka |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - Tidak ada padanan XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
Peristiwa 'progres' XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Belum ditentukan spesifikasinya atau belum diterapkan; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
Peristiwa 'progres' XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Belum ditentukan spesifikasinya atau belum diterapkan; https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Ambil Respons.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Isi.* (Respons adalah Isi) |
|
FinishStreamingToFile |
|
embind |
GAP - Tidak ada padanan langsung |
XMLHttpRequest dan Fetch mengasumsikan streaming ke memori, bukan langsung ke penyimpanan. |
Tutup |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
Fetch API: AbortSignal dan AbortController |
|
PPB_URLRequestInfo
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Permintaan Pengambilan |
|
SetProperty |
|
GAP |
GAP - Tidak ada padanan langsung untuk XMLHttpRequest |
XMLHttpRequest tidak menyediakan cara langsung untuk batas per permintaan pengalihan berikut, mengalirkan ke file, menetapkan kebijakan perujuk atau kredensial. |
|
|
embind |
Permintaan.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP - Keduanya harus memiliki keseluruhan tubuh, bukan sepotong. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
Streaming upload fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
T/A |
<form> |
Anda juga dapat membaca dengan FileReader dan mengupload, tetapi lebih mirip dengan AppendDataToBody |
PPB_URLResponseInfo
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + lainnya |
|
|
|
embind |
Ambil Respons.* |
|
GetBodyAsFileRef |
|
embind |
Respons Pengambilan (Isi) .blob() |
Mengasumsikan lapisan penyimpanan mengoptimalkan transfer. |
PPB_Var
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
T/A |
T/A |
|
VarToResource |
|
T/A |
T/A |
|
PPB_VarArray
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Dapatkan |
|
embind |
Array[i] |
|
Setel |
|
embind |
Array[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
embind |
ArrayBuffer(n) baru |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Peta |
|
GAP |
GAP - Tidak ada padanan langsung |
Modul Asm.js/Wasm tidak dapat memetakan region ArrayBuffer selain heap memori linear tunggalnya.
Beberapa memori atau pemetaan memori di masa mendatang mungkin dapat meningkatkan kualitas ini. |
Batalkan peta |
|
GAP |
GAP - Tidak ada padanan langsung |
|
PPB_VarDictionary
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
embind |
{} |
|
Dapatkan |
|
embind |
<Object>[i] |
|
Setel |
|
embind |
<Objek>[i] = x |
|
Hapus |
|
embind |
hapus <Object>[i] |
|
HasKey |
|
embind |
x di <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Tidak ada padanan literal, tetapi dapat dibuat. |
PPB_VideoDecoder
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Lakukan inisialisasi |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan parameter inisialisasi 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 - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan ReadableStream.pipe Through(VideoDecoder) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan 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 - Akan ditangani dengan WebCodecs API yang diusulkan. Desain saat ini akan otomatis mendaur ulang gambar dan melanjutkan proses decoding. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Flush |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. API tersebut akan disebut Flush(), tetapi masih ada diskusi tentang cara pengurutannya sehubungan dengan panggilan dekode. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Reset |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan dengan menghancurkan instance VideoDecoder dan membuat instance baru. Ini tidak akan seefisien metode reset khusus, tetapi semantik untuk Reset() API masih dibahas. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan VideoEncoder() |
|
GetSupportedProfiles |
|
GAP |
GAP (sebagian) - navigator.mediaCapabilities.encodingInfo() |
Profil yang didukung harus diperiksa satu per satu. |
Lakukan inisialisasi |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan parameter inisialisasi VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP - Tidak ada padanan |
Kumpulan frame yang digunakan secara internal oleh Web Codecs API kemungkinan tidak terekspos. |
GetFrameCodedSize |
|
GAP |
GAP - Tidak ada padanan |
Kemungkinan besar kumpulan frame yang digunakan secara internal oleh Web Codecs API tidak akan diekspos. |
GetVideoFrame |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan ReadableStream.pipe Through(VideoEncoder). Tindakan ini akan langsung mengenkode data dalam aliran Readable, bukan mengambil satu frame untuk diisi dengan data sebelum encoding. |
|
Encoding |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan ReadableStream.pipeThrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. Desain saat ini akan otomatis melewati buffer bitstream yang dienkode yang disalurkan. |
WebCodecs API saat ini mengasumsikan bahwa buffering bitstream dapat disalin, bukan digabungkan, sehingga tidak perlu didaur ulang. |
RecycleBitstreamBuffer |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. Desain saat ini akan otomatis mendaur ulang buffering untuk melanjutkan proses encoding. |
Hal ini tidak mungkin berubah di masa mendatang karena implikasi performa lebih kecil. |
RequestEncodingParametersChange |
|
GAP |
GAP - Akan ditangani oleh Web Codecs API yang diusulkan. Beberapa parameter tertentu dapat diubah dengan cepat, sedangkan parameter lainnya akan memerlukan encoder untuk dihapus. |
|
Tutup |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan menggunakan VideoEncoder.Close() |
|
PPB_VideoFrame
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetTimestamp |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
SetTimestamp |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
GetFormat |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
GetSize |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
GetDataBuffer |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
GetDataBufferSize |
|
GAP |
GAP - Akan ditangani dengan WebCodecs API yang diusulkan. |
|
PPB_View
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Berkaitan dengan dokumen, bukan hanya satu elemen. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop/<Element>.scrollLeft |
|
PPB_WebSocket
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
|
GAP |
WebSocket.WebSocket |
|
Connect |
|
GAP |
WebSocket.WebSocket(url, ...)
Peristiwa 'buka' WebSocket |
|
Tutup |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
'Pesan' WebSocket Acara
'Error' WebSocket Acara
'close' WebSocket Acara |
|
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
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Graphics3DContextHilang |
|
SDL |
Peristiwa 'webglcontextlost' Kanvas |
|
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
DidCreate |
|
T/A |
<Element>[key] |
Akses DOM umum memungkinkan Anda mencari atribut tag |
DidDestroy |
|
T/A |
T/A |
Tidak dipicu untuk NaCl |
DidChangeView |
|
T/A |
Peristiwa 'resize' Elemen |
|
DidChangeFocus |
|
T/A |
Elemen 'fokus', 'fokus', 'fokus' Acara |
|
HandleDocumentLoad |
|
T/A |
GAP - Tidak ada cara untuk mendaftar sebagai pengendali jenis mime |
Modul NaCl melalui aplikasi + entri manifes dapat disiapkan untuk menangani jenis mime tertentu. |
PPP_MessageHandler
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
HandleMessage |
|
embind |
'Message' MessagePort Acara
'Pesan' jendela Acara |
|
HandleBlockingMessage |
|
T/A |
GAP - Tidak ada padanan langsung |
Sinkronisasi serupa dapat dilakukan di luar thread utama dengan Atomics.wait. Class ini ditambahkan untuk mendukung emulasi API plugin sinkron. |
PPP_Messaging
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
HandleMessage |
|
embind |
Peristiwa 'message' MessagePort
Peristiwa 'message' Jendela |
|
PPP_MouseLock
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
MouseLockLost |
|
SDL |
Peristiwa Elemen 'pointerlockchange', 'pointerlockerror' |
|
PPAPI (Aplikasi)
PPB_HostResolver
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
Selesaikan |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
GetCanonicalName |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
GetNetAddressCount |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
GetNetAddress |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
PPB_NetAddress
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
CreateFromIPv4Address |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
CreateFromIPv6Address |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
GetFamily |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
DescribeAsString |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
DescribeAsIPv4Address |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
DescribeAsIPv6Address |
x |
GAP |
GAP (sebagian) - Tidak ada padanan langsung |
|
PPB_NetworkList
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetCount |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
GetName |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
GetType |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
GetState |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
GetIpAddress |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
GetDisplayName |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
GetMTU |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
PPB_NetworkMonitor
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
Buat |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
UpdateNetworkList |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
PPB_NetworkProxy
Metode PPAPI |
Mengasumsikan Threads |
Emscripten |
Web API |
Batasan |
GetProxyForURL |
x |
GAP |
GAP - Tidak ada padanan langsung |
|
PPB_TCPSocket dan PPB_UDPSocket
Tidak ada pemetaan 1:1 langsung untuk migrasi. Sebagai gantinya, kami telah menguraikan beberapa
skenario pengguna di bawah dan jalur migrasi yang direkomendasikan.
Kasus Penggunaan |
Rekomendasi |
Berbagi layar |
getDisplayMedia dan
WebRTC (
demo)
|
Memuat dari
server lokal untuk meminimalkan penggunaan bandwidth |
XHR, Fetch, Streams, Service Worker, Cache API |
Memuat dari
instance lokal aplikasi web / Menghubungkan ke instance lokal aplikasi web |
WebRTC |
Chat |
WebSocket*
|
Real-Time
komunikasi audio/video |
WebRTC |
Kolaborasi |
WebSocket*
|
Game
multiplayer real-time |
WebTransport**
kecuali P2P, dalam hal ini WebRTC (atau
WebTransport melalui RTCIceTransport)
|
Streaming interaktif
real-time |
WebTransport**
|
Berkomunikasi
dengan server lama |
Server {i>proxy<i} atau {i>middleware<i} untuk melakukan konversi protokol. Masukan ke
bit.ly/network-api-gaps
|
*: Atau WebTransport pada masa mendatang
**: Lihat chromestatus untuk mengetahui ketersediaan