Przewodnik po migracji do WebAssembly

(P)NaCl Deprecation Announcements

Ze względu na dużą popularność obsługi WebAssembly w różnych przeglądarkach planujemy skupić na potrzeby tworzenia natywnego kodu w WebAssembly i planujemy wyłączyć obsługę PNaCl w IV kwartale 2019 r. (z wyjątkiem aplikacji Chrome). Naszym zdaniem ekosystemu WebAssembly lepiej pasuje do nowych i istniejących kampanii o wysokiej skuteczności aplikacji internetowych, a wykorzystanie PNaCl jest na tyle niskie, że warto je wycofać.

Od wersji 76 przeglądarki Chrome PNaCl w otwartej sieci jest dostępne tylko w ramach testów Origin, czyli mechanizmu, który pozwala deweloperom rejestrować się i uzyskiwać dostęp do funkcji, która nie jest domyślnie włączona. Zwykle jest to nowa funkcja proponowana, ale w tym przypadku jest ona wycofana. Deweloperzy mogą zarejestrować się w konsoli Origin Trial i otrzymać token, który można umieścić na stronie. Umożliwi to korzystanie z funkcji bez konieczności używania flagi przez użytkownika. (więcej informacji znajdziesz w przewodniku dostępnym pod linkiem). Wersja próbna ma trwać do Chrome 78, czyli do grudnia 2019 r. Ta zmiana nie powinna mieć wpływu na NaCl ani PNaCl w aplikacjach i rozszerzeniach do Chrome. Flaga „enable-nacl” w chrome://flags może też służyć do włączania PNaCl lokalnie na potrzeby testowania (ta flaga zachowuje też swoją obecną funkcję włączania „natywnego” NaCl na dowolnej stronie, która nie obsługuje PNaCl).

Niedawno ogłosiliśmy też wycofanie Aplikacje Chrome spoza ChromeOS.

Migracja łańcucha narzędzi

W przypadku większości zastosowań (P)NaCl zalecamy przejście z pakietu SDK NaCl na Emscripten. Migracja powinna być dość prosta, jeśli aplikacja jest przenośna na system Linux, używa SDL lub interfejsów POSIX. Bezpośrednia obsługa interfejsów NaCl / Pepper API nie jest dostępna, ale próbowaliśmy wyświetlić ich odpowiedniki. W trudniejszych przypadkach przenoszenia prosimy o kontakt na adres native-client-discuss@googlegroups.com.

Migracja API

Poniżej przedstawiamy stan zastępników platformy internetowej w przypadku każdego interfejsu API udostępnionego w ramach usługi (P)NaCl. Dodatkowo tabela zawiera listę biblioteki lub opcji w Esscripten. który oferuje najbliższy zamiennik.

Planujemy dodać obsługę wątków pamięci współdzielonej do WebAssembly w 2017 roku, ponieważ wątki są kluczowe w dopasowywaniu do najciekawszego zastosowania (P)NaCl, przypadków. Elementy migracji, które zakładają obsługę nadchodzących wątków są oznaczone poniżej. Jeśli sterowanie przepływem aplikacji w dużej mierze zależy od blokowania interfejsów API, może się też okazać, że do wygodnego przenoszenia wymagana jest obsługa wątków.

Staramy się zachować precyzję w tej tabeli, bez wątpienia zawiera błędy ani pominięcia. Jeśli natrafisz na taką formę płatności, skontaktuj się z nami pod adresem native-client-discuss@googlegroups.com

PPAPI

PPB_Audio

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz x SDL (częściowo) GAP (częściowo) – odpowiednik AudioWorkletNode ROUGHLY Ukończono specyfikację AudioWorkletSpec, ale wersja AudioDeviceClient może być lepszym rozwiązaniem w przypadku tego interfejsu API. Społeczność AudioDeviceClient jest nadal określana. Worklet może nie być odpowiednikiem tego interfejsu API.
GetCurrentConfig SDL AudioContext.* (pobiera przekazane ustawienia)
StartPlayback SDL AudioBufferSourceNode.start
StopPlayback SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetTimestamp SDL AudioBufferSourceNode.start (parametr) Przekazywane za każdym razem zamiast dołączania do bufora.
SetTimestamp SDL AudioBufferSourceNode.start (parametr)
GetSampleRate SDL AudioBuffer.sampleRate
GetSampleSize GAP GAP – WebAudio korzysta tylko z 32-bitowej liczby zmiennoprzecinkowej, natomiast PPAPI używa 16-bitowej liczby znaków typu int. Teoretycznie PPAPI obsługuje wiele rozmiarów próbkowania. W praktyce obsługuje ona tylko próbki 16-bitowe. Deweloperzy jednak poprosili o 16-bitowe rozmiary próbek, aby zmniejszyć zużycie pamięci. Następna wersja specyfikacji Web Audio będzie obsługiwać próbki 16-bitowe. Optymalizację komponentu AudioBuffer można wdrożyć podobnie jak w Firefoksie przez zastosowanie 16-bitowego bufora dla dźwięku pochodzącego z decodeAudioData
GetNumberOfChannels SDL AudioBuffer.numberOfChannels
GetDataBuffer SDL AudioBuffer.getChannelData
GetBufferSize SDL AudioBuffer.length

PPB_AudioConfig

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
CreateStereo 16-bitowy GAP GAP – obsługiwane tylko 32-bitowe próbki zmiennoprzecinkowe Następna wersja specyfikacji Web Audio wdroży obsługę 16-bitowych próbek.
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.length
RecommendSampleRate SDL AudioContext.sampleRate (z konstrukcji domyślnej) Domyślnie kontekst AudioContext ma preferowaną częstotliwość próbkowania, która odpowiada rzeczywistej częstotliwości próbkowania sprzętowego urządzenia audio.
RecommendSampleFrameCount GAP GAP – będzie obsługiwany przy użyciu planowanego klienta AudioDeviceClient Jest otwarty problem dotyczący zezwolenia na rozmiar określony przez użytkownika, ale jest on nadal definiowany. Najlepiej zrobić to przy użyciu klienta AudioDeviceClient, który podpowiada odpowiedni rozmiar dla danego sprzętu.

PPB_Console

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Log Utime console.log/warn/error/...
LogWithSource GAP GAP Interfejs Console API jest uważany za wystarczająco kompletną alternatywę, chyba że deweloperzy podają konkretne przypadki użycia funkcji oferowanych przez LogWithSource. Map źródłowych w Narzędziach deweloperskich można używać do debugowania transpilowanego JavaScriptu w oryginalnym języku źródłowym.

PPB_Core

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
getTime Utime new Date().getTime()
getTimeTicks Utime new Date().getTime()
IsMainThread GAP window.document !== undefined
CallOnMainThread GAP Worker.postMessage + Atomics.wait Można stworzyć równoważną synchronizację.

