WebAssembly-migratiehandleiding

(P)NaCl-beëindigingsaankondigingen

Gezien het momentum van cross-browser WebAssembly-ondersteuning zijn we van plan onze native code-inspanningen in de toekomst te concentreren op WebAssembly en zijn we van plan de ondersteuning voor PNaCl in het vierde kwartaal van 2019 te verwijderen (behalve voor Chrome-apps). Wij zijn van mening dat het levendige ecosysteem rond WebAssembly het beter geschikt maakt voor nieuwe en bestaande krachtige webapps en dat het gebruik van PNaCl voldoende laag is om beëindiging te rechtvaardigen.

Vanaf Chrome 76 is PNaCl op het open web verplaatst naar een Origin Trial , een mechanisme waarmee webontwikkelaars zich kunnen registreren en toegang kunnen krijgen tot een functie die niet standaard is ingeschakeld. Dit is meestal een nieuwe voorgestelde functie, maar in dit geval is het een functie die wordt beëindigd. Een ontwikkelaar kan zich registreren op de Origin Trial Console en een token ontvangen, dat in een pagina kan worden ingesloten en de functie zal inschakelen zonder dat de gebruiker een vlag hoeft te gebruiken. (Zie de gekoppelde handleiding voor meer details). De proefperiode loopt naar Chrome 78, ongeveer tot december 2019. Deze wijziging is niet bedoeld om NaCl of PNaCl in Chrome-apps of -extensies te beïnvloeden, en de vlag 'enable-nacl' in chrome://flags kan ook worden gebruikt om schakel PNaCl lokaal in voor testen (deze vlag behoudt ook zijn huidige functie van het inschakelen van niet-PNaCl “native” NaCl op elke pagina).

We hebben onlangs ook de beëindiging van Chrome-apps buiten ChromeOS in het eerste kwartaal van 2018 aangekondigd.

Toolchain-migratie

Voor de meeste gevallen van (P)NaCl-gebruik raden we aan om over te stappen van de NaCl SDK naar Emscripten . Migratie zal waarschijnlijk redelijk eenvoudig zijn als uw toepassing overdraagbaar is naar Linux en gebruikmaakt van SDL- of POSIX-API's. Hoewel directe ondersteuning voor NaCl/Pepper API's niet beschikbaar is, hebben we geprobeerd Web API-equivalenten op te sommen. Voor meer uitdagende porteringsgevallen kunt u contact opnemen met native-client-discuss @ googlegroups . com

API-migratie

We hebben hier de status geschetst van webplatformvervangers voor elk van de API's die zijn blootgesteld aan (P)NaCl. Bovendien vermeldt de tabel de bibliotheek of optie in Emscripten die de dichtstbijzijnde vervanging biedt.

We verwachten in 2017 ondersteuning voor gedeelde geheugenthreads aan WebAssembly toe te voegen, omdat threads cruciaal zijn voor het matchen van de meest interessante gebruiksscenario's van (P)NaCl. Migratie-items die uitgaan van toekomstige threadondersteuning worden hieronder gemarkeerd. Als de stroomcontrole van uw toepassing sterk afhankelijk is van het blokkeren van API's, zult u wellicht ook vinden dat threads-ondersteuning vereist is voor gemakkelijke portering.

Hoewel we hebben geprobeerd nauwkeurig te zijn in deze tabel, zijn er ongetwijfeld fouten of weglatingen. Als u er een tegenkomt, neem dan contact met ons op via native-client-discuss @ googlegroups . com

PPAPI

PPB_Audio

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren X SDL (gedeeltelijk) GAP (gedeeltelijk) - AudioWorkletNode RUW gelijkwaardig De AudioWorkletSpec is klaar, maar AudioDeviceClient past mogelijk beter bij deze API. De AudioDeviceClient wordt nog steeds gespecificeerd door de community. Het werklet is mogelijk niet het ruwe equivalent voor deze API.
GetCurrentConfig SDL AudioContext.* (haalt de doorgegeven instellingen terug)
Start afspelen SDL AudioBufferSourceNode.start
Stop het afspelen SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Tijdstempel ophalen SDL AudioBufferSourceNode.start (parameter) Elke keer doorgegeven in plaats van vastgemaakt aan de buffer.
Tijdstempel instellen SDL AudioBufferSourceNode.start (parameter)
GetSampleRate SDL AudioBuffer.sampleRate
GetSampleSize GAT GAP - WebAudio gebruikt alleen 32-bit float, PPAPI doet 16-bit int. PPAPI ondersteunt theoretisch meerdere steekproefgroottes. In de praktijk ondersteunt het alleen 16-bits samples. Helaas hebben ontwikkelaars om 16-bits steekproefgroottes gevraagd om geheugengebruik te besparen. De volgende versie van de Web Audio-specificatie implementeert ondersteuning voor 16-bits samples. Een optimalisatie voor AudioBuffer zou vergelijkbaar met Firefox kunnen worden geïmplementeerd door een 16-bits buffer te gebruiken voor audio die afkomstig is van decodeAudioData
GetNumberOfChannels SDL AudioBuffer.numberOfChannels
GetDataBuffer SDL AudioBuffer.getChannelData
GetBuffergrootte SDL AudioBuffer.lengte

PPB_AudioConfig

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
CreëerStereo16Bit GAT GAP - Alleen 32-bit float-samples ondersteund De volgende versie van de Web Audio-specificatie implementeert ondersteuning voor 16-bits samples.
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.lengte
AanbevolenSampleRate SDL AudioContext.sampleRate (van standaardconstructie) Een AudioContext heeft standaard de voorkeursbemonsteringsfrequentie die overeenkomt met de werkelijke bemonsteringsfrequentie van het hardware-audioapparaat.
AanbevolenSampleFrameCount GAT GAP - Zou worden afgehandeld met de geplande AudioDeviceClient Er is een openstaand probleem om een ​​door de gebruiker opgegeven formaat toe te staan, maar dit wordt nog gedefinieerd. Dit kan waarschijnlijk het beste worden afgehandeld met AudioDeviceClient, die u kan vertellen wat de juiste maat zou zijn voor de gegeven hardware.

PPB_Console

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Logboek tijd console.log/warn/error/...
LogMetSource GAT GAT De Console API wordt beschouwd als een voldoende volledige vervanging, tenzij er specifieke gebruiksscenario's zijn die door ontwikkelaars naar voren zijn gebracht voor de functionaliteit die door LogWithSource wordt geboden. DevTools Source Maps kunnen worden gebruikt om getranspileerde JavaScript-codes in hun oorspronkelijke brontaal te debuggen.

PPB_Kern

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
haalTijd tijd nieuwe Datum().getTime()
getTimeTicks tijd nieuwe Datum().getTime()
IsMainThread GAT venster.document !== ongedefinieerd
CallOnMainThread GAT Worker.postMessage + Atomics.wait Equivalente synchronisatie kan worden opgebouwd.

PPB_FileIO

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren FS (gedeeltelijk) window.chooseFileSystemEntries() Creëer en open worden verschillend gebruikt, maar de stukken zijn even krachtig.
Open FS (gedeeltelijk) window.chooseFileSystemEntries()
Vraag FS (gedeeltelijk) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (gedeeltelijk) - Blob.type kan ook worden gebruikt om het MIME-type te controleren. Het bestandssysteemtype, de aanmaaktijd en de laatste toegangstijd kunnen niet worden bepaald met de Native File System API.
Aanraken FS (gedeeltelijk) FileSystemDirectoryHandle.getFile("naam", {create: true})
Lezen FS (gedeeltelijk) Blob.slice().arrayBuffer()
Schrijven FS (gedeeltelijk) BestandSysteemWriter.write()
Lengte instellen FS (gedeeltelijk) FileSystemWriter.truncate()
Spoelen GAP (gedeeltelijk) GAP (gedeeltelijk) - Bestanden worden leeggemaakt wanneer FileSystemWrite.close() wordt aangeroepen Dit is zo bedoeld omdat de Native File System API-bestanden worden blootgesteld aan het besturingssysteem. Daarom moet er een Safe Browsing-controle worden uitgevoerd voordat gegevens aan het besturingssysteem worden getoond.
Dichtbij FS (gedeeltelijk) FileSystemWriter.close() Annuleert lopende bewerkingen niet, maar wist alle gegevens die tot nu toe naar de schijf zijn geschreven.
LeesToArray GAT Blob.slice().arrayBuffer() of Blob.arrayBuffer() Maakt parallel lezen van meerdere subbereiken mogelijk.

