Annonces d'abandon de (P)NaCl
Compte tenu de l'élan de la prise en charge de WebAssembly entre les navigateurs, nous prévoyons de concentrer nos efforts sur le code natif WebAssembly à l'avenir et de supprimer la prise en charge de PNaCl au quatrième trimestre 2019 (à l'exception des applications Chrome). Nous pensons que l'écosystème dynamique autour de WebAssembly le rend plus adapté aux nouvelles applications Web hautes performances et aux applications existantes, et que l'utilisation de PNaCl est suffisamment faible pour justifier son abandon.
À partir de Chrome 76, PNaCl sur le Web ouvert a été déplacé
Phase d'évaluation,
qui permet aux développeurs Web de s'inscrire et d'accéder à une fonctionnalité qui n'est pas activée par défaut.
Il s'agit généralement d'une nouvelle fonctionnalité proposée, mais dans le cas présent, il s'agit d'une fonctionnalité en cours d'abandon.
Les développeurs peuvent s'inscrire sur la console d'évaluation Origin Trial
et reçoivent un jeton, qui peut être intégré dans une page et active la fonctionnalité sans que l'utilisateur ait besoin d'utiliser un indicateur.
(Pour en savoir plus, consultez le guide associé.) L'essai devrait se poursuivre jusqu'à Chrome 78, soit jusqu'en décembre 2019 environ.
Ce changement n'a pas d'incidence sur NaCl ou PNaCl dans les applications ou les extensions Chrome, ni sur l'attribut "enable-nacl".
L'indicateur dans chrome://flags peut également être utilisé pour activer PNaCl en local à des fins de test.
(cet indicateur conserve également sa fonction actuelle d'activation de NaCl "native" non-PNaCl sur n'importe quelle page).
Nous avons également récemment annoncé l'abandon des applications Chrome en dehors de ChromeOS au premier trimestre 2018.
Pour la plupart des cas d'utilisation de (P)NaCl, nous vous recommandons de passer du SDK NaCl à Emscripten.
La migration est susceptible d'être relativement simple si votre application est portable vers Linux, utilise SDL ou des API POSIX.
Bien que l'assistance directe pour les API NaCl / Pepper ne soit pas disponible,
nous avons tenté de lister les API Web équivalentes.
Pour les cas de port plus difficiles, veuillez nous contacter sur native-client-discuss@googlegroups.com.
Migration de l'API
Nous avons indiqué ici l'état des substituts de la plate-forme Web pour chaque
des API exposées à la (P)NaCl.
En outre, le tableau liste la bibliothèque ou l'option dans Emscripten.
qui offre le substitut le plus proche.
Nous prévoyons d'ajouter la prise en charge des threads de mémoire partagée à WebAssembly en 2017,
car les fils de discussion sont essentiels pour faire correspondre l'utilisation la plus intéressante de (P)NaCl
cas d'utilisation. Éléments de migration qui supposent la compatibilité des threads à venir
sont indiquées ci-dessous. Si le contrôle de flux de votre application repose en grande partie sur le blocage
API, vous constaterez peut-être que la prise en charge des threads est nécessaire pour faciliter le portage.
Même si nous nous sommes efforcés d'être précis dans ce tableau,
qu'il ne fait aucun doute
d'erreurs ou d'omissions.
Si vous en rencontrez un, veuillez nous contacter au
native-client-discuss@googlegroups.com
PPAPI
PPB_Audio
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
x |
SDL (partiel) |
GAP (partiel) : équivalence approximative d'AudioWorkletNode |
AudioWorkletSpec est terminé, mais AudioDeviceClient est peut-être plus adapté à cette API. La communauté est toujours en train de spécifier AudioDeviceClient. Le Worklet n'est peut-être pas l'équivalent approximatif de cette API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (renvoie les paramètres transmis) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (paramètre) |
Transmis à chaque fois au lieu d'être associé au tampon. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (paramètre) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP : WebAudio n'utilise que des nombres à virgule flottante 32 bits, PPAPI utilise des entiers 16 bits. |
PPAPI accepte théoriquement plusieurs tailles d'échantillonnage. En pratique, il n'accepte que les échantillons 16 bits. Malheureusement, les développeurs ont demandé des tailles d'échantillon de 16 bits afin de réduire l'utilisation de la mémoire. La prochaine version de la spécification Web Audio sera compatible avec les échantillons 16 bits. Une optimisation pour AudioBuffer peut être mise en œuvre comme pour Firefox en utilisant un tampon 16 bits pour le contenu audio provenant de decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
CreateStereo16Bit |
|
GAP |
GAP : seuls les échantillons de nombres à virgule flottante 32 bits sont acceptés |
La prochaine version de la spécification Web Audio sera compatible avec les échantillons 16 bits. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (à partir de la construction par défaut) |
Par défaut, le taux d'échantillonnage préféré d'un AudioContext correspond au taux d'échantillonnage réel de l'appareil audio matériel. |
RecommendSampleFrameCount |
|
GAP |
GAP : serait géré avec le Client AudioDeviceClient prévu |
Un problème est en cours pour permettre une taille spécifiée par l'utilisateur, mais il est encore en cours de définition. Pour ce faire, utilisez AudioDeviceClient, qui vous indique la taille adaptée au matériel donné. |
PPB_Console
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Journal |
|
utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
L'API Console est considérée comme une solution de remplacement suffisamment complète, sauf si des cas d'utilisation spécifiques sont signalés par les développeurs pour la fonctionnalité fournie par LogWithSource. Les cartes sources DevTools peuvent être utilisées pour déboguer le code JavaScript transcompilé dans sa langue source d'origine. |
PPB_Core
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
getTime |
|
utime |
nouveau Date().getTime() |
|
getTimeTicks |
|
utime |
nouveau Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Vous pouvez créer une synchronisation équivalente. |
PPB_FileIO
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
FS (partiel) |
window.chooseFileSystemEntries() |
Les pièces "Créer" et "Ouvrir" sont utilisées différemment, mais elles ont la même puissance. |
Ouvrir |
|
SF (partielle) |
window.chooseFileSystemEntries() |
|
Requête |
|
SF (partielle) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (partial) : vous pouvez également utiliser Blob.type pour vérifier le type MIME. Le type du système de fichiers, l'heure de création et l'heure du dernier accès ne peuvent pas être déterminés avec l'API Native File System. |
Toucher |
|
SF (partielle) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Lire |
|
FS (partiel) |
Blob.slice().arrayBuffer() |
|
Écriture |
|
SF (partielle) |
FileSystemWriter.write() |
|
SetLength |
|
FS (partiel) |
FileSystemWriter.truncate() |
|
Vider |
|
GAP (partielle) |
GAP (partiel) : les fichiers sont effacés lorsque FileSystemWrite.close() est appelé |
C'est normal, car les fichiers de l'API Native File System sont exposés au système d'exploitation. Par conséquent, une vérification de la navigation sécurisée doit être effectuée avant que les données ne soient présentées à l'OS. |
Fermer |
|
SF (partielle) |
FileSystemWriter.close() |
N'annule pas les opérations en attente, mais vide les données écrites jusqu'à présent sur le disque. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() ou Blob.arrayBuffer() |
Autorise plusieurs lectures de sous-plages en parallèle. |
PPB_FileRef
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SF (partielle) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
SF (partielle) |
FileSystem.type |
|
GetName |
|
SF (partielle) |
File.name |
|
GetPath |
|
SF (partielle) |
GAP (partial) : avec l'API Native File System, le chemin relatif d'un fichier peut être déterminé à partir d'une référence à un répertoire qui contient le fichier à l'aide de FileSystemHandle.resolve(FileSystemHandle) |
Le chemin absolu d'un fichier ne peut pas être déterminé et l'utilisateur doit autoriser l'accès au répertoire contenant le fichier. |
GetParent |
|
FS (partiel) |
BROKEN (partiel) : avec l'API Native File System, le chemin relatif d'un fichier peut être déterminé à partir d'une référence à un répertoire contenant le fichier à l'aide de FileSystemHandle.resolve(FileSystemHandle) |
L'utilisateur doit accorder l'autorisation d'accéder au répertoire contenant le fichier. |
MakeDirectory |
|
SF (partielle) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Toucher |
|
SF (partielle) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
La date et l'heure de modification peuvent être modifiées par écrit. |
Supprimer |
|
FS (partiel) |
FileSystemDirectoryHandle.removeEntry() |
Contrairement à la PPAPI, les répertoires ne doivent pas être vides. |
Renommer |
|
FS (partiel) |
Espace négatif (partiel) : avec l'API Native File System, le fichier peut être écrit avec le nouveau nom à l'aide d'une combinaison de FileSystemFileHandle.getFile() pour le nouveau nom et FileSystemFileHandle.createWriter().write() avec le contenu de l'ancien fichier. Ensuite, FileSystemDirectoryHandle.removeEntry() pour supprimer l'ancien fichier. |
Aucune API directe ne permet d'effectuer cette opération en une seule étape dans l'API Native File System. |
Requête |
|
GAP (partielle) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (partiel) : Blob.type peut également être utilisé pour vérifier le type MIME. Le type du système de fichiers, l'heure de création et l'heure du dernier accès ne peuvent pas être déterminés avec l'API Native File System. |
ReadDirectoryEntries |
|
FS (partiel) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SF (partielle) |
window.requestFileSystem |
L'API JavaScript effectue les deux opérations en une seule étape. |
Ouvrir |
|
GAP |
window.requestFileSystem |
L'API JavaScript effectue les deux opérations en une seule étape. |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Échantillon |
|
SDL |
Manette de jeu*. |
L'objet Gamepad expose un code temporel relatif à navigationStart. Il est mis à jour lorsque les données sont reçues depuis le matériel https://www.w3.org/TR/gamepad/#gamepad-interface. |
PPB_Graphics2D
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
Canvas.getContext('2d') |
|
Décrire |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Faire défiler |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (partiel) : peut être implémenté en dessinant le canevas sur lui-même, avec un décalage, à l'aide de drawImage, puis en remplissant le reste. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Vider |
|
GAP |
Aucun équivalent direct |
GAP (partielle) –
Il y a toujours un vidage implicite à la fin du code de dessin. c'est peu probable
à modifier. Cependant, la combinaison de
OffscreenCanvas
et
<ph type="x-smartling-placeholder"></ph>
ImageBitmapRenderingContext
fournissent des fonctionnalités similaires. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (partial) : l'exposition d'OpenGL ES 3.0 par WebGL 2.0 et Emscripten prend en charge des tampons de trame multi-échantillonnés définis par l'utilisateur, dans lesquels tous les paramètres configurables via PPAPI peuvent être définis. |
Créer |
|
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 |
Aucun équivalent direct |
GAP (partielle) –
Il y a toujours un vidage implicite à la fin du code de dessin. c'est peu probable
à modifier. Cependant, la combinaison de
OffscreenCanvas
et
<ph type="x-smartling-placeholder"></ph>
ImageBitmapRenderingContext
offrent des fonctionnalités similaires. |
PPB_ImageData
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetNativeImageDataFormat |
|
SDL |
ImageData exige une commande RVBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData exige une commande RVBA |
|
Créer |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Décrire |
|
SDL |
ImageData n'a jamais de foulée |
|
Carte |
|
SDL |
ImageData.data |
|
Annuler le mappage |
|
SDL |
ImageData.data |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
RequestInputEvents |
|
SDL |
Aucun équivalent direct |
L'absence de cette fonctionnalité est probablement moins pertinente, car JS/Wasm s'exécute sur le thread principal et peut filtrer les événements plus économiquement sans entraîner de va-et-vient entre les processus. |
RequestFilteringInputEvents |
|
SDL |
Événements mouse* key* wheel* touch* composition* |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Descendants de la classe d'événement |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
dblclick ou "mousedown" Événements |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP : deltaMode contient en quelque sorte ces informations, mais de manière incomplète. |
Une discussion est en cours sur l'implémentation d'une API WheelEvent.deltaMode : https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP : deltaMode contient en quelque sorte ces informations, mais de manière incomplète. |
Il y a une discussion sur l'implémentation d'une API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifier (pour le savoir vous-même) |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - No direct equivalent |
Ces données peuvent être récupérées à partir de CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP - No direct equivalent |
|
GetTargetSegment |
|
GAP |
GAP - Aucun équivalent direct |
|
GetSelection |
|
GAP |
GAP - Aucun équivalent direct |
|
PPB_Instance
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
BindGraphics |
|
SDL |
Canvas.getContext (la fonctionnalité de liaison est automatique). |
|
IsFullFrame |
|
GAP |
GAP : pas d'équivalent aux gestionnaires de types MIME. |
Les applications NaCl peuvent être enregistrées pour gérer un type MIME particulier et être propriétaires de l'ensemble du document. |
DidCreate |
|
N/A |
<Element>[clé] |
L'accès général au DOM vous permet de récupérer des attributs de balises |
DidDestroy |
|
N/A |
N/A |
Non déclenché pour NaCl |
DidChangeView |
|
N/A |
Événement "resize" de l'élément |
|
DidChangeFocus |
|
N/A |
Élément "focus", "focusin", "focusout" Événements |
|
HandleDocumentLoad |
|
N/A |
GAP : impossible de s'inscrire en tant que gestionnaire de type MIME |
Les modules NaCl via des applications et une entrée de fichier manifeste peuvent être configurés pour gérer des types mime particuliers. |
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Configurer |
|
GAP |
getUserMedia() |
Les contraintes de getUserMedia() peuvent fournir les valeurs de configuration à utiliser dans MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP : aucun équivalent |
|
RecycleBuffer |
|
GAP |
GAP - Aucun équivalent |
|
Fermer |
|
GAP |
MediaStreamTrack.stop() |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
Capture de canevas |
Canvas Capture permet d'intégrer des images vidéo par programmation. |
Configurer |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (partielle) : le nombre de configurations disponibles dans l'API Web peut être différent de celui disponible dans l'API protégeant la confidentialité. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP : aucun équivalent de PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream ne peut pas être préchargé et ne sera donc jamais mis en mémoire tampon: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP : aucun équivalent à PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - Aucun équivalent |
|
RecycleFrame |
|
GAP |
GAP - Aucun équivalent |
|
Fermer |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP : aucun équivalent |
|
PutFrame |
|
GAP |
GAP - Aucun équivalent |
|
PPB_MessageLoop
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
N/A |
En grande partie sans objet, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
GetForMainThread |
|
N/A |
La plupart du temps, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
GetCurrent |
|
N/A |
En grande partie sans objet, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
AttachToCurrentThread |
|
N/A |
En grande partie sans objet, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
Exécuter |
|
N/A |
En grande partie sans objet, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
PostWork |
|
N/A |
La plupart du temps, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
PostQuit |
|
N/A |
La plupart du temps, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
PPB_Messaging
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
PostMessage |
|
N/A |
Window.postMessage |
|
RegisterMessageHandler |
|
N/A |
Window.addEventListener |
|
UnregisterMessageHandler |
|
N/A |
Window.removeEventListener |
|
PPB_MouseCursor
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
SetCursor |
|
SDL |
Element.style.cursor |
Le même ensemble de curseurs d'actions est accepté.
Les curseurs personnalisés peuvent être créés avec url(..). Les curseurs personnalisés dynamiques peuvent être créés avec des URI de données.
CSS3 permet de spécifier le point d'accès. |
PPB_MouseLock
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Plusieurs méthodes |
|
OpenGLES |
Fonctionnalité proche de celle de WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
SetTextInputType |
|
GAP |
GAP – Peut être rempli par l'API de l'éditeur du mode de saisie |
Certains développeurs aimeraient pouvoir donner des indices de cette manière, ou de préférence intercepter et afficher les événements/sorties IME en ligne dans un canevas. |
UpdateCaretPosition |
|
GAP |
GAP – Peut être rempli par l'API de l'éditeur du mode de saisie |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP – Peut être rempli par l'API de l'éditeur du mode de saisie |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP – Peut être rempli par l'API de l'éditeur du mode de saisie |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
embind |
new XMLHttpRequest() |
|
Ouvrir |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - Aucun équivalent XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
"progress" de XMLHttpRequest Événement |
|
|
|
GAP |
FetchObserver |
pas encore spécifiée ni implémentée ; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
"progress" de XMLHttpRequest Événement |
|
|
|
GAP |
FetchObserver |
Pas encore spécifié ni implémenté : https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Extraire la réponse*. |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Body.* (La réponse est un corps) |
|
FinishStreamingToFile |
|
embind |
GAP - No direct equivalent |
XMLHttpRequest et Fetch partent du principe qu'un flux est envoyé en mémoire plutôt que directement dans un espace de stockage. |
Fermer |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
API Fetch : AbortSignal et AbortController |
|
PPB_URLRequestInfo
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Requête de récupération |
|
SetProperty |
|
GAP |
GAP : aucun équivalent direct pour XMLHttpRequest |
XMLHttpRequest ne permet pas directement de limiter par requête une redirection après redirection, un flux vers un fichier, ou encore une règle concernant l'URL de provenance ou les identifiants. |
|
|
embind |
Requête.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP : les deux doivent comporter l'intégralité du corps, et non un fragment. |
|
|
embind |
récupérer(.., options:corps) |
|
AppendFileToBody |
|
GAP |
Streaming d'importation fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
N/A |
<form> |
Vous pouvez également lire avec FileReader et importer, mais c'est plus comme AppendDataToBody. |
PPB_URLResponseInfo
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders et autres |
|
|
|
embind |
Extraire la réponse* |
|
GetBodyAsFileRef |
|
embind |
Récupérer la réponse (corps) .blob() |
Suppose que la couche de stockage optimise le transfert. |
PPB_Var
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
N/A |
N/A |
|
VarToResource |
|
N/A |
N/A |
|
PPB_VarArray
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Télécharger |
|
embind |
tableau[i] |
|
Prêt ? |
|
embind |
tableau[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
embind |
nouveau ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Carte |
|
GAP |
GAP - Aucun équivalent direct |
Les modules Asm.js / Wasm ne peuvent pas mapper les régions d'un objet ArrayBuffer autres que leur tas de mémoire linéaire unique.
La mise en correspondance de plusieurs mémoires ou de plusieurs mémoires peut améliorer ce processus. |
Annuler le mappage |
|
GAP |
GAP - No direct equivalent |
|
PPB_VarDictionary
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
embind |
{} |
|
Télécharger |
|
embind |
<Object>[i] |
|
Prêt ? |
|
embind |
<Objet>[i] = x |
|
Supprimer |
|
embind |
supprimer <Object>[i] |
|
HasKey |
|
embind |
x dans <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Il n'existe pas d'équivalent littéral, mais il peut être créé. |
PPB_VideoDecoder
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide de VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Initialiser |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide des paramètres d'initialisation 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 : serait géré avec l'API WebCodecs proposée à l'aide de 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 : serait géré avec l'API WebCodecs proposée à l'aide de 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 : Serait géré avec l'API WebCodecs proposée. La conception actuelle recycle automatiquement les images et fait avancer le processus de décodage. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Vider |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. L'API s'appellera Flush(), mais des discussions sont encore en cours sur la façon dont elle sera séquencée par rapport aux appels de décodage. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Réinitialiser |
|
GAP |
GAP : serait géré avec l'API WebCodecs proposée en détruisant l'instance VideoDecoder et en en créant une autre. Cette méthode ne sera pas aussi efficace qu'une méthode de réinitialisation dédiée, mais la sémantique d'une API Reset() est toujours en cours de discussion. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
GAP : serait géré avec l'API WebCodecs proposée à l'aide de VideoEncoder(). |
|
GetSupportedProfiles |
|
GAP |
GAP (partiel) - navigator.mediaCapabilities.encodingInfo() |
Les profils compatibles doivent être vérifiés un par un. |
Initialiser |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide des paramètres d'initialisation VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP : aucun équivalent |
Il est peu probable que le pool de cadres utilisé en interne par l'API Web Codecs soit exposé. |
GetFrameCodedSize |
|
GAP |
GAP : aucun équivalent |
Il est peu probable que le pool de cadres utilisé en interne par l'API Web Codecs soit exposé. |
GetVideoFrame |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide de ReadableStream.pipeThrough(VideoEncoder). Cela encoderait directement les données dans le flux lisible au lieu de saisir un seul frame à remplir de données avant l'encodage. |
|
Encoder |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide de ReadableStream.pipeThrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. La conception actuelle passe automatiquement par le tampon de flux de bits encodé qui transite. |
L'API WebCodecs suppose actuellement que le tampon de flux de bits peut être copié plutôt que mis en commun. Il n'a donc pas besoin d'être recyclé. |
RecycleBitstreamBuffer |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. La conception actuelle recycle automatiquement le tampon pour poursuivre le processus d'encodage. |
Il est peu probable que cela change à l'avenir, car les conséquences sur les performances sont moins importantes. |
RequestEncodingParametersChange |
|
GAP |
GAP : serait géré par la proposition d'API Web Codecs. Certains paramètres peuvent être modifiés instantanément, tandis que d'autres nécessitent la destruction de l'encodeur. |
|
Fermer |
|
GAP |
GAP : serait géré avec l'API WebCodecs proposée à l'aide de VideoEncoder.Close(). |
|
PPB_VideoFrame
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetTimestamp |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
SetTimestamp |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
GetFormat |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
GetSize |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
GetDataBuffer |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée. |
|
GetDataBufferSize |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
PPB_View
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Concerne le document et non un seul élément. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Élément>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop / <Element>.scrollLeft |
|
PPB_WebSocket
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
WebSocket.WebSocket |
|
Connecter |
|
GAP |
WebSocket.WebSocket(url, ...)
Événement WebSocket "open" |
|
Fermer |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
Événement "message" WebSocket
Événement "error" WebSocket
Événement "close" WebSocket |
|
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
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Graphics3DContextLost |
|
SDL |
Canevas "webglcontextlost" Événement |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
DidCreate |
|
N/A |
<Element>[clé] |
L'accès général au DOM vous permet de récupérer des attributs de balises |
DidDestroy |
|
N/A |
N/A |
Non déclenché pour NaCl |
DidChangeView |
|
N/A |
Événement "resize" de l'élément |
|
DidChangeFocus |
|
N/A |
Élément "focus", "focusin", "focusout" Événements |
|
HandleDocumentLoad |
|
N/A |
GAP - No way to register as a mime type handler |
Les modules NaCl via des applications et une entrée de fichier manifeste peuvent être configurés pour gérer des types mime particuliers. |
PPP_MessageHandler
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
HandleMessage |
|
embind |
Événement "message" de MessagePort Événement "message" de la fenêtre |
|
HandleBlockingMessage |
|
N/A |
GAP - Aucun équivalent direct |
Une synchronisation similaire peut être effectuée en dehors du thread principal à l'aide d'Atomics.wait. Ajouté pour permettre l'émulation d'API de plug-ins synchrones. |
PPP_Messaging
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
HandleMessage |
|
embind |
MessagePort "message" Événement
Fenêtre "message" Événement |
|
PPP_MouseLock
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
MouseLockLost |
|
SDL |
Élément "pointerlockchange", "pointerlockerror" Événements |
|
IRT
PPB_Audio
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
x |
SDL (partiel) |
GAP (partiel) : équivalence approximative d'AudioWorkletNode |
AudioWorkletSpec est terminé, mais AudioDeviceClient est peut-être plus adapté à cette API. La communauté est toujours en train de spécifier AudioDeviceClient. Le Worklet n'est peut-être pas l'équivalent approximatif de cette API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (renvoie les paramètres transmis) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (paramètre) |
Transmis à chaque fois au lieu d'être associé au tampon. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (paramètre) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP : WebAudio n'utilise que des nombres à virgule flottante 32 bits, PPAPI utilise des entiers 16 bits. |
PPAPI accepte théoriquement plusieurs tailles d'échantillonnage. En pratique, il n'accepte que les échantillons 16 bits. Malheureusement, les développeurs ont demandé des tailles d'échantillon de 16 bits afin de réduire l'utilisation de la mémoire. La prochaine version de la spécification Web Audio sera compatible avec les échantillons 16 bits. Une optimisation pour AudioBuffer peut être mise en œuvre comme pour Firefox en utilisant un tampon 16 bits pour le contenu audio provenant de decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
CreateStereo16Bit |
|
GAP |
GAP : seuls les échantillons de nombres à virgule flottante 32 bits sont acceptés |
La prochaine version de la spécification Web Audio sera compatible avec les échantillons 16 bits. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (à partir de la construction par défaut) |
Par défaut, le taux d'échantillonnage préféré d'un AudioContext correspond au taux d'échantillonnage réel de l'appareil audio matériel. |
RecommendSampleFrameCount |
|
GAP |
GAP : serait géré avec le Client AudioDeviceClient prévu |
Un problème est en cours pour permettre une taille spécifiée par l'utilisateur, mais il est encore en cours de définition. Pour ce faire, utilisez AudioDeviceClient, qui vous indique la taille adaptée au matériel donné. |
PPB_Console
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Journal |
|
utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
L'API Console est considérée comme une solution de remplacement suffisamment complète, sauf si des cas d'utilisation spécifiques sont signalés par les développeurs pour la fonctionnalité fournie par LogWithSource. Les cartes sources DevTools peuvent être utilisées pour déboguer le code JavaScript transcompilé dans sa langue source d'origine. |
PPB_Core
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
getTime |
|
utime |
nouveau Date().getTime() |
|
getTimeTicks |
|
utime |
nouveau Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== undefined |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Vous pouvez créer une synchronisation équivalente. |
PPB_FileIO
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
FS (partiel) |
window.chooseFileSystemEntries() |
Les pièces "Créer" et "Ouvrir" sont utilisées différemment, mais elles ont la même puissance. |
Ouvrir |
|
SF (partielle) |
window.chooseFileSystemEntries() |
|
Requête |
|
SF (partielle) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (partial) : vous pouvez également utiliser Blob.type pour vérifier le type MIME. Le type du système de fichiers, l'heure de création et l'heure du dernier accès ne peuvent pas être déterminés avec l'API Native File System. |
Toucher |
|
SF (partielle) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Lire |
|
FS (partiel) |
Blob.slice().arrayBuffer() |
|
Écriture |
|
SF (partielle) |
FileSystemWriter.write() |
|
SetLength |
|
FS (partiel) |
FileSystemWriter.truncate() |
|
Vider |
|
GAP (partielle) |
GAP (partiel) : les fichiers sont effacés lorsque FileSystemWrite.close() est appelé |
C'est normal, car les fichiers de l'API Native File System sont exposés au système d'exploitation. Par conséquent, une vérification de la navigation sécurisée doit être effectuée avant que les données ne soient présentées à l'OS. |
Fermer |
|
SF (partielle) |
FileSystemWriter.close() |
N'annule pas les opérations en attente, mais vide les données écrites jusqu'à présent sur le disque. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() ou Blob.arrayBuffer() |
Autorise plusieurs lectures de sous-plages en parallèle. |
PPB_FileRef
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SF (partielle) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
SF (partielle) |
FileSystem.type |
|
GetName |
|
SF (partielle) |
File.name |
|
GetPath |
|
SF (partielle) |
GAP (partial) : avec l'API Native File System, le chemin relatif d'un fichier peut être déterminé à partir d'une référence à un répertoire qui contient le fichier à l'aide de FileSystemHandle.resolve(FileSystemHandle) |
Le chemin absolu d'un fichier ne peut pas être déterminé et l'utilisateur doit autoriser l'accès au répertoire contenant le fichier. |
GetParent |
|
FS (partiel) |
BROKEN (partiel) : avec l'API Native File System, le chemin relatif d'un fichier peut être déterminé à partir d'une référence à un répertoire contenant le fichier à l'aide de FileSystemHandle.resolve(FileSystemHandle) |
L'utilisateur doit accorder l'autorisation d'accéder au répertoire contenant le fichier. |
MakeDirectory |
|
SF (partielle) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Toucher |
|
SF (partielle) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
La date et l'heure de modification peuvent être modifiées par écrit. |
Supprimer |
|
FS (partiel) |
FileSystemDirectoryHandle.removeEntry() |
Contrairement à la PPAPI, les répertoires ne doivent pas être vides. |
Renommer |
|
FS (partiel) |
Espace négatif (partiel) : avec l'API Native File System, le fichier peut être écrit avec le nouveau nom à l'aide d'une combinaison de FileSystemFileHandle.getFile() pour le nouveau nom et FileSystemFileHandle.createWriter().write() avec le contenu de l'ancien fichier. Ensuite, FileSystemDirectoryHandle.removeEntry() pour supprimer l'ancien fichier. |
Aucune API directe ne permet d'effectuer cette opération en une seule étape dans l'API Native File System. |
Requête |
|
GAP (partielle) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (partiel) : Blob.type peut également être utilisé pour vérifier le type MIME. Le type du système de fichiers, l'heure de création et l'heure du dernier accès ne peuvent pas être déterminés avec l'API Native File System. |
ReadDirectoryEntries |
|
FS (partiel) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SF (partielle) |
window.requestFileSystem |
L'API JavaScript effectue les deux opérations en une seule étape. |
Ouvrir |
|
GAP |
window.requestFileSystem |
L'API JavaScript effectue les deux opérations en une seule étape. |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Échantillon |
|
SDL |
Manette de jeu*. |
L'objet Gamepad expose un code temporel relatif à navigationStart. Il est mis à jour lorsque les données sont reçues depuis le matériel https://www.w3.org/TR/gamepad/#gamepad-interface. |
PPB_Graphics2D
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
Canvas.getContext('2d') |
|
Décrire |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Faire défiler |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (partiel) : peut être implémenté en dessinant le canevas sur lui-même, avec un décalage, à l'aide de drawImage, puis en remplissant le reste. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Vider |
|
GAP |
Aucun équivalent direct |
GAP (partielle) –
Il y a toujours un vidage implicite à la fin du code de dessin. c'est peu probable
à modifier. Cependant, la combinaison de
OffscreenCanvas
et
<ph type="x-smartling-placeholder"></ph>
ImageBitmapRenderingContext
fournissent des fonctionnalités similaires. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (partial) : l'exposition d'OpenGL ES 3.0 par WebGL 2.0 et Emscripten prend en charge des tampons de trame multi-échantillonnés définis par l'utilisateur, dans lesquels tous les paramètres configurables via PPAPI peuvent être définis. |
Créer |
|
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 |
Aucun équivalent direct |
GAP (partielle) –
Il y a toujours un vidage implicite à la fin du code de dessin. c'est peu probable
à modifier. Cependant, la combinaison de
OffscreenCanvas
et
<ph type="x-smartling-placeholder"></ph>
ImageBitmapRenderingContext
offrent des fonctionnalités similaires. |
PPB_ImageData
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetNativeImageDataFormat |
|
SDL |
ImageData exige une commande RVBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData exige une commande RVBA |
|
Créer |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Décrire |
|
SDL |
ImageData n'a jamais de foulée |
|
Carte |
|
SDL |
ImageData.data |
|
Annuler le mappage |
|
SDL |
ImageData.data |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
RequestInputEvents |
|
SDL |
Aucun équivalent direct |
L'absence de cette fonctionnalité est probablement moins pertinente, car JS/Wasm s'exécute sur le thread principal et peut filtrer les événements plus économiquement sans entraîner de va-et-vient entre les processus. |
RequestFilteringInputEvents |
|
SDL |
Événements mouse* key* wheel* touch* composition* |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Descendants de la classe d'événement |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
dblclick ou "mousedown" Événements |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP : deltaMode contient en quelque sorte ces informations, mais de manière incomplète. |
Une discussion est en cours sur l'implémentation d'une API WheelEvent.deltaMode : https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP : deltaMode contient en quelque sorte ces informations, mais de manière incomplète. |
Il y a une discussion sur l'implémentation d'une API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifier (pour le savoir vous-même) |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - No direct equivalent |
Ces données peuvent être récupérées à partir de CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP - No direct equivalent |
|
GetTargetSegment |
|
GAP |
GAP - Aucun équivalent direct |
|
GetSelection |
|
GAP |
GAP - Aucun équivalent direct |
|
PPB_Instance
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
BindGraphics |
|
SDL |
Canvas.getContext (la fonctionnalité de liaison est automatique). |
|
IsFullFrame |
|
GAP |
GAP : pas d'équivalent aux gestionnaires de types MIME. |
Les applications NaCl peuvent être enregistrées pour gérer un type MIME particulier et être propriétaires de l'ensemble du document. |
DidCreate |
|
N/A |
<Element>[clé] |
L'accès général au DOM vous permet de récupérer des attributs de balises |
DidDestroy |
|
N/A |
N/A |
Non déclenché pour NaCl |
DidChangeView |
|
N/A |
Événement "resize" de l'élément |
|
DidChangeFocus |
|
N/A |
Élément "focus", "focusin", "focusout" Événements |
|
HandleDocumentLoad |
|
N/A |
GAP : impossible de s'inscrire en tant que gestionnaire de type MIME |
Les modules NaCl via des applications et une entrée de fichier manifeste peuvent être configurés pour gérer des types mime particuliers. |
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Configurer |
|
GAP |
getUserMedia() |
Les contraintes de getUserMedia() peuvent fournir les valeurs de configuration à utiliser dans MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP : aucun équivalent |
|
RecycleBuffer |
|
GAP |
GAP - Aucun équivalent |
|
Fermer |
|
GAP |
MediaStreamTrack.stop() |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
Capture de canevas |
Canvas Capture permet d'intégrer des images vidéo par programmation. |
Configurer |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (partielle) : le nombre de configurations disponibles dans l'API Web peut être différent de celui disponible dans l'API protégeant la confidentialité. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP : aucun équivalent de PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream ne peut pas être préchargé et ne sera donc jamais mis en mémoire tampon: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP : aucun équivalent à PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP - Aucun équivalent |
|
RecycleFrame |
|
GAP |
GAP - Aucun équivalent |
|
Fermer |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP : aucun équivalent |
|
PutFrame |
|
GAP |
GAP - Aucun équivalent |
|
PPB_MessageLoop
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
N/A |
En grande partie sans objet, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
GetForMainThread |
|
N/A |
La plupart du temps, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
GetCurrent |
|
N/A |
En grande partie sans objet, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
AttachToCurrentThread |
|
N/A |
En grande partie sans objet, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
Exécuter |
|
N/A |
En grande partie sans objet, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
PostWork |
|
N/A |
La plupart du temps, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
PostQuit |
|
N/A |
La plupart du temps, les nœuds de calcul reçoivent une boucle d'événements implicite. |
|
PPB_Messaging
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
PostMessage |
|
N/A |
Window.postMessage |
|
RegisterMessageHandler |
|
N/A |
Window.addEventListener |
|
UnregisterMessageHandler |
|
N/A |
Window.removeEventListener |
|
PPB_MouseCursor
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
SetCursor |
|
SDL |
Element.style.cursor |
Le même ensemble de curseurs d'actions est accepté.
Les curseurs personnalisés peuvent être créés avec url(..). Les curseurs personnalisés dynamiques peuvent être créés avec des URI de données.
CSS3 permet de spécifier le point d'accès. |
PPB_MouseLock
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Plusieurs méthodes |
|
OpenGLES |
Fonctionnalité proche de celle de WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
SetTextInputType |
|
GAP |
GAP – Peut être rempli par l'API de l'éditeur du mode de saisie |
Certains développeurs aimeraient pouvoir donner des indices de cette manière, ou de préférence intercepter et afficher les événements/sorties IME en ligne dans un canevas. |
UpdateCaretPosition |
|
GAP |
GAP – Peut être rempli par l'API de l'éditeur du mode de saisie |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP – Peut être rempli par l'API de l'éditeur du mode de saisie |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP – Peut être rempli par l'API de l'éditeur du mode de saisie |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
embind |
new XMLHttpRequest() |
|
Ouvrir |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP - Aucun équivalent XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
"progress" de XMLHttpRequest Événement |
|
|
|
GAP |
FetchObserver |
pas encore spécifiée ni implémentée ; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
"progress" de XMLHttpRequest Événement |
|
|
|
GAP |
FetchObserver |
Pas encore spécifié ni implémenté : https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Extraire la réponse*. |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Body.* (La réponse est un corps) |
|
FinishStreamingToFile |
|
embind |
GAP - No direct equivalent |
XMLHttpRequest et Fetch partent du principe qu'un flux est envoyé en mémoire plutôt que directement dans un espace de stockage. |
Fermer |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
API Fetch : AbortSignal et AbortController |
|
PPB_URLRequestInfo
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Requête de récupération |
|
SetProperty |
|
GAP |
GAP : aucun équivalent direct pour XMLHttpRequest |
XMLHttpRequest ne permet pas directement de limiter par requête une redirection après redirection, un flux vers un fichier, ou encore une règle concernant l'URL de provenance ou les identifiants. |
|
|
embind |
Requête.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP : les deux doivent comporter l'intégralité du corps, et non un fragment. |
|
|
embind |
récupérer(.., options:corps) |
|
AppendFileToBody |
|
GAP |
Streaming d'importation fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
N/A |
<form> |
Vous pouvez également lire avec FileReader et importer, mais c'est plus comme AppendDataToBody. |
PPB_URLResponseInfo
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders et autres |
|
|
|
embind |
Extraire la réponse* |
|
GetBodyAsFileRef |
|
embind |
Récupérer la réponse (corps) .blob() |
Suppose que la couche de stockage optimise le transfert. |
PPB_Var
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
N/A |
N/A |
|
VarToResource |
|
N/A |
N/A |
|
PPB_VarArray
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Télécharger |
|
embind |
tableau[i] |
|
Prêt ? |
|
embind |
tableau[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
embind |
nouveau ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Carte |
|
GAP |
GAP - Aucun équivalent direct |
Les modules Asm.js / Wasm ne peuvent pas mapper les régions d'un objet ArrayBuffer autres que leur tas de mémoire linéaire unique.
La mise en correspondance de plusieurs mémoires ou de plusieurs mémoires peut améliorer ce processus. |
Annuler le mappage |
|
GAP |
GAP - No direct equivalent |
|
PPB_VarDictionary
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
embind |
{} |
|
Télécharger |
|
embind |
<Object>[i] |
|
Prêt ? |
|
embind |
<Objet>[i] = x |
|
Supprimer |
|
embind |
supprimer <Object>[i] |
|
HasKey |
|
embind |
x dans <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Il n'existe pas d'équivalent littéral, mais il peut être créé. |
PPB_VideoDecoder
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide de VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Initialiser |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide des paramètres d'initialisation 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 : serait géré avec l'API WebCodecs proposée à l'aide de 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 : serait géré avec l'API WebCodecs proposée à l'aide de 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 : Serait géré avec l'API WebCodecs proposée. La conception actuelle recycle automatiquement les images et fait avancer le processus de décodage. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Vider |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. L'API s'appellera Flush(), mais des discussions sont encore en cours sur la façon dont elle sera séquencée par rapport aux appels de décodage. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Réinitialiser |
|
GAP |
GAP : serait géré avec l'API WebCodecs proposée en détruisant l'instance VideoDecoder et en en créant une autre. Cette méthode ne sera pas aussi efficace qu'une méthode de réinitialisation dédiée, mais la sémantique d'une API Reset() est toujours en cours de discussion. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
GAP : serait géré avec l'API WebCodecs proposée à l'aide de VideoEncoder(). |
|
GetSupportedProfiles |
|
GAP |
GAP (partiel) - navigator.mediaCapabilities.encodingInfo() |
Les profils compatibles doivent être vérifiés un par un. |
Initialiser |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide des paramètres d'initialisation VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP : aucun équivalent |
Il est peu probable que le pool de cadres utilisé en interne par l'API Web Codecs soit exposé. |
GetFrameCodedSize |
|
GAP |
GAP : aucun équivalent |
Il est peu probable que le pool de cadres utilisé en interne par l'API Web Codecs soit exposé. |
GetVideoFrame |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide de ReadableStream.pipeThrough(VideoEncoder). Cela encoderait directement les données dans le flux lisible au lieu de saisir un seul frame à remplir de données avant l'encodage. |
|
Encoder |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée à l'aide de ReadableStream.pipeThrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. La conception actuelle passe automatiquement par le tampon de flux de bits encodé qui transite. |
L'API WebCodecs suppose actuellement que le tampon de flux de bits peut être copié plutôt que mis en commun. Il n'a donc pas besoin d'être recyclé. |
RecycleBitstreamBuffer |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. La conception actuelle recycle automatiquement le tampon pour poursuivre le processus d'encodage. |
Il est peu probable que cela change à l'avenir, car les conséquences sur les performances sont moins importantes. |
RequestEncodingParametersChange |
|
GAP |
GAP : serait géré par la proposition d'API Web Codecs. Certains paramètres peuvent être modifiés instantanément, tandis que d'autres nécessitent la destruction de l'encodeur. |
|
Fermer |
|
GAP |
GAP : serait géré avec l'API WebCodecs proposée à l'aide de VideoEncoder.Close(). |
|
PPB_VideoFrame
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetTimestamp |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
SetTimestamp |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
GetFormat |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
GetSize |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
GetDataBuffer |
|
GAP |
GAP : sera géré avec l'API WebCodecs proposée. |
|
GetDataBufferSize |
|
GAP |
GAP : Serait géré avec l'API WebCodecs proposée. |
|
PPB_View
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Concerne le document et non un seul élément. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Élément>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop / <Element>.scrollLeft |
|
PPB_WebSocket
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
|
GAP |
WebSocket.WebSocket |
|
Connecter |
|
GAP |
WebSocket.WebSocket(url, ...)
Événement WebSocket "open" |
|
Fermer |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
Événement "message" WebSocket
Événement "error" WebSocket
Événement "close" WebSocket |
|
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
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Graphics3DContextLost |
|
SDL |
Canevas "webglcontextlost" Événement |
|
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
DidCreate |
|
N/A |
<Element>[clé] |
L'accès général au DOM vous permet de récupérer des attributs de balises |
DidDestroy |
|
N/A |
N/A |
Non déclenché pour NaCl |
DidChangeView |
|
N/A |
Événement "resize" de l'élément |
|
DidChangeFocus |
|
N/A |
Élément "focus", "focusin", "focusout" Événements |
|
HandleDocumentLoad |
|
N/A |
GAP - No way to register as a mime type handler |
Les modules NaCl via des applications et une entrée de fichier manifeste peuvent être configurés pour gérer des types mime particuliers. |
PPP_MessageHandler
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
HandleMessage |
|
embind |
Événement "message" de MessagePort Événement "message" de la fenêtre |
|
HandleBlockingMessage |
|
N/A |
GAP - Aucun équivalent direct |
Une synchronisation similaire peut être effectuée en dehors du thread principal à l'aide d'Atomics.wait. Ajouté pour permettre l'émulation d'API de plug-ins synchrones. |
PPP_Messaging
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
HandleMessage |
|
embind |
MessagePort "message" Événement
Fenêtre "message" Événement |
|
PPP_MouseLock
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
MouseLockLost |
|
SDL |
Élément "pointerlockchange", "pointerlockerror" Événements |
|
PPAPI (applications)
PPB_HostResolver
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
x |
GAP |
GAP (partielle) – Aucun équivalent direct |
|
Résoudre |
x |
GAP |
GAP (partielle) – Aucun équivalent direct |
|
GetCanonicalName |
x |
GAP |
GAP (partiel) – Aucun équivalent direct |
|
GetNetAddressCount |
x |
GAP |
GAP (partielle) – Aucun équivalent direct |
|
GetNetAddress |
x |
GAP |
GAP (partiel) – Aucun équivalent direct |
|
PPB_NetAddress
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
CreateFromIPv4Address |
x |
GAP |
GAP (partiel) – Aucun équivalent direct |
|
CreateFromIPv6Address |
x |
GAP |
GAP (partiel) – Aucun équivalent direct |
|
GetFamily |
x |
GAP |
GAP (partiel) – Aucun équivalent direct |
|
DescribeAsString |
x |
GAP |
GAP (partiel) – Aucun équivalent direct |
|
DescribeAsIPv4Address |
x |
GAP |
GAP (partiel) – Aucun équivalent direct |
|
DescribeAsIPv6Address |
x |
GAP |
GAP (partielle) – Aucun équivalent direct |
|
PPB_NetworkList
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetCount |
x |
GAP |
GAP - Aucun équivalent direct |
|
GetName |
x |
GAP |
GAP - No direct equivalent |
|
GetType |
x |
GAP |
GAP - Aucun équivalent direct |
|
GetState |
x |
GAP |
GAP - No direct equivalent |
|
GetIpAddress |
x |
GAP |
GAP - Aucun équivalent direct |
|
GetDisplayName |
x |
GAP |
GAP - No direct equivalent |
|
GetMTU |
x |
GAP |
GAP - Aucun équivalent direct |
|
PPB_NetworkMonitor
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
Créer |
x |
GAP |
GAP - Aucun équivalent direct |
|
UpdateNetworkList |
x |
GAP |
GAP - Aucun équivalent direct |
|
PPB_NetworkProxy
Méthode PPAPI |
Suppose des threads |
Emscripten |
API Web |
Limites |
GetProxyForURL |
x |
GAP |
GAP - No direct equivalent |
|
PPB_TCPSocket et PPB_UDPSocket
Il n'existe pas de mappage direct 1:1 pour la migration. Au lieu de cela, nous
avons décrit certaines
des scénarios utilisateur ci-dessous et le chemin de migration recommandé.
Cas d'utilisation |
Recommandations |
Partage d'écran |
getDisplayMedia et WebRTC (démonstration)
|
Chargement à partir d'un
serveur local pour minimiser l'utilisation de la bande passante |
API XHR, Fetch, Streams, Service Worker et Cache |
Chargement à partir d'un
instance locale d'une application Web / Connexion à une instance locale d'une application Web |
WebRTC |
Chat |
WebSocket*
|
Communication audio/vidéo en temps réel |
WebRTC |
Collaboration |
WebSocket*
|
Jeux multijoueurs en temps réel |
WebTransport**, sauf en cas de P2P, auquel cas WebRTC (ou WebTransport sur RTCIceTransport)
|
Streaming interactif en temps réel |
WebTransport**
|
Communication
avec l'ancien serveur |
Serveur proxy ou middleware pour effectuer la conversion de protocole. Commentaires sur bit.ly/network-api-gaps
|
*: Ou WebTransport à l'avenir
**: consultez chromestatus pour connaître leur disponibilité.