PPB_FileIO

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz FS (częściowo) window.chooseFileSystemEntries() Słowa „tworzyć” i „otwierać” są używane w różny sposób, ale ich znaczenie jest takie samo.
Otwórz FS (częściowo) window.chooseFileSystemEntries()
Zapytanie FS (częściowa) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (częściowy) – do sprawdzenia typu MIME można też użyć pliku Blob.type. Za pomocą interfejsu Native File System API nie można określić typu systemu plików, czasu utworzenia ani czasu ostatniego dostępu.
Dotyk FS (częściowa) FileSystemDirectoryHandle.getFile("name", {create: true})
Odczyt FS (częściowo) Blob.slice().arrayBuffer()
Zapis FS (częściowa) FileSystemWriter.write()
SetLength FS (częściowa) FileSystemWriter.truncate()
Opróżnij GAP (częściowy) GAP (częściowy) – pliki są opróżniane po wywołaniu metody FileSystemWrite.close(). Jest to celowe działanie, ponieważ pliki interfejsu API natywnego systemu plików są dostępne dla systemu operacyjnego, dlatego przed wyświetleniem danych systemowi operacyjnemu należy przeprowadzić kontrolę Bezpiecznego przeglądania.
Zamknij FS (częściowo) FileSystemWriter.close() Nie anuluje oczekujących operacji, ale usuwa wszystkie dane zapisane do tej pory na dysku.
ReadToArray GAP Blob.slice().arrayBuffer() lub Blob.arrayBuffer() Umożliwia równoległe odczytywanie wielu podzakresów.

PPB_FileRef

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz FS (częściowa) FileSystemDirectoryHandle.getFile("name", {create: true})
GetFileSystemType FS (częściowa) FileSystem.type
GetName FS (częściowo) File.name
GetPath FS (częściowo) GAP (część) – za pomocą interfejsu Native File System API można określić ścieżkę względną pliku na podstawie odwołania do katalogu zawierającego ten plik przy użyciu FileSystemHandle.resolve(FileSystemHandle) Nie można określić ścieżki bezwzględnej pliku, a użytkownik musi przyznać uprawnienia do dostępu do katalogu zawierającego plik.
GetParent FS (częściowa) GAP (część) – za pomocą interfejsu Native File System API można określić ścieżkę względną pliku na podstawie odwołania do katalogu zawierającego ten plik przy użyciu FileSystemHandle.resolve(FileSystemHandle) Użytkownik musi przyznać uprawnienia dostępu do katalogu zawierającego plik.
MakeDirectory FS (częściowo) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
Dotyk FS (częściowa) FileSystemDirectoryHandle.getFile("name", {create: true}) Czas zmiany może zostać skrócony podczas pisania.
Usuń FS (częściowa) FileSystemDirectoryHandle.removeEntry() W przeciwieństwie do PPAPI katalogi nie muszą być puste.
Zmień nazwę FS (częściowa) GAP (część) – plik można zapisać pod nową nazwą, używając kombinacji metody FileSystemFileHandle.getFile() dla nowej nazwy i FileSystemFileHandle.createWriter().write() z zawartością starego pliku. Następnie użyj FileSystemDirectoryHandle.removeEntry(), aby usunąć stary plik. W interfejsie Native File System API nie ma bezpośredniego interfejsu API, który umożliwiłby wykonanie tej operacji w jednym kroku.
Zapytanie GAP (częściowy) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (częściowy) – do sprawdzenia typu MIME można też użyć pliku Blob.type. Za pomocą interfejsu Native File System API nie można określić typu systemu plików, czasu utworzenia ani czasu ostatniego dostępu.
ReadDirectoryEntries FS (częściowo) FileSystemDirectoryHandle.getEntries()

PPB_FileSystem

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz FS (częściowo) window.requestFileSystem Interfejs JS API wykonuje oba te działania w jednym kroku
Otwórz GAP window.requestFileSystem Interfejs JS API wykonuje oba te działania w jednym kroku
GetType GAP FileSystem.type

PPB_Fullscreen

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
IsFullScreen html5.h Document.fullscreenEnabled
SetFullscreen html5.h Document.requestFullscreen
GetScreenSize html5.h Document.exitFullscreen

PPB_Gamepad

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Przykład SDL Gamepad.* Obiekt Gamepada ujawnia sygnaturę czasową w odniesieniu do nawigacjiStart. Aktualizacje są aktualizowane po otrzymaniu danych ze sprzętu https://www.w3.org/TR/gamepad/#gamepad-interface

PPB_Graphics2D

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL Canvas.getContext('2d')
Opis SDL Canvas.clientwidth + Canvas.clientHeight
PaintImageData SDL CanvasRenderingContext2D.putImageData
Przewiń GAP CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage GAP (częściowe) – można go zaimplementować, narysowując płótno na sobie z przesunięciem za pomocą funkcji drawImage, a potem wypełniając resztę.
ReplaceContents SDL CanvasRenderingContext2D.drawImage
Opróżnij GAP Brak bezpośredniego odpowiednika GAP (częściowo) – na końcu kodu rysowania zawsze występuje domyślne spłukanie; jest mało prawdopodobne, aby to się zmieniło. Połączenie funkcji OffscreenCanvas i ImageBitmapRenderingContext udostępniają podobne funkcje.
SetScale SDL CanvasRenderingContext2D.scale
GetScale SDL CanvasRenderingContext2D.currentTransform
SetLayerTransform SDL CanvasRenderingContext2D.setTransform CanvasRenderingContext2D.scale CanvasRenderingContext2D.translate

PPB_Graphics3D

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetAttribMaxValue OpenGL ES 3.0 WebGL 2.0 GAP (częściowo) – WebGL 2.0 i OpenGL ES 3.0 w Emscripten obsługują zdefiniowane przez użytkownika wielopróbkowe framebuffery, w których można ustawić wszystkie parametry konfigurowalne za pomocą PPAPI.
Utwórz 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 Brak bezpośredniego odpowiednika GAP (częściowy) – Na końcu kodu rysowania zawsze znajduje się domyślne opróżnienie. to mało prawdopodobne . Jednak połączenie OffscreenCanvasImageBitmapRenderingContext zapewnia podobne funkcje.

PPB_ImageData

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetNativeImageDataFormat SDL ImageData wymaga zamówienia RGBA
IsImageDataFormatSupported SDL ImageData wymaga zamówienia RGBA
Utwórz SDL CanvasRenderingContext2d.createImageData
Opis SDL ImageData nigdy nie ma kroku
Mapa SDL ImageData.data
Odłączanie SDL ImageData.data

PPB_InputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
RequestInputEvents SDL Brak bezpośredniego odpowiednika Brak tej funkcji jest prawdopodobnie mniej istotne, ponieważ JS / wam działa w wątku głównym i może tańszym odfiltrowywać zdarzenia bez konieczności przesyłania danych w obie strony w obie strony.
RequestFilteringInputEvents SDL mysz* klawisz* koło* dotyk* kompozycja* Zdarzenia
SDL Element.addEventListener
ClearInputEventRequest SDL Element.removeEventListener
GetType SDL Elementy podrzędne klasy zdarzenia
GetTimeStamp SDL Event.timeStamp
GetModifiers SDL *Event.altKey/shiftKey/metaKey/ctrlKey

PPB_MouseInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL MouseEvent
GetButton SDL MouseEvent.button
GetPosition SDL MouseEvent.client*/page*/offset*
GetClickCount SDL „dblclick” a „mysza” Wydarzenia
GetMovement SDL MouseEvent.movement*