PPB_BestandRef

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren FS (gedeeltelijk) FileSystemDirectoryHandle.getFile("naam", {create: true})
GetFileSystemType FS (gedeeltelijk) Bestandssysteem.type
Naam ophalen FS (gedeeltelijk) Bestandsnaam
GetPath FS (gedeeltelijk) GAP (gedeeltelijk) - Met de Native File System API kan het relatieve pad van een bestand worden bepaald op basis van verwijzing naar een map die het bestand bevat met behulp van FileSystemHandle.resolve(FileSystemHandle) Het absolute pad van een bestand kan niet worden bepaald en de gebruiker moet toestemming verlenen om toegang te krijgen tot de map die het bestand bevat.
GetOuder FS (gedeeltelijk) GAP (gedeeltelijk) - Met de Native File System API kan het relatieve pad van een bestand worden bepaald op basis van verwijzing naar een map die het bestand bevat met behulp van FileSystemHandle.resolve(FileSystemHandle) De gebruiker moet toestemming verlenen om toegang te krijgen tot de map die het bestand bevat.
MaakDirectory FS (gedeeltelijk) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
Aanraken FS (gedeeltelijk) FileSystemDirectoryHandle.getFile("naam", {create: true}) De wijzigingstijd kan worden verkort door te schrijven.
Verwijderen FS (gedeeltelijk) FileSystemDirectoryHandle.removeEntry() In tegenstelling tot de PPAPI hoeven mappen niet leeg te zijn.
Hernoemen FS (gedeeltelijk) GAP (gedeeltelijk) - Met de Native File System API kan het bestand worden geschreven met de nieuwe naam met behulp van een combinatie van FileSystemFileHandle.getFile() voor de nieuwe naam en FileSystemFileHandle.createWriter().write() met de inhoud van de oude bestand. Vervolgens FileSystemDirectoryHandle.removeEntry() om het oude bestand te verwijderen. Er is geen directe API die dit in één stap doet in de Native File System API.
Vraag GAP (gedeeltelijk) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (gedeeltelijk) - Blob.type kan ook worden gebruikt om het MIME-type te controleren. Het bestandssysteemtype, de aanmaaktijd en de laatste toegangstijd kunnen niet worden bepaald met de Native File System API.
Lees DirectoryEntries FS (gedeeltelijk) FileSystemDirectoryHandle.getEntries()

PPB_Bestandssysteem

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren FS (gedeeltelijk) venster.requestFileSystem JS API doet beide in één stap
Open GAT venster.requestFileSystem JS API doet beide in één stap
GetType GAT Bestandssysteem.type

PPB_Volledig scherm

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Is volledig scherm html5.h Document.fullscreenEnabled
Volledig scherm instellen html5.h Document.requestVolledig scherm
Schermgrootte ophalen html5.h Document.exitVolledig scherm

PPB_Gamepad

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Steekproef SDL Gamepad.* Het Gamepad-object geeft een tijdstempel weer die relatief is aan navigatieStart. Het wordt bijgewerkt wanneer gegevens worden ontvangen van de hardware https://www.w3.org/TR/gamepad/#gamepad-interface

PPB_Grafisch2D

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren SDL Canvas.getContext('2d')
Beschrijven SDL Canvas.clientWidth + Canvas.clientHeight
PaintImageData SDL CanvasRenderingContext2D.putImageData
Rol GAT CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage GAP (gedeeltelijk) - Kan worden geïmplementeerd door het canvas op zichzelf te tekenen, met een offset, met behulp van drawImage, en vervolgens de rest in te vullen.
Inhoud vervangen SDL CanvasRenderingContext2D.drawImage
Spoelen GAT Geen direct equivalent GAP (gedeeltelijk) - Er is altijd een impliciete flush aan het einde van de trekkingscode; het is onwaarschijnlijk dat dit zal veranderen. De combinatie van OffscreenCanvas en ImageBitmapRenderingContext biedt echter vergelijkbare functionaliteit.
Schaal instellen SDL CanvasRenderingContext2D.scale
GetScale SDL CanvasRenderingContext2D.currentTransform
SetLayerTransform SDL CanvasRenderingContext2D.setTransform CanvasRenderingContext2D.scale CanvasRenderingContext2D.translate

PPB_Grafisch3D

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
GetAttribMaxValue OpenGL ES 3.0 WebGL 2.0 GAP (gedeeltelijk) - WebGL 2.0 en Emscripten's blootstelling aan OpenGL ES 3.0 ondersteunen door de gebruiker gedefinieerde multisampled framebuffers, waarin alle parameters die via PPAPI kunnen worden geconfigureerd, kunnen worden ingesteld.
Creëren SDL Canvas.getContext
GetAttribs SDL WebGLRenderingContext.getContextAttributes
Attribs instellen SDL Canvas.getContext(.., OPTIES)
GetError SDL WebGLRenderingContext.getError
Formaat wijzigen Buffers SDL Doekbreedte = w; Doekhoogte = h;
Wisselbuffers GAT Geen direct equivalent GAP (gedeeltelijk) - Er is altijd een impliciete flush aan het einde van de trekkingscode; het is onwaarschijnlijk dat dit zal veranderen. De combinatie van OffscreenCanvas en ImageBitmapRenderingContext biedt echter vergelijkbare functionaliteit.

PPB_ImageData

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
GetNativeImageDataFormat SDL ImageData geeft opdracht tot RGBA-bestelling
Wordt ImageDataFormat ondersteund SDL ImageData geeft opdracht tot RGBA-bestelling
Creëren SDL CanvasRenderingContext2d.createImageData
Beschrijven SDL ImageData heeft nooit een stap gezet
Kaart SDL ImageData.data
Toewijzing ongedaan maken SDL ImageData.data

PPB_InputEvent

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
RequestInputEvents SDL Geen direct equivalent Het ontbreken van deze functie is waarschijnlijk minder relevant omdat JS / Wasm op de hoofdthread draait en goedkoper gebeurtenissen kan filteren zonder dat er een cross-process round trip plaatsvindt.
RequestFilteringInputEvents SDL muis* toets* wiel* aanraking* compositie* Gebeurtenissen
SDL Element.addEventListener
ClearInputEventRequest SDL Element.removeEventListener
GetType SDL Afstammelingen van gebeurtenisklasse
GetTimeStamp SDL Gebeurtenis.tijdstempel
GetModifiers SDL *Event.altKey/shiftKey/metaKey/ctrlKey

PPB_MouseInputEvent

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren SDL MuisGebeurtenis
GetKnop SDL MouseEvent.knop
GetPositie SDL MouseEvent.client*/pagina*/offset*
GetClickCount SDL dblclick' versus 'mousedown'-gebeurtenissen
Krijg beweging SDL MuisEvent.beweging*

PPB_WheelInputEvent

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren SDL WielEvent
GetDelta SDL WheelEvent.delta*
GetTicks GAT GAP - deltaMode bevat deze informatie, maar onvolledig. Er is discussie over het implementeren van een WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017
GetScrollByPage GAT GAP - deltaMode bevat deze informatie, maar onvolledig. Er is discussie over het implementeren van een WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017