PPB_WheelInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL WheelEvent
GetDelta SDL WheelEvent.delta*
GetTicks GAP GAP - deltaMode zawiera te informacje, ale nie w pełni. Trwają dyskusje na temat implementacji interfejsu WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017
GetScrollByPage GAP GAP - deltaMode zawiera te informacje, ale nie w pełni. Jest toczy się dyskusja na temat wdrażania interfejsu WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017.

PPB_KeyboardInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL KeyboardEvent
GetKeyCode SDL KeyboardEvent.keyCode
GetCharacterText SDL KeyboardEvent.key
GetCode SDL KeyboardEvent.code

PPB_TouchInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL TouchEvent
AddTouchPoint SDL TouchEvent.touches.push
GetTouchCount SDL TouchEvent.touches.length
GetTouchByIndex SDL TouchEvent.touches[i]
GetTouchById SDL Touch.indentifer (aby to sprawdzić samodzielnie)

PPB_IMEInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP CompositionEvent
GetText GAP CompositionEvent.data
GetSegmentNumber GAP GAP – brak bezpośredniego odpowiednika Te dane można potencjalnie pobrać z elementu CompositionEvent.data.
GetSegmentOffset GAP GAP – brak bezpośredniego odpowiednika
GetTargetSegment GAP GAP – brak bezpośredniego odpowiednika
GetSelection GAP GAP – brak bezpośredniego odpowiednika

PPB_Instance

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
BindGraphics SDL Canvas.getContext (możliwe, ponieważ wiązanie jest automatyczne).
IsFullFrame GAP GAP – brak odpowiednika modułów obsługi typu MIME. Aplikacje NaCl mogą być rejestrowane w celu obsługi określonego typu mime i posiadania całego dokumentu.
DidCreate Nie dotyczy <Element>[key] Ogólny dostęp do DOM umożliwia wyszukiwanie atrybutów tagów
DidDestroy Nie dotyczy Nie dotyczy Nie aktywowane w przypadku NaCl
DidChangeView Nie dotyczy Zmiana rozmiaru elementu Wydarzenie
DidChangeFocus Nie dotyczy Element „fokus”, „fokus”, „fokus” Wydarzenia
HandleDocumentLoad Nie dotyczy GAP - No way to register as a mime type handler Moduły NaCl w aplikacjach i wpisie manifestu można skonfigurować pod kątem obsługi określonych typów MIME.

PPB_MediaStreamAudioTrack

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Skonfiguruj GAP getUserMedia() Ograniczenia z metody getUserMedia() mogą dostarczać wartości konfiguracji do użycia w MediaStreamTrack.
GetAttrib GAP MediaStreamTrack.getSettings()
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetBuffer GAP GAP – brak odpowiednika
RecycleBuffer GAP GAP – brak odpowiednika
Zamknij GAP MediaStreamTrack.stop()

PPB_MediaStreamVideoTrack

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP Canvas Capture Canvas Capture umożliwia automatyczne wprowadzanie klatek wideo.
Skonfiguruj GAP applyConstraints(), getUserMedia() GAP (częściowo) – zakres konfiguracji dostępnych w interfejsie Web API może różnić się od interfejsu PPAPI.
GetAttrib GAP MediaStreamSettings.width
GAP MediaStreamSettings.height
GAP GAP – brak odpowiednika dla PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES Nie można wstępnie załadować obiektu MediaStream, więc nigdy nie będzie ono buforowane: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements
GAP GAP - brak odpowiednika dla PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetFrame GAP GAP – brak odpowiednika
RecycleFrame GAP GAP – brak odpowiednika
Zamknij GAP MediaStreamTrack.stop()
GetEmptyFrame GAP GAP – brak odpowiednika
PutFrame GAP GAP – brak odpowiednika

PPB_MessageLoop

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
GetForMainThread Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
GetCurrent Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
AttachToCurrentThread Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
Uruchom Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
PostWork Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
PostQuit Nie dotyczy W większości przypadków nie ma to znaczenia, ponieważ instancje robocze mają domyślną pętlę zdarzeń.

PPB_Messaging

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
PostMessage Nie dotyczy Window.postMessage
RegisterMessageHandler Nie dotyczy Window.addEventListener
UnregisterMessageHandler Nie dotyczy Window.removeEventListener

PPB_MouseCursor

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
SetCursor SDL Element.style.cursor Obsługiwany jest ten sam zestaw kursorów. Niestandardowe kursory można stosować za pomocą adresów URL(..). Dynamiczne kursory niestandardowe można stosować za pomocą identyfikatorów URI danych. CSS3 obsługuje określanie hotspotu.

PPB_MouseLock

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
LockMouse SDL Element.requestPointerLock
UnlockMouse SDL Element.exitPointerLock

PPB_OpenGLES2

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Kilka metod OpenGLES Funkcjonalność strony bliska WebGL 1.0.
x OffscreenCanvas

PPB_TextInputController

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
SetTextInputType GAP GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API Niektórzy deweloperzy chcieliby mieć możliwość wyświetlania takich podpowiedzi lub, co jest jeszcze lepsze, przechwytywania i wyświetlania zdarzeń IME lub danych wyjściowych w ramach kanwy.
UpdateCaretPosition GAP GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API https://www.w3.org/TR/ime-api/
CancelCompositionText GAP GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API https://www.w3.org/TR/ime-api/
UpdateSurroundingText GAP GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API https://www.w3.org/TR/ime-api/

PPB_URLLoader

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz embind new XMLHttpRequest();
Otwórz embind XMLHttpRequest.open
FollowRedirect embind Request.redirect
GAP GAP – brak odpowiednika XMLHTTPRequest
GetUploadProgress embind Zdarzenie „progress” XMLHttpRequest
GAP FetchObserver Nie ma jeszcze specyfikacji ani implementacji; https://github.com/whatwg/fetch/issues/607
GetDownloadProgress embind Zdarzenie „progress” XMLHttpRequest
GAP FetchObserver nie określono ani nie zaimplementowano. https://github.com/whatwg/fetch/issues/607
GetResponseInfo embind XMLHttpRequest.getAllResponseHeaders
embind Pobierz odpowiedź.*
ReadResponseBody embind XMLHttpRequest.response
embind Treść.* (Odpowiedź jest treścią)
FinishStreamingToFile embind GAP – brak bezpośredniego odpowiednika Zarówno XMLHttpRequest, jak i Fetch zakładają, że dane są przesyłane do pamięci, a nie bezpośrednio do pamięci masowej.
Zamknij embind XMLHttpRequest.abort
GAP Fetch API: AbortSignal i AbortController

PPB_URLRequestInfo

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz embind XMLHttpRequest
embind Pobieranie
SetProperty GAP GAP – brak bezpośredniego odpowiednika dla XMLHttpRequest Obiekt XMLHttpRequest nie udostępnia bezpośrednich sposobów na ograniczenie liczby żądań po przekierowaniu, strumieniowe przesyłanie do pliku, ustawianie odesłania ani zasad dotyczących poświadczeń.
embind Prośba.*
AppendDataToBody embind XMLHttpRequest.send GAP – oba obrazy muszą zawierać całe ciało, a nie tylko jego fragment.
embind fetch(.., options:body)
AppendFileToBody GAP download() prześlij strumieniowanie https://www.chromestatus.com/features/5274139738767360
Nie dotyczy <form> Możesz też czytać za pomocą FileReader i przesyłać, ale to bardziej jak AppendDataToBody.