PPB_KeyboardInputEvent

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren SDL Toetsenbordgebeurtenis
GetKeyCode SDL KeyboardEvent.keyCode
GetCharacterText SDL KeyboardEvent.toets
GetCode SDL KeyboardEvent.code

PPB_TouchInputEvent

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren SDL RaakGebeurtenis aan
TouchPoint toevoegen SDL TouchEvent.touches.push
GetTouchCount SDL TouchEvent.touches.lengte
GetTouchByIndex SDL TouchEvent.touches[i]
GetTouchById SDL Touch.indentifer (om dit zelf uit te zoeken)

PPB_IMEInputEvent

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren GAT SamenstellingEvenement
GetText GAT CompositionEvent.data
GetSegmentnummer GAT GAP - Geen direct equivalent Deze gegevens kunnen mogelijk worden opgehaald uit CompositionEvent.data.
GetSegmentOffset GAT GAP - Geen direct equivalent
GetTargetSegment GAT GAP - Geen direct equivalent
Selecteer selectie GAT GAP - Geen direct equivalent

PPB_Instance

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
BindGraphics SDL Canvas.getContext (betwistbaar omdat binding automatisch is).
IsFullFrame GAT GAP - Geen equivalent voor handlers van het mime-type. NaCl-apps kunnen worden geregistreerd om een ​​bepaald mime-type te verwerken en eigenaar te worden van het hele document.
DidCreëer N.v.t <Element>[sleutel] Met algemene DOM-toegang kunt u tagkenmerken uitvissen
Heeft vernietigd N.v.t N.v.t Niet geactiveerd voor NaCl
DidChangeView N.v.t Element 'formaat wijzigen' Gebeurtenis
Heeft de focus veranderd N.v.t Element 'focus', 'focusin', 'focusout' Gebeurtenissen
BehandelDocumentLoad N.v.t GAP - Geen manier om te registreren als een mime-type handler NaCl-modules via apps + een manifestinvoer kunnen worden ingesteld om bepaalde mime-typen te verwerken.

PPB_MediaStreamAudioTrack

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Configureer GAT getUserMedia() De beperkingen van getUserMedia() kunnen de configuratiewaarden bieden die in MediaStreamTrack moeten worden gebruikt.
GetAttrib GAT MediaStreamTrack.getSettings()
GetId GAT MediaStreamTrack.id
Is beëindigd GAT MediaStreamTrack.readyState
GetBuffer GAT GAP - Geen equivalent
Recyclebuffer GAT GAP - Geen equivalent
Dichtbij GAT MediaStreamTrack.stop()

PPB_MediaStreamVideoTrack

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren GAT Canvasopname Canvas Capture biedt de mogelijkheid om videoframes programmatisch te introduceren.
Configureer GAT applyConstraints(), getUserMedia() GAP (gedeeltelijk) - De omvang van de configuraties die beschikbaar zijn in de Web API kan verschillen van de PPAPI.
GetAttrib GAT MediaStreamSettings.width
GAT MediaStreamSettings.hoogte
GAT GAP - geen equivalent van PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES MediaStream kan niet vooraf worden geladen en zal dus nooit bufferen: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements
GAT GAP - geen equivalent van PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT
GetId GAT MediaStreamTrack.id
Is beëindigd GAT MediaStreamTrack.readyState
GetFrame GAT GAP - Geen equivalent
RecycleFrame GAT GAP - Geen equivalent
Dichtbij GAT MediaStreamTrack.stop()
Haal een leeg frame op GAT GAP - Geen equivalent
ZetFrame GAT GAP - Geen equivalent

PPB_MessageLoop

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren N.v.t Meestal betwistbaar, werknemers krijgen een impliciete gebeurtenislus.
GetForMainThread N.v.t Meestal betwistbaar, werknemers krijgen een impliciete gebeurtenislus.
GetCurrent N.v.t Meestal betwistbaar, werknemers krijgen een impliciete gebeurtenislus.
AttachToCurrentThread N.v.t Meestal betwistbaar, werknemers krijgen een impliciete gebeurtenislus.
Loop N.v.t Meestal betwistbaar, werknemers krijgen een impliciete gebeurtenislus.
Postwerk N.v.t Meestal betwistbaar, werknemers krijgen een impliciete gebeurtenislus.
PostQuit N.v.t Meestal betwistbaar, werknemers krijgen een impliciete gebeurtenislus.

PPB_Berichten

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Postbericht N.v.t Venster.postbericht
RegistrerenMessageHandler N.v.t Window.addEventListener
Maak de registratie van MessageHandler ongedaan N.v.t Window.removeEventListener

PPB_MouseCursor

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
SetCursor SDL Element.stijl.cursor Dezelfde set aandelencursors wordt ondersteund. Aangepaste cursors kunnen worden gemaakt met url(..). Dynamische aangepaste cursors kunnen worden uitgevoerd met gegevens-URI's. CSS3 ondersteunt het specificeren van de hotspot.

PPB_MuisVergrendeling

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Vergrendelmuis SDL Element.requestPointerLock
Ontgrendel de muis SDL Element.exitPointerLock

PPB_OpenGLES2

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Verschillende methoden OpenGLES Dicht bij WebGL 1.0 qua functionaliteit.
X OffscreenCanvas

PPB_TextInputController

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
SetTextInputType GAT GAP - Mogelijk gevuld door de Input Method Editor API Sommige ontwikkelaars zouden graag op deze manier hints willen geven, of liever de mogelijkheid willen hebben om IME-gebeurtenissen/uitvoer inline in een canvas te onderscheppen en weer te geven.
UpdateCaretPositie GAT GAP - Mogelijk gevuld door de Input Method Editor API https://www.w3.org/TR/ime-api/
AnnuleerCompositieTekst GAT GAP - Mogelijk gevuld door de Input Method Editor API https://www.w3.org/TR/ime-api/
UpdateOmringende Tekst GAT GAP - Mogelijk gevuld door de Input Method Editor API https://www.w3.org/TR/ime-api/

PPB_URLLader

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren inbinden nieuwe XMLHttpRequest();
Open inbinden XMLHttpRequest.open
VolgRedirect inbinden Verzoek.omleiding
GAT GAP - Geen XMLHTTPRequest-equivalent
GetUploadProgress inbinden XMLHttpRequest 'voortgang'-gebeurtenis
GAT Haal waarnemer op Nog niet gespecificeerd of geïmplementeerd; https://github.com/whatwg/fetch/issues/607
GetDownloadProgress inbinden XMLHttpRequest 'voortgang'-gebeurtenis
GAT Haal waarnemer op Nog niet gespecificeerd of geïmplementeerd; https://github.com/whatwg/fetch/issues/607
KrijgResponseInfo inbinden XMLHttpRequest.getAllResponseHeaders
inbinden Reactie ophalen.*
LeesResponseBody inbinden XMLHttpRequest.response
inbinden Lichaam.* (Reactie is een lichaam)
FinishStreamingToFile inbinden GAP - Geen direct equivalent XMLHttpRequest en Fetch gaan beide uit van streaming naar het geheugen, in plaats van rechtstreeks naar een opslag.
Dichtbij inbinden XMLHttpRequest.abort
GAT API ophalen: AbortSignal en AbortController

PPB_URLRequestInfo

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren inbinden XMLHttpRequest
inbinden Verzoek ophalen
Eigenschap instellen GAT GAP - Geen direct equivalent voor XMLHttpRequest XMLHttpRequest biedt geen directe manieren om het aantal volgende omleidingen per verzoek te beperken, naar een bestand te streamen, een verwijzings- of referentiebeleid in te stellen.
inbinden Verzoek.*
Gegevens toevoegen aan lichaam inbinden XMLHttpRequest.send GAP - Beide moeten het hele lichaam hebben, in plaats van een stuk.
inbinden ophalen(.., opties:body)
VoegBestandToBody toe GAT fetch() uploadstreaming https://www.chromestatus.com/features/5274139738767360
N.v.t <formulier> Je kunt ook lezen met FileReader en uploaden, maar dat lijkt meer op AppendDataToBody

PPB_URLResponsInfo

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Eigendom verkrijgen inbinden XMLHttpRequest.getAllResponseHeaders + anderen
inbinden Reactie ophalen.*
GetBodyAsFileRef inbinden Reactie ophalen (hoofdtekst) .blob() Veronderstelt dat de opslaglaag de overdracht optimaliseert.

PPB_Var

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
VarVanUtf8 inbinden TekstDecoder.decode
VarToUtf8 inbinden TextEncoder.encode
VarVanResource N.v.t N.v.t
VarNaarResource N.v.t N.v.t

PPB_VarArray

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Krijgen inbinden Array[ik]
Set inbinden Array[i] = x
Lengte ophalen inbinden Arraylengte
Lengte instellen inbinden Array.lengte = n

PPB_VarArrayBuffer

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren inbinden nieuwe ArrayBuffer(n)
Bytelengte inbinden ArrayBuffer.byteLength
Kaart GAT GAP - Geen direct equivalent Asm.js/Wasm-modules kunnen geen andere regio's van een ArrayBuffer in kaart brengen dan hun enkele lineaire geheugenheap. Toekomstige meervoudige herinneringen of geheugenmapping kunnen dit verbeteren.
Toewijzing ongedaan maken GAT GAP - Geen direct equivalent

PPB_VarDictionary

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren inbinden {}
Krijgen inbinden <Object>[i]
Set inbinden <Object>[i] = x
Verwijderen inbinden verwijder <Object>[i]
HasKey inbinden x in <Object>
Sleutels ophalen inbinden voor (k in <Object>) {} Geen letterlijk equivalent, maar het kan worden gebouwd.

PPB_VideoDecoder

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van VideoDecoder() https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Initialiseren GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van VideoDecoder()-initialisatieparameters (VideoDecoderInitParameters) https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Decoderen GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van ReadableStream.pipeThrough (VideoDecoder) https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Beeld ophalen GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van 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
RecycleAfbeelding GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API. Het huidige ontwerp recyclet de afbeeldingen automatisch en houdt het decoderingsproces gaande. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Spoelen GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API. De API zal Flush() heten, maar er is nog steeds discussie over hoe deze zal worden gesequenced in relatie tot decodeeraanroepen. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Opnieuw instellen GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API door de VideoDecoder-instantie te vernietigen en een nieuwe te maken. Dit zal niet zo efficiënt zijn als een speciale resetmethode, maar de semantiek voor een Reset() API wordt nog steeds besproken. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming

PPB_VideoEncoder

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van VideoEncoder()
Ondersteunde profielen ophalen GAT GAP (gedeeltelijk) - navigator.mediaCapabilities.encodingInfo() De ondersteunde profielen moeten één voor één worden gecontroleerd.
Initialiseren GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van VideoEncoder()-initialisatieparameters
GetFrames vereist GAT GAP - Geen equivalent Het is onwaarschijnlijk dat de framepool die intern door de Web Codecs API wordt gebruikt, wordt blootgesteld.
GetFrameCodedSize GAT GAP - Geen equivalent Het is onwaarschijnlijk dat de framepool die intern door de Web Codecs API wordt gebruikt, wordt blootgesteld.
VideoFrame ophalen GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API door ReadableStream.pipeThrough (VideoEncoder) te gebruiken. Dit zou de gegevens in de leesbare stroom rechtstreeks coderen in plaats van een enkel frame te pakken om met gegevens te vullen vóór het coderen.
Coderen GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van ReadableStream.pipeThrough (VideoEncoder)
GetBitstreamBuffer GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API. Het huidige ontwerp gaat automatisch door de gecodeerde bitstreambuffer waar doorheen wordt gesluisd. De WebCodecs API gaat er momenteel van uit dat de bitstreambuffer kan worden gekopieerd in plaats van gepoold, zodat deze niet hoeft te worden gerecycled.
RecycleBitstreamBuffer GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API. Het huidige ontwerp recyclet de buffer automatisch om het coderingsproces gaande te houden. Het is onwaarschijnlijk dat dit in de toekomst zal veranderen, omdat de gevolgen voor de prestaties kleiner zijn.
RequestEncodingParametersWijzigen GAT GAP - Zou worden afgehandeld door de voorgestelde Web Codecs API. Bepaalde parameters kunnen in een handomdraai worden gewijzigd, terwijl voor andere de encoder moet worden afgebroken.
Dichtbij GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API door VideoEncoder.Close() te gebruiken

PPB_VideoFrame

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Tijdstempel ophalen GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API.
Tijdstempel instellen GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API.
GetFormaat GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API.
GetSize GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API.
GetDataBuffer GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API.
GetDataBufferSize GAT GAP - Zou worden afgehandeld met de voorgestelde WebCodecs API.

PPB_Weergave

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
OntvangRect inbinden Element.getBoundingClientRect
Is volledig scherm inbinden Document.fullScreenEnabled Heeft betrekking op document in plaats van slechts op één element.
Is zichtbaar inbinden Kruispuntwaarnemer
IsPaginaZichtbaar inbinden document.visibilityState
GetClipRect inbinden Kruispuntwaarnemer
Haal DeviceScale op inbinden window.devicePixelRatio
GetCSSSale inbinden <Element>.getBoundingClientRect().width / <Element>.offsetWidth
GetScrollOffset inbinden <Element>.scrollTop / <Element>.scrollLeft

PPB_WebSocket

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren GAT WebSocket.WebSocket
Verbinden GAT WebSocket.WebSocket(url, ...) WebSocket 'open' gebeurtenis
Dichtbij GAT WebSocket.sluiten
Ontvang bericht GAT WebSocket 'message'-gebeurtenis WebSocket 'error'-gebeurtenis WebSocket 'close'-gebeurtenis
Bericht verzenden GAT WebSocket.verzenden
GetBufferedAmount GAT WebSocket.bufferedAmount
GetCloseCode GAT CloseEvent.code
GetCloseReason GAT CloseEvent.reden
GetCloseWasClean GAT SluitEvent.wasClean
Extensies ophalen GAT WebSocket.extensies
Protocol ophalen GAT WebSocket.protocol
GetReadyState GAT WebSocket.readyState
GetURL GAT WebSocket.url

PPP_Graphics3D

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Afbeeldingen3DContextVerloren SDL Canvas 'webglcontextlost'-evenement

PPP_InputEvent

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
HandleInputEvent SDL Element.addEventListener

PPP_instantie

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
DidCreëer N.v.t <Element>[sleutel] Met algemene DOM-toegang kunt u tagkenmerken uitvissen
Heeft vernietigd N.v.t N.v.t Niet geactiveerd voor NaCl
DidChangeView N.v.t Element 'formaat wijzigen' Gebeurtenis
Heeft de focus gewijzigd N.v.t Element 'focus', 'focusin', 'focusout' Gebeurtenissen
BehandelDocumentLoad N.v.t GAP - Geen manier om te registreren als een mime-type handler NaCl-modules via apps + een manifestinvoer kunnen worden ingesteld om bepaalde mime-typen te verwerken.

PPP_MessageHandler

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Behandel bericht inbinden MessagePort 'bericht'-gebeurtenis Venster 'bericht'-gebeurtenis
Behandelblokkeringsbericht N.v.t GAP - Geen direct equivalent Soortgelijke synchronisatie kan buiten de hoofdthread worden uitgevoerd met Atomics.wait. Dit is toegevoegd om de emulatie van synchrone plug-in-API's te ondersteunen.