PPB_URLResponseInfo

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetProperty embind XMLHttpRequest.getAllResponseHeaders + inne
embind Pobierz odpowiedź.*
GetBodyAsFileRef embind Pobierz odpowiedź (ciało). .blob() Zakładamy, że warstwa pamięci optymalizuje przesyłanie.

PPB_Var

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
VarFromUtf8 embind TextDecoder.decode
VarToUtf8 embind TextEncoder.encode
VarFromResource Nie dotyczy Nie dotyczy
VarToResource Nie dotyczy Nie dotyczy

PPB_VarArray

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Pobierz embind Tablica[i]
Do startu embind Tablica[i] = x
GetLength embind Array.length
SetLength embind tablica.length = n

PPB_VarArrayBuffer

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz embind new ArrayBuffer(n)
ByteLength embind ArrayBuffer.byteLength
Mapa GAP GAP – brak bezpośredniego odpowiednika Moduły Asm.js / wam nie są w stanie mapować regionów tablica Buffer innych niż ich jedna liniowa sterta pamięci. Użycie wielu wspomnień lub mapowania pamięci w przyszłości może to poprawić.
Usuń mapę GAP GAP – brak bezpośredniego odpowiednika

PPB_VarDictionary

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz embind {}
Pobierz embind <Object>[i]
Do startu embind <Object>[i] = x
Usuń embind usuń <obiekt>[i]
HasKey embind x w <Object>
GetKeys embind for (k in <Object>) {} Nie ma dosłownego odpowiednika, ale można go stworzyć.