PPP_Berichten

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Behandel bericht inbinden MessagePort 'bericht'-gebeurtenis Venster 'bericht'-gebeurtenis

PPP_MouseLock

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
MuisVergrendelenVerloren SDL Element 'pointerlockchange', 'pointerlockerror'-gebeurtenissen

IRT

PPB_Audio

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren X SDL (gedeeltelijk) GAP (gedeeltelijk) - AudioWorkletNode RUW gelijkwaardig De AudioWorkletSpec is klaar, maar AudioDeviceClient past mogelijk beter bij deze API. De AudioDeviceClient wordt nog steeds gespecificeerd door de community. Het werklet is mogelijk niet het ruwe equivalent voor deze API.
GetCurrentConfig SDL AudioContext.* (haalt de doorgegeven instellingen terug)
Start afspelen SDL AudioBufferSourceNode.start
Stop het afspelen SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Tijdstempel ophalen SDL AudioBufferSourceNode.start (parameter) Elke keer doorgegeven in plaats van vastgemaakt aan de buffer.
Tijdstempel instellen SDL AudioBufferSourceNode.start (parameter)
GetSampleRate SDL AudioBuffer.sampleRate
GetSampleSize GAT GAP - WebAudio gebruikt alleen 32-bit float, PPAPI doet 16-bit int. PPAPI ondersteunt theoretisch meerdere steekproefgroottes. In de praktijk ondersteunt het alleen 16-bits samples. Helaas hebben ontwikkelaars om 16-bits steekproefgroottes gevraagd om geheugengebruik te besparen. De volgende versie van de Web Audio-specificatie implementeert ondersteuning voor 16-bits samples. Een optimalisatie voor AudioBuffer zou vergelijkbaar met Firefox kunnen worden geïmplementeerd door een 16-bits buffer te gebruiken voor audio die afkomstig is van decodeAudioData
GetNumberOfChannels SDL AudioBuffer.numberOfChannels
GetDataBuffer SDL AudioBuffer.getChannelData
GetBuffergrootte SDL AudioBuffer.lengte

PPB_AudioConfig

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
CreëerStereo16Bit GAT GAP - Alleen 32-bit float-samples ondersteund De volgende versie van de Web Audio-specificatie implementeert ondersteuning voor 16-bits samples.
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.lengte
AanbevolenSampleRate SDL AudioContext.sampleRate (van standaardconstructie) Een AudioContext heeft standaard de voorkeursbemonsteringsfrequentie die overeenkomt met de werkelijke bemonsteringsfrequentie van het hardware-audioapparaat.
AanbevolenSampleFrameCount GAT GAP - Zou worden afgehandeld met de geplande AudioDeviceClient Er is een openstaand probleem om een ​​door de gebruiker opgegeven formaat toe te staan, maar dit wordt nog gedefinieerd. Dit kan waarschijnlijk het beste worden afgehandeld met AudioDeviceClient, die u kan vertellen wat de juiste maat zou zijn voor de gegeven hardware.

PPB_Console

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Logboek tijd console.log/warn/error/...
LogMetSource GAT GAT De Console API wordt beschouwd als een voldoende volledige vervanging, tenzij er specifieke gebruiksscenario's zijn die door ontwikkelaars naar voren zijn gebracht voor de functionaliteit die door LogWithSource wordt geboden. DevTools Source Maps kunnen worden gebruikt om getranspileerde JavaScript-codes in hun oorspronkelijke brontaal te debuggen.

PPB_Kern

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
haalTijd tijd nieuwe Datum().getTime()
getTimeTicks tijd nieuwe Datum().getTime()
IsMainThread GAT venster.document !== ongedefinieerd
CallOnMainThread GAT Worker.postMessage + Atomics.wait Equivalente synchronisatie kan worden opgebouwd.

PPB_FileIO

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren FS (gedeeltelijk) window.chooseFileSystemEntries() Creëer en open worden verschillend gebruikt, maar de stukken zijn even krachtig.
Open FS (gedeeltelijk) window.chooseFileSystemEntries()
Vraag FS (gedeeltelijk) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (gedeeltelijk) - Blob.type kan ook worden gebruikt om het MIME-type te controleren. Het bestandssysteemtype, de aanmaaktijd en de laatste toegangstijd kunnen niet worden bepaald met de Native File System API.
Aanraken FS (gedeeltelijk) FileSystemDirectoryHandle.getFile("naam", {create: true})
Lezen FS (gedeeltelijk) Blob.slice().arrayBuffer()
Schrijven FS (gedeeltelijk) BestandSysteemWriter.write()
Lengte instellen FS (gedeeltelijk) FileSystemWriter.truncate()
Spoelen GAP (gedeeltelijk) GAP (gedeeltelijk) - Bestanden worden leeggemaakt wanneer FileSystemWrite.close() wordt aangeroepen Dit is zo bedoeld omdat de Native File System API-bestanden worden blootgesteld aan het besturingssysteem. Daarom moet er een Safe Browsing-controle worden uitgevoerd voordat gegevens aan het besturingssysteem worden getoond.
Dichtbij FS (gedeeltelijk) FileSystemWriter.close() Annuleert lopende bewerkingen niet, maar wist alle gegevens die tot nu toe naar de schijf zijn geschreven.
LeesToArray GAT Blob.slice().arrayBuffer() of Blob.arrayBuffer() Maakt parallel lezen van meerdere subbereiken mogelijk.

PPB_BestandRef

PPAPI-methode Veronderstelt discussies Emscripten Web-API Beperkingen
Creëren FS (gedeeltelijk) FileSystemDirectoryHandle.getFile("naam", {create: true})
GetFileSystemType FS (gedeeltelijk) Bestandssysteem.type
Naam ophalen FS (gedeeltelijk) Bestandsnaam
GetPath FS (gedeeltelijk) GAP (gedeeltelijk) - Met de Native File System API kan het relatieve pad van een bestand worden bepaald op basis van verwijzing naar een map die het bestand bevat met behulp van FileSystemHandle.resolve(FileSystemHandle) Het absolute pad van een bestand kan niet worden bepaald en de gebruiker moet toestemming verlenen om toegang te krijgen tot de map die het bestand bevat.
GetOuder FS (gedeeltelijk) GAP (gedeeltelijk) - Met de Native File System API kan het relatieve pad van een bestand worden bepaald op basis van verwijzing naar een map die het bestand bevat met behulp van FileSystemHandle.resolve(FileSystemHandle) De gebruiker moet toestemming verlenen om toegang te krijgen tot de map die het bestand bevat.
MaakDirectory FS (gedeeltelijk) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
Aanraken FS (gedeeltelijk) FileSystemDirectoryHandle.getFile("naam", {create: true}) De wijzigingstijd kan worden verkort door te schrijven.
Verwijderen FS (gedeeltelijk) FileSystemDirectoryHandle.removeEntry() In tegenstelling tot de PPAPI hoeven mappen niet leeg te zijn.
Hernoemen FS (gedeeltelijk) GAP (gedeeltelijk) - Met de Native File System API kan het bestand worden geschreven met de nieuwe naam met behulp van een combinatie van FileSystemFileHandle.getFile() voor de nieuwe naam en FileSystemFileHandle.createWriter().write() met de inhoud van de oude bestand. Vervolgens FileSystemDirectoryHandle.removeEntry() om het oude bestand te verwijderen. Er is geen directe API die dit in één stap doet in de Native File System API.
Vraag GAP (gedeeltelijk) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (gedeeltelijk) - Blob.type kan ook worden gebruikt om het MIME-type te controleren. Het bestandssysteemtype, de aanmaaktijd en de laatste toegangstijd kunnen niet worden bepaald met de Native File System API.
Lees DirectoryEntries FS (gedeeltelijk) FileSystemDirectoryHandle.getEntries ()

PPB_FILESYSTEM

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren FS (gedeeltelijk) Window.RequestFilesystem JS API doet beide in één stap
Open GAT Window.RequestFilesystem JS API doet beide in één stap
GetType GAT Bestandssystem.type

Ppb_fullscreen

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Isfullscreen html5.h Document.fullscreenabled
Setfullscreen html5.h Document.RequestfullScreen
Getcreensize html5.h Document.exitfullscreen

PPB_GAMEPAD

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Steekproef SDL Gamepad.* Het gamepad -object legt een tijdstempel bloot ten opzichte van navigatiestart. Het wordt bijgewerkt wanneer gegevens worden ontvangen van de hardware https://www.w3.org/tr/gamepad/#gamepad-interface

PPB_Grafisch2D

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren SDL Canvas.getContext ('2d')
Beschrijven SDL Canvas.clientwidth + canvas.clientheight
Paintimagedata SDL CanvasRendingContext2d.putimagedata
Rol GAT CanvasRendringerContext2d.scrollintoview, canvasRendingContext2d.Drawimage Gap (gedeeltelijk) - kan worden geïmplementeerd door het canvas op zichzelf te trekken, met een offset, met behulp van DrawImage en vervolgens de rest in te vullen.
Vervangings- SDL CanvasRenderingContext2d.Drawimage
Spoelen GAT Geen direct equivalent Gap (gedeeltelijk) - Er is altijd een impliciete spoeling aan het einde van de trekkeur; Dit zal waarschijnlijk niet veranderen. De combinatie van offscreencanvas en ImageBitMapRenderingContext biedt echter vergelijkbare functionaliteit.
Sets SDL CanvasRenderingContext2d.Scale
GetCale SDL CanvasRendingContext2d.CurrentTransform
SetLayerTransform SDL CanvasRendingContext2d.setTransform canvasRendringerContext2d.scale canvasRendringerContext2d.translate

PPB_Grafisch3D

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
GetattribmaxValue OpenGL ES 3.0 WebGL 2.0 GAP (gedeeltelijk) - WebGL 2.0 en Emscripten's belichting van OpenGL ES 3.0 Ondersteuning door de gebruiker gedefinieerde multisampled framebuffers, waarin alle parameters die via PPAPI worden geconfigureerd, kunnen worden ingesteld.
Creëren SDL Canvas.getcontext
GetaTtribs SDL WebGlRendingContext.getContextAttributes
Setattribs SDL Canvas.getContext (.., opties)
Geterror SDL WebGlrendingContext.getError
ResizeBuffers SDL Canvas.width = w; Canvas.Height = h;
Swapbuffers GAT Geen direct equivalent Gap (gedeeltelijk) - Er is altijd een impliciete spoeling aan het einde van de trekkeur; Dit zal waarschijnlijk niet veranderen. De combinatie van offscreencanvas en ImageBitMapRenderingContext biedt echter vergelijkbare functionaliteit.

PPB_ImageData

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
GetNativeImagedatAformat SDL IMagedata Mandates RGBA -bestelling
IsimagedatAformats ondersteund SDL IMagedata Mandates RGBA -bestelling
Creëren SDL CanvasRendingContext2d.CreateImagedata
Beschrijven SDL IMagedata heeft nooit een stap
Kaart SDL IMagedata.data
Onrust SDL IMagedata.data

PPB_InputEvent

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
RequestInputevents SDL Geen direct equivalent Het ontbreken van deze functie is waarschijnlijk minder relevant, omdat JS / WASM-runs op de hoofdthread en meer goedkope filtergebeurtenissen kan filteren zonder een dwarsreis te maken.
RequestFilteringInputevents SDL muis* sleutel* wiel* touch* Compositie* gebeurtenissen
SDL Element.addEventListener
ClearInputEventRequest SDL Element.removeEventListener
GetType SDL Evenementklasse afstammelingen
Getimestamp SDL Evenement.timestamp
GetModifiers SDL *Event.altkey/shiftKey/Metakey/ctrlkey

Ppb_mouseInpuTEvent

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren SDL MouseEvent
GetButton SDL MouseEvent.Button
Opzichten SDL MouseEvent.client*/pagina*/offset*
GetClickCount SDL dblClick 'vs' mousedown 'gebeurtenissen
Verkeersbeweging SDL MouseEvent.Movement*

Ppb_wheelinpuTEvent

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren SDL Wheelevent
Getdelta SDL WheelEvent.Delta*
GetTicks GAT Gap - Deltamode bevat deze info, maar onvolledig. Er is een discussie over het implementeren van een wheelEvent.Deltamode API: https://github.com/w3c/uevents/issues/181#iscomment-537811017
Getcrollbypage GAT Gap - Deltamode bevat deze info, maar onvolledig. Er is een discussie over het implementeren van een wheelEvent.Deltamode API: https://github.com/w3c/uevents/issues/181#iscomment-537811017

PPB_KeyboardInputEvent

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren SDL Toetsenbord
GetKeycode SDL Toetsenbordevent.keycode
Getaractertext SDL Toetsenbordevent.key
GetCode SDL Toetsenbordevent.code

PPB_TouchInputEvent

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren SDL Touchevent
AddTouchPoint SDL TouchEvent.touches.push
GetTouchCount SDL TouchEvent.touches.length
GetTouchByIndex SDL TouchEvent.Touches [i]
GetTouchbyid SDL Touch.Indentifer (om dit zelf uit te zoeken)

Ppb_imeInpuTEvent

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren GAT Composition Event
GetText GAT CompositionEvent.Data
GetsegmentNumber GAT Gap - geen direct equivalent Deze gegevens kunnen mogelijk worden opgehaald uit compositionEvent.data.
GetSegmentOffset GAT Gap - geen direct equivalent
GetTargetSegment GAT Gap - geen direct equivalent
Getselection GAT Gap - geen direct equivalent

Ppb_instance

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Bindgraphics SDL Canvas.getContext (moot als binding is automatisch).
Isfullframe GAT Gap - geen equivalent aan handlers van het mime -type. NaCl -apps kunnen worden geregistreerd om een ​​bepaald MIME -type te verwerken en het hele document te bezitten.
Didcreëren N.v.t <element> [Key] Met algemene DOM -toegang kunt u tagattributen vissen
Diddestroy N.v.t N.v.t Niet geactiveerd voor NaCl
DidchangeView N.v.t Element 'Resize' evenement
Didchangefocus N.v.t Element 'focus', 'focusin', 'focusout' gebeurtenissen
Handlee lading N.v.t Gap - geen manier om te registreren als handler van het mime -type NaCl -modules via apps + een manifest -invoer kan worden ingesteld om bepaalde mime -typen te verwerken.

PPB_MediaStreamAudioTrack

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Configureer GAT GetUserMedia () De beperkingen van getUserMedia () kunnen de configuratiewaarden bieden die u in MediaStreamTrack kunt gebruiken.
Getattrib GAT MediaStreamTrack.getSettings ()
Getid GAT MediaStreamTrack.id
Heuveld GAT MediaStreamTrack. Readystate
GetBuffer GAT Gap - geen equivalent
Recyclebuffer GAT Gap - geen equivalent
Dichtbij GAT MediaStreamTrack.stop ()

PPB_MediaStreamVideotrack

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren GAT Canvas vangen Canvas Capture biedt de mogelijkheid om programmatisch videoframes te introduceren.
Configureer GAT ApplyConstraints (), GetUserMedia () Gap (gedeeltelijk) - De omvang van de beschikbare configuraties in de web -API kan verschillen van de PPAPI.
Getattrib GAT MediaStreamsettings.width
GAT MediaStreamsettings.Height
GAT Gap - Geen equivalent aan pp_mediaStreamVideotrack_attrib_buffered_frames MediaStream kan niet worden voorgeladen, dus het zal nooit bufferen: https://www.w3.org/tr/mediacapture-streams/#mediasstreams-in-media-elements
GAT Gap - geen equivalent aan pp_mediaStreamVideotrack_attrib_format
Getid GAT MediaStreamTrack.id
Heuveld GAT MediaStreamTrack. Readystate
GetFrame GAT Gap - geen equivalent
Recyclrame GAT Gap - geen equivalent
Dichtbij GAT MediaStreamTrack.stop ()
GetemptyFrame GAT Gap - geen equivalent
Putframe GAT Gap - geen equivalent