PPB_VideoDecoder

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu funkcji VideoDecoder(). https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Zainicjuj GAP GAP – będzie obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu parametrów inicjowania 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 – będzie obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu interfejsu ReadableStream.pipeThrough(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 – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przy użyciu 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 – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Obecny projekt umożliwia automatyczne ponowne wykorzystanie zdjęć i dalszy proces dekodowania. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Opróżnij GAP GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs. Interfejs API będzie nazywać się Flush(), ale wciąż trwają dyskusje na temat tego, jak będzie on uporządkowany w związku z wywołaniami decode. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Resetuj GAP GAP – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przez zniszczenie instancji VideoDecoder i utworzenie nowej. Nie będzie to tak skuteczne jak dedykowana metoda resetowania, ale semantyka interfejsu Reset() API jest wciąż omawiana. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming

PPB_VideoEncoder

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu funkcji VideoEncoder().
GetSupportedProfiles GAP GAP (częściowo) – navigator.mediaCapabilities.encodingInfo() Obsługiwane profile należy sprawdzić pojedynczo.
Zainicjuj GAP GAP – obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu parametrów inicjowania VideoEncoder().
GetFramesRequired GAP GAP – brak odpowiednika Basen ramek używany wewnętrznie przez interfejs Web Codecs API jest prawdopodobnie nieopublikowany.
GetFrameCodedSize GAP GAP – brak odpowiednika Basen ramek używany wewnętrznie przez interfejs Web Codecs API jest prawdopodobnie niedostępny.
GetVideoFrame GAP GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu ReadableStream.pipeThrough(VideoEncoder). Dane zostaną zakodowane bezpośrednio w strumieniu „Czytelny”, a nie pobieranie jednej klatki w celu wypełnienia danych przed kodowaniem.
Kodowanie GAP GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu ReadableStream.pipeThrough(VideoEncoder)
GetBitstreamBuffer GAP GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Bieżący projekt będzie automatycznie przechodzić przez zakodowany bufor strumienia bitowego, przez który jest przekazywany potokiem. Interfejs WebCodecs API zakłada obecnie, że bufor strumienia bitowego można skopiować, a nie połączyć, więc nie trzeba go wykorzystywać do recyklingu.
RecycleBitstreamBuffer GAP GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Obecna wersja automatycznie odświeża bufor, aby można było kontynuować kodowanie. W przyszłości raczej się to nie zmieni, ponieważ wpływ na skuteczność jest mniejszy.
RequestEncodingParametersChange GAP GAP – obsługiwane przez proponowany interfejs Web Codecs API. Niektóre parametry można zmieniać na bieżąco, a inne wymagają demontażu kodera.
Zamknij GAP GAP – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przy użyciu metody VideoEncoder.Close().

PPB_VideoFrame

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetTimestamp GAP GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API.
SetTimestamp GAP GAP – obsługa zostałaby przekazana do proponowanego interfejsu WebCodecs API.
GetFormat GAP GAP – obsługa zostałaby przekazana do proponowanego interfejsu WebCodecs API.
GetSize GAP GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API.
GetDataBuffer GAP GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs.
GetDataBufferSize GAP GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs.

PPB_View

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetRect embind Element.getBoundingClientRect
IsFullscreen embind Document.fullScreenEnabled Służy do udokumentowania, a nie tylko pojedynczego elementu.
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

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP WebSocket.WebSocket
Connect GAP WebSocket.WebSocket(url, ...) WebSocket 'open' Event
Zamknij GAP WebSocket.close
ReceiveMessage GAP Zdarzenie WebSocket „message”,Zdarzenie WebSocket „error”,Zdarzenie 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

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utrata kontekstu graficznego3D SDL Zdarzenie „webglcontextlost” w obszarze roboczym

PPP_InputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
HandleInputEvent SDL Element.addEventListener

PPP_Instance

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
DidCreate Nie dotyczy <Element>[key] Ogólny dostęp do DOM umożliwia wyszukiwanie atrybutów tagów
DidDestroy Nie dotyczy Nie dotyczy Nie aktywowane w przypadku NaCl
DidChangeView Nie dotyczy Zmiana rozmiaru elementu Wydarzenie
DidChangeFocus Nie dotyczy Element „fokus”, „fokus”, „fokus” Wydarzenia
HandleDocumentLoad Nie dotyczy GAP - No way to register as a mime type handler Moduły NaCl za pomocą aplikacji i elementu manifestu można skonfigurować tak, aby obsługiwały określone typy mime.

PPP_MessageHandler

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
HandleMessage embind Zdarzenie „message” interfejsu MessagePort Zdarzenie „message” okna
HandleBlockingMessage Nie dotyczy GAP – brak bezpośredniego odpowiednika Podobną synchronizację można przeprowadzić poza wątkiem głównym za pomocą narzędzia Atomics.wait. Dodano tę opcję, aby umożliwić emulację interfejsów API wtyczek synchronicznych.

PPP_Messaging

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
HandleMessage embind MessagePort „message” Wydarzenie „Komunikat” okna Wydarzenie

PPP_MouseLock

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
MouseLockLost SDL Element „pointerlockchange”, zdarzenia „pointerlockerror”

IRT

PPB_Audio

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz x SDL (częściowo) GAP (częściowo) – odpowiednik AudioWorkletNode ROUGHLY Ukończono specyfikację AudioWorkletSpec, ale wersja AudioDeviceClient może być lepszym rozwiązaniem w przypadku tego interfejsu API. Społeczność AudioDeviceClient jest nadal określana. Worklet może nie być odpowiednikiem tego interfejsu API.
GetCurrentConfig SDL AudioContext.* (pobiera przekazane ustawienia)
StartPlayback SDL AudioBufferSourceNode.start
StopPlayback SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetTimestamp SDL AudioBufferSourceNode.start (parametr) Przekazywane za każdym razem zamiast dołączania do bufora.
SetTimestamp SDL AudioBufferSourceNode.start (parametr)
GetSampleRate SDL AudioBuffer.sampleRate
GetSampleSize GAP GAP – WebAudio korzysta tylko z 32-bitowej liczby zmiennoprzecinkowej, natomiast PPAPI używa 16-bitowej liczby znaków typu int. Teoretycznie PPAPI obsługuje wiele rozmiarów próbkowania. W praktyce obsługuje ona tylko próbki 16-bitowe. Deweloperzy jednak poprosili o 16-bitowe rozmiary próbek, aby zmniejszyć zużycie pamięci. Następna wersja specyfikacji Web Audio będzie obsługiwać próbki 16-bitowe. Optymalizację komponentu AudioBuffer można wdrożyć podobnie jak w Firefoksie przez zastosowanie 16-bitowego bufora dla dźwięku pochodzącego z decodeAudioData
GetNumberOfChannels SDL AudioBuffer.numberOfChannels
GetDataBuffer SDL AudioBuffer.getChannelData
GetBufferSize SDL AudioBuffer.length

PPB_AudioConfig

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
CreateStereo 16-bitowy GAP GAP – obsługiwane tylko 32-bitowe próbki zmiennoprzecinkowe Następna wersja specyfikacji Web Audio wdroży obsługę 16-bitowych próbek.
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.length
RecommendSampleRate SDL AudioContext.sampleRate (z konstrukcji domyślnej) Domyślnie kontekst AudioContext ma preferowaną częstotliwość próbkowania, która odpowiada rzeczywistej częstotliwości próbkowania sprzętowego urządzenia audio.
RecommendSampleFrameCount GAP GAP – będzie obsługiwany przy użyciu planowanego klienta AudioDeviceClient Jest otwarty problem dotyczący zezwolenia na rozmiar określony przez użytkownika, ale jest on nadal definiowany. Najlepiej zrobić to przy użyciu klienta AudioDeviceClient, który podpowiada odpowiedni rozmiar dla danego sprzętu.

PPB_Console

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Log Utime console.log/warn/error/...
LogWithSource GAP GAP Interfejs Console API jest uważany za wystarczająco kompletną alternatywę, chyba że deweloperzy podają konkretne przypadki użycia funkcji oferowanych przez LogWithSource. Map źródłowych w Narzędziach deweloperskich można używać do debugowania transpilowanego JavaScriptu w oryginalnym języku źródłowym.

PPB_Core

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
getTime Utime new Date().getTime()
getTimeTicks Utime new Date().getTime()
IsMainThread GAP window.document !== undefined
CallOnMainThread GAP Worker.postMessage + Atomics.wait Można stworzyć równoważną synchronizację.

PPB_FileIO

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz FS (częściowo) window.chooseFileSystemEntries() Słowa „tworzyć” i „otwierać” są używane w różny sposób, ale ich znaczenie jest takie samo.
Otwórz FS (częściowo) window.chooseFileSystemEntries()
Zapytanie FS (częściowa) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (częściowy) – do sprawdzenia typu MIME można też użyć pliku Blob.type. Za pomocą interfejsu Native File System API nie można określić typu systemu plików, czasu utworzenia ani czasu ostatniego dostępu.
Dotyk FS (częściowa) FileSystemDirectoryHandle.getFile("name", {create: true})
Odczyt FS (częściowo) Blob.slice().arrayBuffer()
Zapis FS (częściowa) FileSystemWriter.write()
SetLength FS (częściowa) FileSystemWriter.truncate()
Opróżnij GAP (częściowy) GAP (częściowy) – pliki są opróżniane po wywołaniu metody FileSystemWrite.close(). Jest to celowe działanie, ponieważ pliki interfejsu API natywnego systemu plików są dostępne dla systemu operacyjnego, dlatego przed wyświetleniem danych systemowi operacyjnemu należy przeprowadzić kontrolę Bezpiecznego przeglądania.
Zamknij FS (częściowo) FileSystemWriter.close() Nie anuluje oczekujących operacji, ale usuwa wszystkie dane zapisane do tej pory na dysku.
ReadToArray GAP Blob.slice().arrayBuffer() lub Blob.arrayBuffer() Umożliwia równoległe odczytywanie wielu podzakresów.

PPB_FileRef

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz FS (częściowa) FileSystemDirectoryHandle.getFile(&quot;name&quot;, {create: true})
GetFileSystemType FS (częściowa) FileSystem.type
GetName FS (częściowo) File.name
GetPath FS (częściowo) GAP (część) – za pomocą interfejsu Native File System API można określić ścieżkę względną pliku na podstawie odwołania do katalogu zawierającego ten plik przy użyciu FileSystemHandle.resolve(FileSystemHandle) Nie można określić ścieżki bezwzględnej pliku, a użytkownik musi przyznać uprawnienia do dostępu do katalogu zawierającego plik.
GetParent FS (częściowa) GAP (część) – za pomocą interfejsu Native File System API można określić ścieżkę względną pliku na podstawie odwołania do katalogu zawierającego ten plik przy użyciu FileSystemHandle.resolve(FileSystemHandle) Użytkownik musi przyznać uprawnienia dostępu do katalogu zawierającego plik.
MakeDirectory FS (częściowo) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
Dotyk FS (częściowa) FileSystemDirectoryHandle.getFile(&quot;name&quot;, {create: true}) Czas zmiany może zostać skrócony podczas pisania.
Usuń FS (częściowa) FileSystemDirectoryHandle.removeEntry() W przeciwieństwie do PPAPI katalogi nie muszą być puste.
Zmień nazwę FS (częściowa) GAP (część) – plik można zapisać pod nową nazwą, używając kombinacji metody FileSystemFileHandle.getFile() dla nowej nazwy i FileSystemFileHandle.createWriter().write() z zawartością starego pliku. Następnie użyj FileSystemDirectoryHandle.removeEntry(), aby usunąć stary plik. W interfejsie Native File System API nie ma bezpośredniego interfejsu API, który umożliwiłby wykonanie tej operacji w jednym kroku.
Zapytanie GAP (częściowy) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (częściowy) – do sprawdzenia typu MIME można też użyć pliku Blob.type. Za pomocą interfejsu Native File System API nie można określić typu systemu plików, czasu utworzenia ani czasu ostatniego dostępu.
ReadDirectoryEntries FS (częściowo) FileSystemDirectoryHandle.getEntries()

PPB_FileSystem

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz FS (częściowo) window.requestFileSystem Interfejs JS API wykonuje oba te działania w jednym kroku
Otwórz GAP window.requestFileSystem Interfejs JS API wykonuje oba te działania w jednym kroku
GetType GAP FileSystem.type

PPB_Fullscreen

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
IsFullScreen html5.h Document.fullscreenEnabled
SetFullscreen html5.h Document.requestFullscreen
GetScreenSize html5.h Document.exitFullscreen

PPB_Gamepad

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Przykład SDL Gamepad.* Obiekt Gamepada ujawnia sygnaturę czasową w odniesieniu do nawigacjiStart. Aktualizacje są aktualizowane po otrzymaniu danych ze sprzętu https://www.w3.org/TR/gamepad/#gamepad-interface

PPB_Graphics2D

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL Canvas.getContext('2d')
Opis SDL Canvas.clientwidth + Canvas.clientHeight
PaintImageData SDL CanvasRenderingContext2D.putImageData
Przewiń GAP CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage GAP (częściowe) – można go zaimplementować, narysowując płótno na sobie z przesunięciem za pomocą funkcji drawImage, a potem wypełniając resztę.
ReplaceContents SDL CanvasRenderingContext2D.drawImage
Opróżnij GAP Brak bezpośredniego odpowiednika GAP (częściowo) – na końcu kodu rysowania zawsze występuje domyślne spłukanie; jest mało prawdopodobne, aby to się zmieniło. Połączenie funkcji OffscreenCanvas i ImageBitmapRenderingContext udostępniają podobne funkcje.
SetScale SDL CanvasRenderingContext2D.scale
GetScale SDL CanvasRenderingContext2D.currentTransform
SetLayerTransform SDL CanvasRenderingContext2D.setTransform CanvasRenderingContext2D.scale CanvasRenderingContext2D.translate

PPB_Graphics3D

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetAttribMaxValue OpenGL ES 3.0 WebGL 2.0 GAP (częściowo) – WebGL 2.0 i OpenGL ES 3.0 w Emscripten obsługują zdefiniowane przez użytkownika wielopróbkowe framebuffery, w których można ustawić wszystkie parametry konfigurowalne za pomocą PPAPI.
Utwórz 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 Brak bezpośredniego odpowiednika GAP (częściowy) – Na końcu kodu rysowania zawsze znajduje się domyślne opróżnienie. to mało prawdopodobne . Jednak połączenie OffscreenCanvasImageBitmapRenderingContext zapewnia podobne funkcje.

PPB_ImageData

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetNativeImageDataFormat SDL ImageData wymaga zamówienia RGBA
IsImageDataFormatSupported SDL ImageData wymaga zamówienia RGBA
Utwórz SDL CanvasRenderingContext2d.createImageData
Opis SDL ImageData nigdy nie ma kroku
Mapa SDL ImageData.data
Odłączanie SDL ImageData.data

PPB_InputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
RequestInputEvents SDL Brak bezpośredniego odpowiednika Brak tej funkcji jest prawdopodobnie mniej istotne, ponieważ JS / wam działa w wątku głównym i może tańszym odfiltrowywać zdarzenia bez konieczności przesyłania danych w obie strony w obie strony.
RequestFilteringInputEvents SDL mysz* klawisz* koło* dotyk* kompozycja* Zdarzenia
SDL Element.addEventListener
ClearInputEventRequest SDL Element.removeEventListener
GetType SDL Elementy podrzędne klasy zdarzenia
GetTimeStamp SDL Event.timeStamp
GetModifiers SDL *Event.altKey/shiftKey/metaKey/ctrlKey

PPB_MouseInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL MouseEvent
GetButton SDL MouseEvent.button
GetPosition SDL MouseEvent.client*/page*/offset*
GetClickCount SDL „dblclick” a „mysza” Wydarzenia
GetMovement SDL MouseEvent.movement*

PPB_WheelInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL WheelEvent
GetDelta SDL WheelEvent.delta*
GetTicks GAP GAP - deltaMode zawiera te informacje, ale nie w pełni. Trwają dyskusje na temat implementacji interfejsu WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017
GetScrollByPage GAP GAP - deltaMode zawiera te informacje, ale nie w pełni. Jest toczy się dyskusja na temat wdrażania interfejsu WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017.

PPB_KeyboardInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL KeyboardEvent
GetKeyCode SDL KeyboardEvent.keyCode
GetCharacterText SDL KeyboardEvent.key
GetCode SDL KeyboardEvent.code

PPB_TouchInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz SDL TouchEvent
AddTouchPoint SDL TouchEvent.touches.push
GetTouchCount SDL TouchEvent.touches.length
GetTouchByIndex SDL TouchEvent.touches[i]
GetTouchById SDL Touch.indentifer (aby to sprawdzić samodzielnie)

PPB_IMEInputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP CompositionEvent
GetText GAP CompositionEvent.data
GetSegmentNumber GAP GAP – brak bezpośredniego odpowiednika Te dane można potencjalnie pobrać z elementu CompositionEvent.data.
GetSegmentOffset GAP GAP – brak bezpośredniego odpowiednika
GetTargetSegment GAP GAP – brak bezpośredniego odpowiednika
GetSelection GAP GAP – brak bezpośredniego odpowiednika

PPB_Instance

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
BindGraphics SDL Canvas.getContext (możliwe, ponieważ wiązanie jest automatyczne).
IsFullFrame GAP GAP – brak odpowiednika modułów obsługi typu MIME. Aplikacje NaCl mogą być rejestrowane w celu obsługi określonego typu mime i posiadania całego dokumentu.
DidCreate Nie dotyczy <Element>[key] Ogólny dostęp do DOM umożliwia wyszukiwanie atrybutów tagów
DidDestroy Nie dotyczy Nie dotyczy Nie aktywowane w przypadku NaCl
DidChangeView Nie dotyczy Zmiana rozmiaru elementu Wydarzenie
DidChangeFocus Nie dotyczy Element „fokus”, „fokus”, „fokus” Wydarzenia
HandleDocumentLoad Nie dotyczy GAP - No way to register as a mime type handler Moduły NaCl w aplikacjach i wpisie manifestu można skonfigurować pod kątem obsługi określonych typów MIME.

PPB_MediaStreamAudioTrack

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Skonfiguruj GAP getUserMedia() Ograniczenia z metody getUserMedia() mogą dostarczać wartości konfiguracji do użycia w MediaStreamTrack.
GetAttrib GAP MediaStreamTrack.getSettings()
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetBuffer GAP GAP – brak odpowiednika
RecycleBuffer GAP GAP – brak odpowiednika
Zamknij GAP MediaStreamTrack.stop()

PPB_MediaStreamVideoTrack

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP Canvas Capture Canvas Capture umożliwia automatyczne wprowadzanie klatek wideo.
Skonfiguruj GAP applyConstraints(), getUserMedia() GAP (częściowo) – zakres konfiguracji dostępnych w interfejsie Web API może różnić się od interfejsu PPAPI.
GetAttrib GAP MediaStreamSettings.width
GAP MediaStreamSettings.height
GAP GAP – brak odpowiednika dla PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES Nie można wstępnie załadować obiektu MediaStream, więc nigdy nie będzie ono buforowane: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements
GAP GAP - brak odpowiednika dla PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetFrame GAP GAP – brak odpowiednika
RecycleFrame GAP GAP – brak odpowiednika
Zamknij GAP MediaStreamTrack.stop()
GetEmptyFrame GAP GAP – brak odpowiednika
PutFrame GAP GAP – brak odpowiednika

PPB_MessageLoop

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
GetForMainThread Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
GetCurrent Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
AttachToCurrentThread Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
Uruchom Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
PostWork Nie dotyczy Pracownicy mają zazwyczaj pętlę zdarzeń.
PostQuit Nie dotyczy W większości przypadków nie ma to znaczenia, ponieważ instancje robocze mają domyślną pętlę zdarzeń.

PPB_Messaging

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
PostMessage Nie dotyczy Window.postMessage
RegisterMessageHandler Nie dotyczy Window.addEventListener
UnregisterMessageHandler Nie dotyczy Window.removeEventListener

PPB_MouseCursor

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
SetCursor SDL Element.style.cursor Obsługiwany jest ten sam zestaw kursorów. Niestandardowe kursory można stosować za pomocą adresów URL(..). Dynamiczne kursory niestandardowe można stosować za pomocą identyfikatorów URI danych. CSS3 obsługuje określanie hotspotu.

PPB_MouseLock

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
LockMouse SDL Element.requestPointerLock
UnlockMouse SDL Element.exitPointerLock

PPB_OpenGLES2

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Kilka metod OpenGLES Funkcjonalność strony bliska WebGL 1.0.
x OffscreenCanvas

PPB_TextInputController

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
SetTextInputType GAP GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API Niektórzy deweloperzy chcieliby mieć możliwość wyświetlania takich podpowiedzi lub, co jest jeszcze lepsze, przechwytywania i wyświetlania zdarzeń IME lub danych wyjściowych w ramach kanwy.
UpdateCaretPosition GAP GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API https://www.w3.org/TR/ime-api/
CancelCompositionText GAP GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API https://www.w3.org/TR/ime-api/
UpdateSurroundingText GAP GAP – Potencjalnie wypełniane przez interfejs Request Method Editor API https://www.w3.org/TR/ime-api/

PPB_URLLoader

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz embind new XMLHttpRequest();
Otwórz embind XMLHttpRequest.open
FollowRedirect embind Request.redirect
GAP GAP – brak odpowiednika XMLHTTPRequest
GetUploadProgress embind Zdarzenie „progress” XMLHttpRequest
GAP FetchObserver Nie ma jeszcze specyfikacji ani implementacji; https://github.com/whatwg/fetch/issues/607
GetDownloadProgress embind Zdarzenie „progress” XMLHttpRequest
GAP FetchObserver nie określono ani nie zaimplementowano. https://github.com/whatwg/fetch/issues/607
GetResponseInfo embind XMLHttpRequest.getAllResponseHeaders
embind Pobierz odpowiedź.*
ReadResponseBody embind XMLHttpRequest.response
embind Treść.* (Odpowiedź jest treścią)
FinishStreamingToFile embind GAP – brak bezpośredniego odpowiednika Zarówno XMLHttpRequest, jak i Fetch zakładają, że dane są przesyłane do pamięci, a nie bezpośrednio do pamięci masowej.
Zamknij embind XMLHttpRequest.abort
GAP Fetch API: AbortSignal i AbortController

PPB_URLRequestInfo

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz embind XMLHttpRequest
embind Pobieranie
SetProperty GAP GAP – brak bezpośredniego odpowiednika dla XMLHttpRequest Obiekt XMLHttpRequest nie udostępnia bezpośrednich sposobów na ograniczenie liczby żądań po przekierowaniu, strumieniowe przesyłanie do pliku, ustawianie odesłania ani zasad dotyczących poświadczeń.
embind Prośba.*
AppendDataToBody embind XMLHttpRequest.send GAP – oba obrazy muszą zawierać całe ciało, a nie tylko jego fragment.
embind fetch(.., options:body)
AppendFileToBody GAP download() prześlij strumieniowanie https://www.chromestatus.com/features/5274139738767360
Nie dotyczy <form> Możesz też czytać za pomocą FileReader i przesyłać, ale to bardziej jak AppendDataToBody.

PPB_URLResponseInfo

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetProperty embind XMLHttpRequest.getAllResponseHeaders + inne
embind Pobierz odpowiedź.*
GetBodyAsFileRef embind Pobierz odpowiedź (ciało). .blob() Zakładamy, że warstwa pamięci optymalizuje przesyłanie.

PPB_Var

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
VarFromUtf8 embind TextDecoder.decode
VarToUtf8 embind TextEncoder.encode
VarFromResource Nie dotyczy Nie dotyczy
VarToResource Nie dotyczy Nie dotyczy

PPB_VarArray

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Pobierz embind Tablica[i]
Do startu embind Tablica[i] = x
GetLength embind Array.length
SetLength embind tablica.length = n

PPB_VarArrayBuffer

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz embind new ArrayBuffer(n)
ByteLength embind ArrayBuffer.byteLength
Mapa GAP GAP – brak bezpośredniego odpowiednika Moduły Asm.js / wam nie są w stanie mapować regionów tablica Buffer innych niż ich jedna liniowa sterta pamięci. Użycie wielu wspomnień lub mapowania pamięci w przyszłości może to poprawić.
Usuń mapę GAP GAP – brak bezpośredniego odpowiednika

PPB_VarDictionary

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz embind {}
Pobierz embind <Object>[i]
Do startu embind <Object>[i] = x
Usuń embind usuń <obiekt>[i]
HasKey embind x w <Object>
GetKeys embind for (k in <Object>) {} Nie ma dosłownego odpowiednika, ale można go stworzyć.

PPB_VideoDecoder

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu funkcji VideoDecoder(). https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Zainicjuj GAP GAP – będzie obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu parametrów inicjowania 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 – będzie obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu interfejsu ReadableStream.pipeThrough(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 – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przy użyciu 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 – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Obecny projekt umożliwia automatyczne ponowne wykorzystanie zdjęć i dalszy proces dekodowania. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Opróżnij GAP GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs. Interfejs API będzie nazywać się Flush(), ale wciąż trwają dyskusje na temat tego, jak będzie on uporządkowany w związku z wywołaniami decode. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Resetuj GAP GAP – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przez zniszczenie instancji VideoDecoder i utworzenie nowej. Nie będzie to tak skuteczne jak dedykowana metoda resetowania, ale semantyka interfejsu Reset() API jest wciąż omawiana. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming

PPB_VideoEncoder

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu funkcji VideoEncoder().
GetSupportedProfiles GAP GAP (częściowo) – navigator.mediaCapabilities.encodingInfo() Obsługiwane profile należy sprawdzić pojedynczo.
Zainicjuj GAP GAP – obsługiwany za pomocą proponowanego interfejsu API WebCodecs przy użyciu parametrów inicjowania VideoEncoder().
GetFramesRequired GAP GAP – brak odpowiednika Basen ramek używany wewnętrznie przez interfejs Web Codecs API jest prawdopodobnie nieopublikowany.
GetFrameCodedSize GAP GAP – brak odpowiednika Basen ramek używany wewnętrznie przez interfejs Web Codecs API jest prawdopodobnie niedostępny.
GetVideoFrame GAP GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu ReadableStream.pipeThrough(VideoEncoder). Dane zostaną zakodowane bezpośrednio w strumieniu „Czytelny”, a nie pobieranie jednej klatki w celu wypełnienia danych przed kodowaniem.
Kodowanie GAP GAP – obsługa za pomocą proponowanego interfejsu WebCodecs API przy użyciu ReadableStream.pipeThrough(VideoEncoder)
GetBitstreamBuffer GAP GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Bieżący projekt będzie automatycznie przechodzić przez zakodowany bufor strumienia bitowego, przez który jest przekazywany potokiem. Interfejs WebCodecs API zakłada obecnie, że bufor strumienia bitowego można skopiować, a nie połączyć, więc nie trzeba go wykorzystywać do recyklingu.
RecycleBitstreamBuffer GAP GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API. Obecna wersja automatycznie odświeża bufor, aby można było kontynuować kodowanie. W przyszłości raczej się to nie zmieni, ponieważ wpływ na skuteczność jest mniejszy.
RequestEncodingParametersChange GAP GAP – obsługiwane przez proponowany interfejs Web Codecs API. Niektóre parametry można zmieniać na bieżąco, a inne wymagają demontażu kodera.
Zamknij GAP GAP – obsługiwane za pomocą proponowanego interfejsu WebCodecs API przy użyciu metody VideoEncoder.Close().

PPB_VideoFrame

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetTimestamp GAP GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API.
SetTimestamp GAP GAP – obsługa zostałaby przekazana do proponowanego interfejsu WebCodecs API.
GetFormat GAP GAP – obsługa zostałaby przekazana do proponowanego interfejsu WebCodecs API.
GetSize GAP GAP – obsługa powinna być realizowana za pomocą proponowanego interfejsu WebCodecs API.
GetDataBuffer GAP GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs.
GetDataBufferSize GAP GAP – obsługiwane za pomocą proponowanego interfejsu API WebCodecs.

PPB_View

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetRect embind Element.getBoundingClientRect
IsFullscreen embind Document.fullScreenEnabled Służy do udokumentowania, a nie tylko pojedynczego elementu.
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

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz GAP WebSocket.WebSocket
Connect GAP WebSocket.WebSocket(url, ...) WebSocket 'open' Event
Zamknij GAP WebSocket.close
ReceiveMessage GAP Zdarzenie WebSocket „message”,Zdarzenie WebSocket „error”,Zdarzenie 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

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utrata kontekstu graficznego3D SDL Zdarzenie „webglcontextlost” w obszarze roboczym

PPP_InputEvent

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
HandleInputEvent SDL Element.addEventListener

PPP_Instance

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
DidCreate Nie dotyczy <Element>[key] Ogólny dostęp do DOM umożliwia wyszukiwanie atrybutów tagów
DidDestroy Nie dotyczy Nie dotyczy Nie aktywowane w przypadku NaCl
DidChangeView Nie dotyczy Zmiana rozmiaru elementu Wydarzenie
DidChangeFocus Nie dotyczy Element „fokus”, „fokus”, „fokus” Wydarzenia
HandleDocumentLoad Nie dotyczy GAP - No way to register as a mime type handler Moduły NaCl za pomocą aplikacji i elementu manifestu można skonfigurować tak, aby obsługiwały określone typy mime.

PPP_MessageHandler

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
HandleMessage embind Zdarzenie „message” interfejsu MessagePort Zdarzenie „message” okna
HandleBlockingMessage Nie dotyczy GAP – brak bezpośredniego odpowiednika Podobną synchronizację można przeprowadzić poza wątkiem głównym za pomocą narzędzia Atomics.wait. Dodano tę opcję, aby umożliwić emulację interfejsów API wtyczek synchronicznych.

PPP_Messaging

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
HandleMessage embind MessagePort „message” Wydarzenie „Komunikat” okna Wydarzenie

PPP_MouseLock

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
MouseLockLost SDL Element „pointerlockchange”, zdarzenia „pointerlockerror”

PPAPI (aplikacje)

PPB_HostResolver

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz x GAP GAP (częściowy) – brak bezpośredniego odpowiednika
Rozwiąż x GAP GAP (częściowy) – brak bezpośredniego odpowiednika
GetCanonicalName x GAP GAP (częściowy) – brak bezpośredniego odpowiednika
GetNetAddressCount x GAP GAP (częściowo) – brak bezpośredniego odpowiednika
GetNetAddress x GAP GAP (częściowo) – brak bezpośredniego odpowiednika

PPB_NetAddress

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
CreateFromIPv4Address x GAP GAP (częściowy) – brak bezpośredniego odpowiednika
CreateFromIPv6Address x GAP GAP (częściowy) – brak bezpośredniego odpowiednika
GetFamily x GAP GAP (częściowo) – brak bezpośredniego odpowiednika
DescribeAsString x GAP GAP (częściowy) – brak bezpośredniego odpowiednika
DescribeAsIPv4Address x GAP GAP (częściowo) – brak bezpośredniego odpowiednika
DescribeAsIPv6Address x GAP GAP (częściowo) – brak bezpośredniego odpowiednika

PPB_NetworkList

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetCount x GAP GAP – brak bezpośredniego odpowiednika
GetName x GAP GAP – brak bezpośredniego odpowiednika
GetType x GAP GAP – brak bezpośredniego odpowiednika
GetState x GAP GAP – brak bezpośredniego odpowiednika
GetIpAddress x GAP GAP – brak bezpośredniego odpowiednika
GetDisplayName x GAP GAP – brak bezpośredniego odpowiednika
GetMTU x GAP GAP – brak bezpośredniego odpowiednika

PPB_NetworkMonitor

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
Utwórz x GAP GAP – brak bezpośredniego odpowiednika
UpdateNetworkList x GAP GAP – brak bezpośredniego odpowiednika

PPB_NetworkProxy

Metoda PPAPI Zakłada wątki Emscripten Web API Ograniczenia
GetProxyForURL x GAP GAP – brak bezpośredniego odpowiednika

PPB_TCPSocket i PPB_UDPSocket

Migracja nie ma bezpośredniego mapowania 1:1. Zamiast tego przedstawiliśmy kilka scenariuszy dotyczących użytkowników oraz zalecanej ścieżki migracji.

Przypadek użycia Rekomendacje
Udostępnianie ekranu getDisplayMedia i WebRTC ( wersja demonstracyjna)
Wczytuję z serwer lokalny w celu zminimalizowania przepustowości Interfejsy XHR, Fetch, Streams, Service Worker, Cache API
Ładowanie z lokalnej instancji aplikacji internetowej / Łączenie z lokalną instancją aplikacji internetowej WebRTC
Czat WebSocket*
W czasie rzeczywistym komunikacja audio/wideo WebRTC
Współpraca WebSocket*
Gry wieloosobowe w czasie rzeczywistym WebTransport** chyba że sieć P2P w tym przypadku to WebRTC (lub WebTransport przez RTCIceTransport)
interaktywna transmisja w czasie rzeczywistym, WebTransport**
Komunikacja ze starszym serwerem serwer proxy lub oprogramowanie pośredniczące do konwersji protokołów. Prześlij opinię do bit.ly/network-api-gaps

*: w przyszłości WebTransport

**: Informacje o dostępności znajdziesz na chromestatus.