Ppb_messageloop

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren N.v.t Meestal betwisten, krijgen werknemers een impliciete evenementenlus.
GetFormainThread N.v.t Meestal betwisten, krijgen werknemers een impliciete evenementenlus.
GetCurrent N.v.t Meestal betwisten, krijgen werknemers een impliciete evenementenlus.
Attachtocurrentthread N.v.t Meestal betwisten, krijgen werknemers een impliciete evenementenlus.
Loop N.v.t Meestal betwisten, krijgen werknemers een impliciete evenementenlus.
Postwerk N.v.t Meestal betwisten, krijgen werknemers een impliciete evenementenlus.
Postquit N.v.t Meestal betwisten, krijgen werknemers een impliciete evenementenlus.

Ppb_messaging

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Na de message N.v.t Window.PostMessage
RegisterMessageHandler N.v.t Window.AddEventListener
Unregistermessagehandler N.v.t Window.RemoveEventListener

PPB_MouseCursor

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Setcursor SDL Element.style.cursor Dezelfde set voorraadcursors worden ondersteund. Aangepaste cursors kunnen worden gedaan met URL (..). Dynamische aangepaste cursors kunnen worden gedaan met data uris. CSS3 ondersteunt het specificeren van de hotspot.

PPB_MuisVergrendeling

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Lockmouse SDL Element.RequestPointerlock
Ontgrendelen SDL Element.exitpointerlock

Ppb_opengles2

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Verschillende methoden OpenGles Dicht bij WebGL 1.0 in functionaliteit.
X Offscreencanvas

PPB_TextInputController

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
SetTextInputType GAT Gap - mogelijk gevuld door Input Method Editor API Sommige ontwikkelaars willen graag op deze manier kunnen hint, of bij voorkeur de mogelijkheid om IME -gebeurtenissen / uitvoerinline in een canvas te onderscheppen en weer te geven.
Updatecaretpositie GAT Gap - mogelijk gevuld door Input Method Editor API https://www.w3.org/tr/ime-api/
AnnulerencompositionText GAT Gap - mogelijk gevuld door Input Method Editor API https://www.w3.org/tr/ime-api/
Updatesurroundtext GAT Gap - mogelijk gevuld door Input Method Editor API https://www.w3.org/tr/ime-api/

PPB_URLLader

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren insluiten new xmlhttpRequest ();
Open insluiten Xmlhttprequest.open
Followedirect insluiten Request.Redirect
GAT Gap - geen XMLHTTPRequest -equivalent
Getuploadprogress insluiten XMLHTTPREQUEST 'voortgangsgebeurtenis
GAT Fetchobserver Nog niet gespecificeerd of geïmplementeerd; https://github.com/whatwg/fetch/issues/607
GetDownloadProgress insluiten XMLHTTPREQUEST 'voortgangsgebeurtenis
GAT Fetchobserver Nog niet gespecificeerd of geïmplementeerd; https://github.com/whatwg/fetch/issues/607
GetResponseInfo insluiten Xmlhttprequest.getallResponseHeaders
insluiten Reactie ophalen.*
ReadResponse Body insluiten Xmlhttprequest.response
insluiten Lichaam.* (Reactie is een lichaam)
FinishStreamingTofile insluiten Gap - geen direct equivalent XMLHTTPREQUEST en ophalen, nemen beide streaming aan het geheugen aan, in plaats van rechtstreeks naar een opslag.
Dichtbij insluiten Xmlhttprequest.abort
GAT Fetch API: abortsignal en abortcontroller

PPB_URLRequestInfo

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren insluiten Xmlhttprequest
insluiten Ophalen verzoek
Setproperty GAT Gap - geen direct equivalent voor xmlhttprequest XMLHTTPREQUEST biedt geen directe manieren om de limiet per vraag te stellen na omleidingen, stream naar een bestand, stel referentier- of referentiebeleid in.
insluiten Verzoek.*
AppendDatatobody insluiten Xmlhttprequest.Send Gap - Beide moeten het hele lichaam hebben, in plaats van een brok.
insluiten fetch (.., Opties: Body)
Appendfiletobody GAT fetch () Upload streaming https://www.chromestatus.com/features/5274139738767360
N.v.t <vorm> U kunt ook lezen met FileReader en Upload, maar dat lijkt meer op ApendDatatobody

PPB_URLResponsInfo

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
GetProperty insluiten Xmlhttprequest.getallResponseHeaders + Anderen
insluiten Reactie ophalen.*
GetBodyasfileref insluiten Ophalen respons (lichaam) .Blob () Aangenomen dat de opslaglaag de overdracht optimaliseert.

PPB_Var

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Varfromutf8 insluiten Textdecoder.decode
Vartoutf8 insluiten Textencoder.encode
VarfromResource N.v.t N.v.t
Vartoresource N.v.t N.v.t

PPB_VarArray

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Krijgen insluiten Array [i]
Set insluiten Array [i] = x
Getsgte insluiten Array.lengte
Setlengte insluiten Array.length = n

PPB_VarArrayBuffer

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren insluiten nieuwe arraybuffer (n)
Byteleengt insluiten Arraybuffer.byteleength
Kaart GAT Gap - geen direct equivalent ASM.JS / WADM -modules kunnen geen regio's van een arraybuffer in kaart brengen, behalve hun enkele lineaire geheugenhoop. Toekomstige meerdere herinneringen of geheugenmapping kunnen dit verbeteren.
Onrust GAT Gap - geen direct equivalent

PPB_VarDictionary

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren insluiten {}
Krijgen insluiten <object> [i]
Set insluiten <object> [i] = x
Verwijderen insluiten verwijder <object> [i]
Haskey insluiten x in <object>
Getkeys insluiten voor (k in <object>) {} Geen letterlijk equivalent, maar het kan worden gebouwd.

PPB_VideoDecoder

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren GAT Gap - zou worden behandeld met de voorgestelde WebCodecs API met behulp van VideodeCoder () https://github.com/wicg/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latentie-streaming-or-cloud-gaming
Initialiseren GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van VideodeCoder () initialisatieparameters (VideodeCoderInitParameters) https://github.com/wicg/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latentie-streaming-or-cloud-gaming
Decoderen GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van ReadableTream.Pipethrough (VideodeCoder) https://github.com/wicg/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latentie-streaming-or-cloud-gaming
GetPicture GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van ReadableStream.Pipethrough (VideodeCoder) .Pipeto (VideotrackWriter (). Writable) https://github.com/wicg/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latentie-streaming-or-cloud-gaming
Recyclepicte GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API. Het huidige ontwerp zal de foto's automatisch recyclen en het decoderingsproces op gang houden. https://github.com/wicg/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latentie-streaming-or-cloud-gaming
Spoelen GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API. De API wordt Flush () genoemd, maar er is nog steeds discussie over hoe deze zal worden gesequenced met betrekking tot decodeeroproepen. https://github.com/wicg/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latentie-streaming-or-cloud-gaming
Opnieuw instellen GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API door de videoodecoderinstantie te vernietigen en een nieuwe te maken. Dit zal niet zo efficiënt zijn als een speciale resetmethode, maar de semantiek voor een reset () API wordt nog steeds besproken. https://github.com/wicg/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latentie-streaming-or-cloud-gaming

Ppb_videoencoder

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van VideoEncoder ()
GetPortedProfiles GAT Gap (gedeeltelijk) - navigator.mediacapabilities.encodingInfo () De ondersteunde profielen moeten één voor één worden gecontroleerd.
Initialiseren GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van Initialisatieparameters van VideoEncoder ()
GetFrames -equired GAT Gap - geen equivalent Het is onwaarschijnlijk dat de framepool die intern wordt gebruikt door de Web Codecs API wordt blootgesteld.
GetframecodeSize GAT Gap - geen equivalent Het is onwaarschijnlijk dat de framepool die intern wordt gebruikt door de Web Codecs API wordt blootgesteld.
GetVideoframe GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van ReadableTream.Pipethrough (VideoEncoder). Dit zou de gegevens rechtstreeks in de leesbare stream coderen in plaats van een enkel frame te pakken om te vullen met gegevens vóór het coderen.
Coderen GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van ReadableTream.Pipethrough (VideoEncoder)
GetBitStreambuffer GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API. Het huidige ontwerp gaat automatisch door de gecodeerde bitstream -buffer die doorgaat. De WebCodecs API gaat momenteel ervan uit dat Bitstream Buffer kan worden gekopieerd in plaats van samengevoegd, dus het hoeft niet te worden gerecycled.
RecyclebitstreamBuffer GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API. Het huidige ontwerp zal de buffer automatisch recyclen om het coderingsproces op gang te houden. Dit zal in de toekomst waarschijnlijk niet veranderen, omdat de implicaties van de prestaties kleiner zijn.
RequestEncoDingParametersChange GAT Gap - zou worden afgehandeld door de voorgestelde Web Codecs API. Bepaalde parameters zullen de mogelijkheid hebben om meteen te worden gewijzigd, terwijl anderen vereisen dat de encoder wordt afgebroken.
Dichtbij GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API met behulp van VideoEncoder.close ()

Ppb_videoframe

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Getimestamp GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API.
Settimestamp GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API.
GetFormat GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API.
Getsize GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API.
GetDatabuffer GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API.
GetDatabufferize GAT Gap - zou worden afgehandeld met de voorgestelde WebCodecs API.

PPB_VIEW

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Getrect insluiten Element.GetBoundingClientRect
Isfullscreen insluiten Document.fullscreenabled Heeft betrekking op documenteren in plaats van slechts één element.
Is van het visbaar insluiten Kruispunt
ISPAGEVISIBLE insluiten Document.VisibilityState
GetCliprect insluiten Kruispunt
GetDevicesCale insluiten Window.DevicePixelRatio
GetcssScale insluiten <element> .GetBoundingClientRect (). Breedte / <Element> .offsetWidth
GetScrolloffset insluiten <element> .scrolltop / <element> .scrolllleft

Ppb_websocket

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren GAT Websocket.websocket
Verbinden GAT WebSocket.Websocket (URL, ...) Websocket 'Open' -evenement
Dichtbij GAT Websocket.close
Ontvangstmessage GAT Websocket 'Message' Event Websocket 'Fout' Evenement Websocket 'Sluiten' Evenement
Sendmessage GAT Websocket.Send
GetBufferedamount GAT Websocket.BufferedAmount
GetClosecode GAT Closeevent.Code
GetCloserseason GAT Closeevent.Reason
GetClosewasClean GAT Closeevent.waSclean
Getextensions GAT Websocket.extensions
GetProtocol GAT Websocket.protocol
Getreadystate GAT Websocket.readystate
GetUrl GAT Websocket.url

Ppp_graphics3d

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Graphics3dContextLost SDL CANVAS 'WebGlContextLost' -gebeurtenis

PPP_InputEvent

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
HandleinputEvent SDL Element.addEventListener

PPP_Instance

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Didcreëren N.v.t <element> [Key] Met algemene DOM -toegang kunt u tagattributen vissen
Diddestroy N.v.t N.v.t Niet geactiveerd voor NaCl
DidchangeView N.v.t Element 'Resize' evenement
Didchangefocus N.v.t Element 'focus', 'focusin', 'focusout' gebeurtenissen
Handlee lading N.v.t Gap - geen manier om te registreren als handler van het mime -type NaCl -modules via apps + een manifest -invoer kan worden ingesteld om bepaalde mime -typen te verwerken.

PPP_MessageHandler

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Handlemering insluiten Bericht 'bericht' bericht 'bericht' bericht 'Bericht'
Handgreepblockingmessage N.v.t Gap - geen direct equivalent Soortgelijke synchronisatie kan worden uitgevoerd met de hoofddraad met atomics. WAIT. Dit werd toegevoegd ter ondersteuning van emulatie van synchrone plug -in API's.

PPP_Berichten

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Handlemering insluiten Bericht 'bericht' bericht 'bericht' bericht 'Bericht'

PPP_MouseLock

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Mouslocklost SDL Element 'PointerLockchange', 'PointerLockerror' gebeurtenissen

PPAPI (apps)

Ppb_hostresolver

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren X GAT Gap (gedeeltelijk) - Geen direct equivalent
Oplossen X GAT Gap (gedeeltelijk) - Geen direct equivalent
GetCanonicalName X GAT Gap (gedeeltelijk) - Geen direct equivalent
GetNetAddressCount X GAT Gap (gedeeltelijk) - Geen direct equivalent
GetNetAddress X GAT Gap (gedeeltelijk) - Geen direct equivalent

Ppb_netaddress

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
CreateFromipv4Address X GAT Gap (gedeeltelijk) - Geen direct equivalent
CreateFromipv6Address X GAT Gap (gedeeltelijk) - Geen direct equivalent
Getfamily X GAT Gap (gedeeltelijk) - Geen direct equivalent
Beschrijfasstring X GAT Gap (gedeeltelijk) - Geen direct equivalent
BeschrijfeAsipv4Address X GAT Gap (gedeeltelijk) - Geen direct equivalent
Beschrijfeasipv6adress X GAT Gap (gedeeltelijk) - Geen direct equivalent

Ppb_networkList

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
GetCount X GAT Gap - geen direct equivalent
GetName X GAT Gap - geen direct equivalent
GetType X GAT Gap - geen direct equivalent
GetState X GAT Gap - geen direct equivalent
Getipaddress X GAT Gap - geen direct equivalent
GetDisplayName X GAT Gap - geen direct equivalent
Getmtu X GAT Gap - geen direct equivalent

PPB_NetwerkMonitor

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
Creëren X GAT Gap - geen direct equivalent
UpdateNetWorkList X GAT Gap - geen direct equivalent

PPB_NetwerkProxy

PPAPI -methode Neemt threads aan Emscripten Web API Beperkingen
GetProxyForurl X GAT Gap - geen direct equivalent

Ppb_tcpsocket en ppb_udpsocket

Er is geen directe 1: 1 mapping voor migratie. In plaats daarvan hebben we hieronder enkele gebruikersscenario's geschetst en wat het aanbevolen migratiepad is.

Use case Aanbevelingen
Scherm delen getDisplayMedia en WebRTC ( demo )
Laden van een lokale server om het bandbreedtegebruik te minimaliseren XHR, Fetch, Streams, Service Worker, Cache API's
Laden vanuit een lokaal exemplaar van een web -app / verbinding maken met een lokale exemplaar van een web -app WeBrtc
Chatten Websocket *
Realtime audio/videocommunicatie WeBrtc
Samenwerking Websocket *
Realtime multiplayer -games WebTransport ** tenzij p2p in welk geval weBrtc (of WebTransport via RTCICEransport)
Realtime interactieve streaming WebTransport **
Communiceren met Legacy Server Proxyserver of middleware om protocolconversie uit te voeren. Feedback to bit.ly/network-api-gaps

*: Of WebTransport in de toekomst

**: zie Chromestatus voor beschikbaarheid