دليل نقل بيانات WebAssembly

(P) إعلانات إيقاف تكنولوجيا NaCl نهائيًا

نظرًا إلى زخم دعم WebAssembly عبر المتصفحات، نخطط لتركيز من جهود الرموز البرمجية الأصلية على WebAssembly من الآن فصاعدًا والتخطيط لإزالة الدعم PNaCl في الربع الرابع من عام 2019 (باستثناء تطبيقات Chrome). نعتقد أنّ المنظومة المتكاملة النشط ة حول WebAssembly تجعلها أكثر ملاءمةً لتطبيقات الويب الجديدة والحالية التي تحقّق أداءً مرتفعًا ، وأنّ استخدام PNaCl منخفض بما يكفي لضمان إيقافه نهائيًا.

بدءًا من Chrome 76، تم نقل PNaCl على شبكة الويب المفتوحة خلف مرحلة التجربة والتقييم وهي آلية تتيح لمطوّري البرامج على الويب التسجيل والوصول إلى ميزة غير مفعَّلة تلقائيًا. عادة ما تكون هذه ميزة مقترحة جديدة ولكن في هذه الحالة يتم إيقاف الميزة. يمكن للمطوِّر التسجيل في وحدة تحكم التجربة الأصلية. ويتلقّى المستخدم رمزًا مميّزًا يمكن تضمينه في صفحة ويتيح استخدام الميزة بدون حاجة المستخدم إلى الإبلاغ (لمزيد من التفاصيل، يُرجى الاطّلاع على الدليل المرتبط). من المقرر أن تستمر الفترة التجريبية حتى الإصدار Chrome 78، حتى كانون الأول (ديسمبر) 2019 تقريبًا. لا يهدف هذا التغيير إلى التأثير في NaCl أو PNaCl في تطبيقات Chrome أو إضافاته، ويمكن أيضًا استخدام العلامة "enable-nacl" في chrome://flags لتفعيل PNaCl على الجهاز فقط لأغراض الاختبار (تحافظ هذه العلامة أيضًا على وظيفتها الحالية المتمثّلة في تفعيل NaCl "الأصلي" غير المزوّد بتقنية PNaCl على أي صفحة).

كما أعلنا مؤخرًا عن الإيقاف النهائي للربع الأول من عام 2018 تطبيقات Chrome خارج نظام التشغيل ChromeOS.

نقل بيانات سلسلة الأدوات

بالنسبة إلى معظم حالات استخدام (P)NaCl، ننصحك بالانتقال من حزمة تطوير البرامج (SDK) لـ NaCl إلى Emscripten. من المرجّح أن يكون نقل البيانات عملية سهلة إلى حدٍ ما إذا كان تطبيقك قابلاً للنقل إلى Linux أو يستخدم SDL أو واجهات برمجة تطبيقات POSIX. في حين أن الدعم المباشر لواجهات برمجة تطبيقات NaCl / Pepper غير متوفر، لقد حاولنا إدراج مكافئات Web API. بالنسبة إلى حالات النقل الأكثر صعوبة، يُرجى التواصل معنا على العنوان التالي: native-client-discuss@googlegroups.com

نقل بيانات واجهة برمجة التطبيقات

أوضحنا هنا حالة بدائل نظام الويب الأساسي لكل من واجهات برمجة التطبيقات التي يتعرض لها (P)NaCl. بالإضافة إلى ذلك، يسرد الجدول المكتبة أو الخيار في Emscripten يقدم أقرب بديل.

نتوقع إضافة دعم سلاسل الذاكرة المشتركة إلى WebAssembly في عام 2017، حيث إن سلاسل الرسائل ضرورية لمطابقة الاستخدام الأكثر إثارة للاهتمام لـ (P)NaCl الحالات. عناصر نقل البيانات التي تتوافق مع سلاسل المحادثات القادمة وقد تم وضع علامة عليها أدناه. إذا كان التحكّم في تدفّق تطبيقك يعتمد بشكل كبير على حظر واجهة برمجة التطبيقات، قد تحتاج أيضًا إلى إتاحة سلاسل المهام لنقل التطبيق بسهولة.

على الرغم من أنّنا حاولنا أن نكون دقيقة في هذا الجدول، لا شكّ في أنّه قد تكون هناك أخطاء أو نقص. إذا واجهت أي مشكلة، يُرجى التواصل معنا على العنوان التالي: native-client-discuss@googlegroups.com

PPAPI

PPB_Audio

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء x SDL (جزئي) GAP (جزئية) - مكافئ AudioWorkletNode ROUGHLY اكتمل AudioWorkletSpec، ولكن قد يكون AudioDeviceClient مناسبًا بشكلٍ أفضل لواجهة برمجة التطبيقات هذه. ما زال المنتدى يحدِّد AudioDeviceClient. قد لا يكون الوظيفة المصغّرة هي المكافئ التقريبي لواجهة برمجة التطبيقات هذه.
GetCurrentConfig SDL سياق الصوت:* (يُسترجع الإعدادات التي تم تمريرها)
StartPlayback SDL AudioBufferSourceNode.start
StopPlayback SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetTimestamp SDL AudioBufferSourceNode.start (مَعلمة) يتم اجتياز الاختبار في كل مرة بدلاً من إرفاقه بمخزن مؤقت.
SetTimestamp SDL AudioBufferSourceNode.start (المَعلمة)
GetSampleRate SDL AudioBuffer.sampleRate
GetSampleSize GAP GAP - لا يستخدم WebAudio سوى القيمة العائمة 32 بت، بينما يستخدم PPAPI القيمة الصحيحة 16 بت. من الناحية النظرية، يتيح معيار PPAPI أحجام عيّنات متعددة. من الناحية العملية، تدعم هذه الأداة عينات ذات 16 بت فقط. للأسف، طلب المطورون نماذج أحجام 16 بت لتوفير استخدام الذاكرة. سيتوافق الإصدار التالي من مواصفات Web Audio مع عينات 16 بت. يمكن تنفيذ تحسين لـ AudioBuffer كما هو الحال بالنسبة إلى Firefox، وذلك من خلال استخدام مخزن مؤقت 16 بت للصوت متوفر من decodeAudioData
GetNumberOfChannels SDL AudioBuffer.numberOfChannels
GetDataBuffer SDL AudioBuffer.getChannelData
GetBufferSize SDL AudioBuffer.length

PPB_AudioConfig

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء استيريو16 بت GAP GAP - لا يُسمح سوى بالعينات العائمة 32 بت سيتوافق الإصدار التالي من مواصفات Web Audio مع عينات 16 بت.
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.length
RecommendSampleRate SDL AudioContext.sampleRate (من الصيغة التلقائية) يكون لسياق الصوت معدّل العيّنات المفضّل الذي يتطابق تلقائيًا مع معدّل العيّنة الفعلي للجهاز الصوتي للجهاز.
RecommendSampleFrameCount GAP GAP - ستتم معالجته مع AudioDeviceClient المخطَّط له هناك مشكلة مفتوحة للسماح بحجم محدد للمستخدم، ولكن لا تزال هذه المشكلة محددة. يمكن معالجة هذه المشكلة على الأرجح باستخدام AudioDeviceClient الذي يخبرك بالحجم المناسب للجهاز المحدّد.

PPB_Console

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
السجل الوقت console.log/warn/error/...
LogWithSource GAP GAP تُعدّ Console API بديلاً كاملاً بما يكفي، ما لم تكن هناك حالات استخدام محدّدة يطرحها المطوّرون للوظائف التي يوفّرها LogWithSource. يمكن استخدام خرائط المصدر في "أدوات مطوري البرامج" لتصحيح أخطاء JavaScript الذي تم نقله إلى لغة المصدر الأصلية.

PPB_Core

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
getTime utime new Date().getTime()
getTimeTicks utime new Date().getTime()
IsMainThread GAP window.document !== undefined
CallOnMainThread GAP Worker.postMessage + Atomics.wait يمكن إنشاء عملية مزامنة مماثلة.

PPB_FileIO

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء من النهاية إلى البداية (جزئي) window.chooseFileSystemEntries() يتم استخدام الإنشاء والفتح بشكل مختلف، لكن القطع متساوية القوة.
فتح FS (جزئي) window.chooseFileSystemEntries()
طلب البحث FS (جزئي) Blob.size وFileSystemHandle.getFile() وFileSystemHandle.getDirectory() وFile.lastModified GAP (جزئي) - يمكن أيضًا استخدام Blob.type للتحقق من نوع MIME. لا يمكن تحديد نوع نظام الملفات ووقت الإنشاء ووقت الوصول الأخير باستخدام واجهة برمجة التطبيقات Native File System API.
اللمس FS (جزئي) FileSystemDirectoryHandle.getFile("name", {create: true})
قراءة من النهاية إلى البداية (جزئي) Blob.slice().arrayBuffer()
كتابة FS (جزئي) FileSystemWriter.write()
SetLength من النهاية إلى البداية (جزئي) FileSystemWriter.truncate()
تنظيف GAP (جزئي) GAP (جزئي) - يتم تفريغ الملفات عند استدعاء FileSystemWrite.close() وهذا المقصود من تصميمه لأن ملفات واجهة برمجة التطبيقات لنظام الملفات الأصلي معرَّضة لنظام التشغيل، وبالتالي يجب إجراء فحص "التصفُّح الآمن" قبل عرض البيانات لنظام التشغيل.
إغلاق FS (جزئي) FileSystemWriter.close() لا يؤدي هذا الإجراء إلى إلغاء العمليات المعلّقة، ولكنه يمسح أي بيانات مكتوبة حتى الآن إلى القرص.
ReadToArray GAP Blob.slice().arrayBuffer() أو Blob.arrayBuffer() تسمح بقراءات نطاق فرعي متعددة بالتوازي.

PPB_FileRef

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء FS (جزئي) FileSystemDirectoryHandle.getFile("name", {create: true})
GetFileSystemType FS (جزئي) FileSystem.type
GetName FS (جزئي) File.name
GetPath FS (جزئي) الفجوة (جزئية): باستخدام Native File System API، يمكن تحديد المسار النسبي لملف من خلال الإشارة إلى دليل يحتوي على الملف باستخدام FileSystemHandle.resolve(FileSystemHandle) لا يمكن تحديد المسار المطلق لملف، ويجب أن يمنح المستخدم إذنًا للوصول إلى الدليل الذي يحتوي على الملف.
GetParent FS (جزئي) الفجوة (جزئية): باستخدام Native File System API، يمكن تحديد المسار النسبي لملف من خلال الإشارة إلى دليل يحتوي على الملف باستخدام FileSystemHandle.resolve(FileSystemHandle) على المستخدم منح الإذن بالوصول إلى الدليل الذي يحتوي على الملف.
MakeDirectory FS (جزئي) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
اللمس FS (جزئي) FileSystemDirectoryHandle.getFile("name", {create: true}) يمكن تغيير وقت التعديل من خلال الكتابة.
حذف FS (جزئي) FileSystemDirectoryHandle.removeEntry() على عكس PPAPI، لا يجب أن تكون الأدلة فارغة.
إعادة التسمية من النهاية إلى البداية (جزئي) GAP (جزئي) - باستخدام واجهة برمجة التطبيقات لنظام الملفات الأصلي، يمكن كتابة الملف بالاسم الجديد باستخدام تركيبة من FileSystemFileHandle.getFile() للاسم الجديد وFileSystemFileHandle.createWriter().write() بمحتويات الملف القديم. ثم FileSystemDirectoryHandle.removeEntry() لحذف الملف القديم. لا تتوفّر واجهة برمجة تطبيقات مباشرة لتنفيذ ذلك في خطوة واحدة في واجهة برمجة التطبيقات لنظام الملفات الأصلي.
طلب البحث GAP (جزئي) Blob.size وFileSystemHandle.getFile() وFileSystemHandle.getDirectory() وFile.lastModified GAP (جزئي) - يمكن أيضًا استخدام Blob.type للتحقق من نوع MIME. لا يمكن تحديد نوع نظام الملفات ووقت إنشائه ووقت آخر وصول إليه باستخدام Native File System API.
ReadDirectoryEntries من النهاية إلى البداية (جزئي) FileSystemDirectoryHandle.getEntries()

PPB_FileSystem

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء FS (جزئي) window.requestFileSystem تُجري JS API كلا العمليتين في خطوة واحدة.
فتح GAP window.requestFileSystem تتيح واجهة برمجة التطبيقات JS API تنفيذ كلا الإجراءين في خطوة واحدة
GetType GAP FileSystem.type

PPB_Fullscreen

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
IsFullScreen html5.h Document.fullscreenEnabled
SetFullscreen html5.h Document.requestFullscreen
GetScreenSize html5.h Document.exitFullscreen

PPB_Gamepad

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
عيّنة SDL جهاز تحكّم في الألعاب* يعرض كائن "لوحة الألعاب" طابعًا زمنيًا مرتبطًا بـ NavigationStart. ويتم تعديلها عند تلقّي البيانات من الجهاز https://www.w3.org/TR/gamepad/#gamepad-interface

PPB_Graphics2D

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL Canvas.getContext('2d')
الوصف SDL Canvas.clientLabel + Canvas.clientHeight
PaintImageData SDL CanvasRenderingContext2D.putImageData
صفحة مواضع التمرير GAP CanvasRenderingContext2D.scrollIntoView وCanvasRenderingContext2D.drawImage GAP (جزئي) - يمكن تنفيذها عن طريق رسم اللوحة على نفسها، مع إزاحة، باستخدام drawImage، ثم ملء الباقي.
ReplaceContents SDL CanvasRenderingContext2D.drawImage
وجه محمّر الخدود GAP لا يتوفّر مكافئ مباشر GAP (جزئي) - يوجد دائمًا تدفق ضمني في نهاية رمز الرسم؛ هذا مُستبعَد. للتغيير. ومع ذلك، يقدّم كلّ من OffscreenCanvas و ImageBitmapRenderingContext وظائف مشابهة.
SetScale SDL CanvasRenderingContext2D.scale
GetScale SDL CanvasRenderingContext2D.currentTransform
SetLayerTransform SDL CanvasRenderingContext2D.setTransform CanvasRenderingContext2D.scale CanvasRenderingContext2D.translate

PPB_Graphics3D

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetAttribMaxValue OpenGL ES 3.0 WebGL 2.0 GAP (جزئي) - يتيح كل من WebGL 2.0 وEmscripten عرض OpenGL ES 3.0 مع المخازن المؤقتة للإطارات متعددة العينات التي يحددها المستخدم، والتي يمكن من خلالها تعيين جميع المعلمات القابلة للتهيئة عبر PPAPI.
إنشاء SDL Canvas.getContext
GetAttribs SDL WebGLRenderingContext.getContextAttributes
SetAttribs SDL Canvas.getContext(.., OPTIONS)
GetError SDL WebGLRenderingContext.getError
ResizeBuffers SDL Canvas.width = w; Canvas.height = h;
SwapBuffers GAP لا يتوفّر مكافئ مباشر GAP (جزئي) - يوجد دائمًا تدفق ضمني في نهاية رمز الرسم؛ هذا مُستبعَد. للتغيير. ومع ذلك، فإن الجمع بين OffscreenCanvas و ImageBitmapRenderingContext توفر وظائف مماثلة.

PPB_ImageData

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetNativeImageDataFormat SDL ImageData تشترط وجود طلب RGBA
IsImageDataFormatSupported SDL تفرض ImageData ترتيب RGBA
إنشاء SDL CanvasRenderingContext2d.createImageData
الوصف SDL لم يسير ImageData أبدًا
خريطة SDL ImageData.data
إلغاء الخريطة SDL ImageData.data

PPB_InputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
RequestInputEvents SDL لا يتوفّر مكافئ مباشر يُرجى العِلم أنّ عدم توفُّر هذه الميزة سيكون أقل صلة على الأرجح لأنّ لغة JavaScript أو Wasm تعمل على سلسلة التعليمات الرئيسية، ويمكنها فلترة الأحداث بتكلفة أقل بدون الحاجة إلى إجراء جولات ذهاب وعودة.
RequestFilteringInputEvents SDL الماوس* المفتاح* عجلة* اللمس* التركيب* الأحداث
SDL Element.addEventListener
ClearInputEventRequest SDL Element.removeEventListener
GetType SDL العناصر المشتقة لفئة الحدث
GetTimeStamp SDL Event.timeStamp
GetModifiers SDL *Event.altKey/shiftKey/metaKey/ctrlKey

PPB_MouseInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL MouseEvent
GetButton SDL MouseEvent.button
GetPosition SDL MouseEvent.client*/page*/offset*
GetClickCount SDL أمر dblclick مقابل "الماوس" الفعاليات
GetMovement SDL MouseEvent.movement*

PPB_WheelInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL WheelEvent
GetDelta SDL WheelEvent.delta*
GetTicks GAP يحتوي نوع من GAP - deltaMode على هذه المعلومات، ولكن بشكل غير كامل. هناك مناقشة حول تنفيذ واجهة برمجة تطبيقات WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017
GetScrollByPage GAP يحتوي نوع من GAP - deltaMode على هذه المعلومات، ولكن بشكل غير كامل. هناك مناقشة حول تنفيذ واجهة برمجة تطبيقات WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017

PPB_KeyboardInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL KeyboardEvent
GetKeyCode SDL KeyboardEvent.keyCode
GetCharacterText SDL KeyboardEvent.key
GetCode SDL KeyboardEvent.code

PPB_TouchInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL TouchEvent
AddTouchPoint SDL TouchEvent.touches.push
GetTouchCount SDL TouchEvent.touches.length
GetTouchByIndex SDL TouchEvent.touches[i]
GetTouchById SDL Touch.indentifer (لاكتشاف ذلك بنفسك)

PPB_IMEInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP CompositionEvent
GetText GAP CompositionEvent.data
GetSegmentNumber GAP GAP - لا يتوفّر مكافئ مباشر ويمكن استرداد هذه البيانات من GenreEvent.data.
GetSegmentOffset GAP GAP - لا يتوفّر مكافئ مباشر
GetTargetSegment GAP GAP - لا يتوفّر مكافئ مباشر
GetSelection GAP GAP - لا يتوفّر مكافئ مباشر

PPB_Instance

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
BindGraphics SDL Canvas.getContext (غير مهم لأنّ الربط تلقائي)
IsFullFrame GAP GAP - لا تتوفّر معالجات بديلة لأنواع MIME. يمكن تسجيل تطبيقات NaCl لمعالجة نوع MIME معيّن وامتلاك المستند بأكمله.
DidCreate لا ينطبق <Element>[key] يتيح لك الوصول العام إلى DOM البحث عن سمات العلامات.
DidDestroy لا ينطبق لا ينطبق غير مُشغَّلة لـ NaCl
DidChangeView لا ينطبق حدث عنصر "resize"
DidChangeFocus لا ينطبق أحداث العنصر "focus" و"focusin" و"focusout"
HandleDocumentLoad لا ينطبق GAP - لا تتوفّر طريقة للتسجيل كمعالِج لنوع mime يمكن إعداد وحدات NaCl من خلال التطبيقات + إدخال بيان لمعالجة أنواع mime معيّنة.

PPB_MediaStreamAudioTrack

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إعداد GAP getUserMedia() يمكن أن تقدّم القيود من getUserMedia() قيم الإعدادات لاستخدامها في MediaStreamTrack.
GetAttrib GAP MediaStreamTrack.getSettings()
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetBuffer GAP GAP - بلا مكافئ
RecycleBuffer GAP GAP - لا يتوفّر مكافئ
إغلاق GAP MediaStreamTrack.stop()

PPB_MediaStreamVideoTrack

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP ميزة "التقاط الشاشة" توفّر ميزة "التقاط اللوحة" إمكانية عرض لقطات فيديو آليًا.
إعداد GAP applyConstraints(), getUserMedia() GAP (جزئي) - قد يختلف مدى التهيئات المتاحة في Web API عن PPAPI.
GetAttrib GAP MediaStreamSettings.width
GAP MediaStreamSettings.height
GAP GAP - لا يتوفّر مكافئ لـ PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES لا يمكن تحميل MediaStream مسبقًا، لذا لن يتم تخزينها مؤقتًا: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements
GAP GAP - لا توجد مكافئة لـ PP_MEDIASTREAMVIDEOTrack_ATTRIB_FORMAT
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetFrame GAP GAP - بلا مكافئ
RecycleFrame GAP GAP - لا يتوفّر مكافئ
إغلاق GAP MediaStreamTrack.stop()
GetEmptyFrame GAP GAP - بلا مكافئ
PutFrame GAP GAP - لا يتوفّر مكافئ

PPB_MessageLoop

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء لا ينطبق في معظم الأحيان، تحصل الوحدات العاملة على حلقة أحداث ضمنية.
GetForMainThread لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.
GetCurrent لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.
AttachToCurrentThread لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.
تشغيل لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.
PostWork لا ينطبق في معظم الأحيان، تحصل الوحدات العاملة على حلقة أحداث ضمنية.
PostQuit لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.

PPB_Messaging

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
PostMessage لا ينطبق Window.postMessage
RegisterMessageHandler لا ينطبق Window.addEventListener
UnregisterMessageHandler لا ينطبق Window.removeEventListener

PPB_MouseCursor

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
SetCursor SDL Element.style.cursor يمكن استخدام المجموعة نفسها من مؤشرات الأسهم. يمكن إنشاء مؤشرات مخصّصة باستخدام url(..). يمكن إنشاء مؤشرات مخصّصة ديناميكية باستخدام معرّفات URI للبيانات. تتيح CSS3 تحديد نقطة الاتصال.

PPB_MouseLock

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
LockMouse SDL Element.requestPointerLock
UnlockMouse SDL Element.exitPointerLock

PPB_OpenGLES2

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
عدة طرق OpenGLES قريبًا من وظائف WebGL 1.0.
x OffscreenCanvas

PPB_TextInputController

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
SetTextInputType GAP GAP - يمكن ملء هذه الواجهة بواسطة واجهة برمجة تطبيقات "محرِّر طريقة الإدخال" يريد بعض المطوّرين أن يتمكّنوا من التلميح بهذه الطريقة، أو يفضّلون أن يتمكّنوا من اعتراض أحداث / إخراج IME وعرضها مضمّنة داخل لوحة.
UpdateCaretPosition GAP الفجوة: يمكن أن تملأها واجهة برمجة التطبيقات Input Method Editor API https://www.w3.org/TR/ime-api/
CancelCompositionText GAP الفجوة: يمكن أن تملأها واجهة برمجة التطبيقات Input Method Editor API https://www.w3.org/TR/ime-api/
UpdateSurroundingText GAP الفجوة: يمكن أن تملأها واجهة برمجة التطبيقات Input Method Editor API https://www.w3.org/TR/ime-api/

PPB_URLLoader

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء embind new XMLHttpRequest();
فتح embind XMLHttpRequest.open
FollowRedirect embind Request.redirect
GAP GAP - لا يوجد مكافئ XMLHTTPRequest
GetUploadProgress embind "التقدم" في XMLHttpRequest فعالية
GAP FetchObserver لم يتم تحديد مواصفاته أو تنفيذه بعد: https://github.com/whatwg/fetch/issues/607
GetDownloadProgress embind "التقدم" في XMLHttpRequest فعالية
GAP FetchObserver لم يتم تحديدها أو تنفيذها بعد. https://github.com/whatwg/fetch/issues/607
GetResponseInfo embind XMLHttpRequest.getAllResponseHeaders
embind جلب الردّ*
ReadResponseBody embind XMLHttpRequest.response
embind النص الأساسي* (Response is a Body)
FinishStreamingToFile embind GAP - بلا مكافئ مباشر يفترضان كلّ من XMLHttpRequest وFetch بث البيانات إلى الذاكرة بدلاً من بثها مباشرةً إلى مساحة تخزين.
إغلاق embind XMLHttpRequest.abort
GAP واجهة برمجة تطبيقات الجلب: AbortSignal وAbortController

PPB_URLRequestInfo

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء embind XMLHttpRequest
embind طلب الجلب
SetProperty GAP GAP - لا يوجد مكافئ مباشر لطلب XMLHttpRequest لا يوفّر XMLHttpRequest طرقًا مباشرة لتقييد عمليات إعادة التوجيه أو الوصول المباشر إلى ملف أو ضبط سياسة المُحيل أو بيانات الاعتماد لكل طلب.
embind الطلب.*
AppendDataToBody embind XMLHttpRequest.send GAP - يجب أن يكون لكليهما النص الكامل، بدلاً من مقطع.
embind fetch(.., options:body)
AppendFileToBody GAP جلب (جلب) تحميل البث https://www.chromestatus.com/features/5274139738767360
لا ينطبق <form> يمكنك أيضًا القراءة باستخدام FileReader والتحميل، ولكن أشبه ذلك بـ AppendDataToBody

PPB_URLResponseInfo

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetProperty embind XMLHttpRequest.getAllResponseHeaders والمزيد
embind جلب الرد.*
GetBodyAsFileRef embind استجابة الجلب (النص الأساسي) .blob() يفترض أنّ طبقة التخزين تحسِّن عملية النقل.

PPB_Var

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
VarFromUtf8 embind TextDecoder.decode
VarToUtf8 embind TextEncoder.encode
VarFromResource لا ينطبق لا ينطبق
VarToResource لا ينطبق لا ينطبق

PPB_VarArray

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
جلب embind الصفيف[i]
تأهّب embind الصفيف[i] = س
GetLength embind Array.length
SetLength embind طول المصفوفة = n

PPB_VarArrayBuffer

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء embind جديد ArrayBuffer(n)
ByteLength embind ArrayBuffer.byteLength
خريطة GAP GAP - بلا مكافئ مباشر يتعذّر على وحدات Asm.js / Wasm تعيين مناطق في ArrayBuffer غير كومة الذاكرة الخطية الفردية الخاصة بها. وقد يؤدي توفّر ميزة "الذكريات المتعددة" أو ميزة "تعيين الذكريات" في المستقبل إلى تحسين هذه الميزة.
إلغاء الربط GAP GAP - لا يتوفّر مكافئ مباشر

PPB_VarDictionary

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء embind {}
جلب embind &lt;Object&gt;[i]
تأهّب embind <Object>[i] = x
حذف embind حذف <Object>[i]
HasKey embind x في <Object>
GetKeys embind for (k in <Object>) {} لا يتوفّر مكافئ حرفي، ولكن يمكن إنشاؤه.

PPB_VideoDecoder

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API باستخدام VideoDecoder()‎ https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
إعداد GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة باستخدام مَعلمات إعداد VideoDecoder()‎ (VideoDecoderInitParameters) https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Decode GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API باستخدام 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 - ستتم معالجته مع واجهة برمجة التطبيقات WebCodecs API باستخدام ReadableStream.piThrough(VideoDecoder).piTo(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 الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API. وسيعيد التصميم الحالي تدوير الصور تلقائيًا ويستمر في عملية فك الترميز. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
وجه محمّر الخدود GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة. سيُطلق على واجهة برمجة التطبيقات اسم Flush()، ولكن لا تزال هناك مناقشة حول كيفية تسلسلها في ما يتعلّق بفك ترميز الطلبات. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
إعادة الضبط GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة من خلال إتلاف مثيل VideoDecoder وإنشاء مثيل جديد. لن تكون هذه الطريقة فعّالة بقدر طريقة إعادة الضبط المخصّصة، ولكن لا تزال تتم مناقشة الدلالات المتعلّقة لواجهة برمجة التطبيقات Reset()‎. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming

PPB_VideoEncoder

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API باستخدام VideoEncoder()‎
GetSupportedProfiles GAP GAP (جزئي) - navigator.mediaCapabilities.encodingInfo() يجب التحقّق من الملفات الشخصية المتوافقة واحدة تلو الأخرى.
إعداد GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة باستخدام مَعلمات إعداد VideoEncoder()‎
GetFramesRequired GAP GAP - بلا مكافئ من غير المرجّح أن يتم عرض حوض اللقطات المستخدَم داخليًا من قِبل Web Codecs API.
GetFrameCodedSize GAP GAP - بلا مكافئ من غير المرجّح أن يتم الكشف عن مجموعة اللقطات التي تستخدمها واجهة برمجة التطبيقات Web Codecs API داخليًا.
GetVideoFrame GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة من خلال استخدام ReadableStream.pipeThrough(VideoEncoder). سيؤدي ذلك إلى ترميز البيانات مباشرةً في البث القابل للقراءة بدلاً من الحصول على إطار واحد لملئه بالبيانات قبل الترميز.
ترميز GAP GAP - ستتم معالجته مع واجهة برمجة التطبيقات WebCodecs API باستخدام ReadableStream.piThrough(VideoEncoder)
GetBitstreamBuffer GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة. سيمرّ التصميم الحالي تلقائيًا عبر وحدة تخزين بث البتات المشفَّرة التي يتم نقلها. تفترض واجهة برمجة التطبيقات WebCodecs حاليًا أنّه يمكن نسخ المخزن المؤقت للبث المباشر البتلي بدلاً من تجميعه، لذلك لن يكون هناك حاجة لإعادة تدويره.
RecycleBitstreamBuffer GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة. سيعيد التصميم الحالي استخدام المساحة المتوفّرة في المخزن المؤقت تلقائيًا لمواصلة عملية الترميز. من غير المرجّح أن يتغيّر ذلك في المستقبل، لأنّ آثار الأداء التالية ستكون أقلّ.
RequestEncodingParametersChange GAP GAP: ستتم معالجة هذه السياسة من خلال واجهة برمجة التطبيقات Web Codecs API المقترَحة. يمكن تغيير بعض المَعلمات أثناء التشغيل، بينما تتطلّب المَعلمات الأخرى إيقاف برنامج الترميز.
إغلاق GAP GAP - ستتم معالجته مع واجهة برمجة تطبيقات WebCodecs المقترحة باستخدام VideoEncoder.Close()

PPB_VideoFrame

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetTimestamp GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API.
SetTimestamp GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة.
GetFormat GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API.
GetSize GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API.
GetDataBuffer GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة.
GetDataBufferSize GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API.

PPB_View

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetRect embind Element.getBoundingClientRect
IsFullscreen embind Document.fullScreenEnabled أن يكون مرتبطًا بالمستند بدلاً من عنصر واحد فقط
IsVisible embind IntersectionObserver
IsPageVisible embind document.visibilityState
GetClipRect embind IntersectionObserver
GetDeviceScale embind window.devicePixelRatio
GetCSSScale embind <Element>.getBoundingClientRect().width / <Element>.offsetWidth
GetScrollOffset embind <Element>.scrollTop / <Element>.scrollLeft

PPB_WebSocket

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP WebSocket.WebSocket
ربط GAP WebSocket.WebSocket(url, ...) WebSocket "مفتوح" فعالية
إغلاق GAP WebSocket.close
ReceiveMessage GAP حدث "الرسالة" في WebSocket حدث "الخطأ" في WebSocket حدث "الإغلاق" في 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

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
Graphics3DContextLost SDL Canvas "webglcontextlost" فعالية

PPP_InputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
HandleInputEvent SDL Element.addEventListener

PPP_Instance

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
DidCreate لا ينطبق <Element>[key] يتيح لك الوصول العام إلى DOM البحث عن سمات العلامات.
DidDestroy لا ينطبق لا ينطبق غير مُشغَّلة لـ NaCl
DidChangeView لا ينطبق حدث عنصر "resize"
DidChangeFocus لا ينطبق أحداث العنصر "focus" و"focusin" و"focusout"
HandleDocumentLoad لا ينطبق GAP - لا توجد طريقة للتسجيل كمعالج نوع mime يمكن إعداد وحدات NaCl عبر التطبيقات + أحد إدخالات البيان للتعامل مع أنواع MIME معيّنة.

PPP_MessageHandler

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
HandleMessage embind "رسالة" في MessagePort فعالية نافذة "رسالة" فعالية
HandleBlockingMessage لا ينطبق GAP - لا يتوفّر مكافئ مباشر يمكن إجراء مزامنة مماثلة خارج سلسلة التعليمات الرئيسية باستخدام Atomics.wait. وقد تمت إضافة ذلك لدعم محاكاة واجهات برمجة تطبيقات المكونات الإضافية المتزامنة.

PPP_Messaging

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
HandleMessage embind "رسالة" في MessagePort فعالية نافذة "رسالة" فعالية

PPP_MouseLock

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
MouseLockLost SDL حدثا العنصرَين pointerlockchange وpointerlockerror

IRT

PPB_Audio

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء x SDL (جزئي) GAP (جزئية) - مكافئ AudioWorkletNode ROUGHLY اكتمل AudioWorkletSpec، ولكن قد يكون AudioDeviceClient مناسبًا بشكلٍ أفضل لواجهة برمجة التطبيقات هذه. ما زال المنتدى يحدِّد AudioDeviceClient. قد لا يكون الوظيفة المصغّرة هي المكافئ التقريبي لواجهة برمجة التطبيقات هذه.
GetCurrentConfig SDL سياق الصوت:* (يُسترجع الإعدادات التي تم تمريرها)
StartPlayback SDL AudioBufferSourceNode.start
StopPlayback SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetTimestamp SDL AudioBufferSourceNode.start (مَعلمة) يتم اجتياز الاختبار في كل مرة بدلاً من إرفاقه بمخزن مؤقت.
SetTimestamp SDL AudioBufferSourceNode.start (المَعلمة)
GetSampleRate SDL AudioBuffer.sampleRate
GetSampleSize GAP GAP - لا يستخدم WebAudio سوى القيمة العائمة 32 بت، بينما يستخدم PPAPI القيمة الصحيحة 16 بت. من الناحية النظرية، يتيح معيار PPAPI أحجام عيّنات متعددة. من الناحية العملية، تدعم هذه الأداة عينات ذات 16 بت فقط. للأسف، طلب المطورون نماذج أحجام 16 بت لتوفير استخدام الذاكرة. سيتوافق الإصدار التالي من مواصفات Web Audio مع عينات 16 بت. يمكن تنفيذ تحسين لـ AudioBuffer كما هو الحال بالنسبة إلى Firefox، وذلك من خلال استخدام مخزن مؤقت 16 بت للصوت متوفر من decodeAudioData
GetNumberOfChannels SDL AudioBuffer.numberOfChannels
GetDataBuffer SDL AudioBuffer.getChannelData
GetBufferSize SDL AudioBuffer.length

PPB_AudioConfig

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء استيريو16 بت GAP GAP - لا يُسمح سوى بالعينات العائمة 32 بت سيتوافق الإصدار التالي من مواصفات Web Audio مع عينات 16 بت.
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.length
RecommendSampleRate SDL AudioContext.sampleRate (من الصيغة التلقائية) يكون لسياق الصوت معدّل العيّنات المفضّل الذي يتطابق تلقائيًا مع معدّل العيّنة الفعلي للجهاز الصوتي للجهاز.
RecommendSampleFrameCount GAP GAP - ستتم معالجته مع AudioDeviceClient المخطَّط له هناك مشكلة مفتوحة للسماح بحجم محدد للمستخدم، ولكن لا تزال هذه المشكلة محددة. يمكن معالجة هذه المشكلة على الأرجح باستخدام AudioDeviceClient الذي يخبرك بالحجم المناسب للجهاز المحدّد.

PPB_Console

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
السجل الوقت console.log/warn/error/...
LogWithSource GAP GAP تُعدّ Console API بديلاً كاملاً بما يكفي، ما لم تكن هناك حالات استخدام محدّدة يطرحها المطوّرون للوظائف التي يوفّرها LogWithSource. يمكن استخدام خرائط المصدر في "أدوات مطوري البرامج" لتصحيح أخطاء JavaScript الذي تم نقله إلى لغة المصدر الأصلية.

PPB_Core

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
getTime utime new Date().getTime()
getTimeTicks utime new Date().getTime()
IsMainThread GAP window.document !== undefined
CallOnMainThread GAP Worker.postMessage + Atomics.wait يمكن إنشاء عملية مزامنة مماثلة.

PPB_FileIO

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء من النهاية إلى البداية (جزئي) window.chooseFileSystemEntries() يتم استخدام الإنشاء والفتح بشكل مختلف، لكن القطع متساوية القوة.
فتح FS (جزئي) window.chooseFileSystemEntries()
طلب البحث FS (جزئي) Blob.size وFileSystemHandle.getFile() وFileSystemHandle.getDirectory() وFile.lastModified GAP (جزئي) - يمكن أيضًا استخدام Blob.type للتحقق من نوع MIME. لا يمكن تحديد نوع نظام الملفات ووقت الإنشاء ووقت الوصول الأخير باستخدام واجهة برمجة التطبيقات Native File System API.
اللمس FS (جزئي) FileSystemDirectoryHandle.getFile(&quot;name&quot;, {create: true})
قراءة من النهاية إلى البداية (جزئي) Blob.slice().arrayBuffer()
كتابة FS (جزئي) FileSystemWriter.write()
SetLength من النهاية إلى البداية (جزئي) FileSystemWriter.truncate()
تنظيف GAP (جزئي) GAP (جزئي) - يتم تفريغ الملفات عند استدعاء FileSystemWrite.close() وهذا المقصود من تصميمه لأن ملفات واجهة برمجة التطبيقات لنظام الملفات الأصلي معرَّضة لنظام التشغيل، وبالتالي يجب إجراء فحص "التصفُّح الآمن" قبل عرض البيانات لنظام التشغيل.
إغلاق FS (جزئي) FileSystemWriter.close() لا يؤدي هذا الإجراء إلى إلغاء العمليات المعلّقة، ولكنه يمسح أي بيانات مكتوبة حتى الآن إلى القرص.
ReadToArray GAP Blob.slice().arrayBuffer() أو Blob.arrayBuffer() تسمح بقراءات نطاق فرعي متعددة بالتوازي.

PPB_FileRef

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء FS (جزئي) FileSystemDirectoryHandle.getFile("name", {create: true})
GetFileSystemType FS (جزئي) FileSystem.type
GetName FS (جزئي) File.name
GetPath FS (جزئي) الفجوة (جزئية): باستخدام Native File System API، يمكن تحديد المسار النسبي لملف من خلال الإشارة إلى دليل يحتوي على الملف باستخدام FileSystemHandle.resolve(FileSystemHandle) لا يمكن تحديد المسار المطلق لملف، ويجب أن يمنح المستخدم إذنًا للوصول إلى الدليل الذي يحتوي على الملف.
GetParent FS (جزئي) الفجوة (جزئية): باستخدام Native File System API، يمكن تحديد المسار النسبي لملف من خلال الإشارة إلى دليل يحتوي على الملف باستخدام FileSystemHandle.resolve(FileSystemHandle) على المستخدم منح الإذن بالوصول إلى الدليل الذي يحتوي على الملف.
MakeDirectory FS (جزئي) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
اللمس FS (جزئي) FileSystemDirectoryHandle.getFile(&quot;name&quot;, {create: true}) يمكن تغيير وقت التعديل من خلال الكتابة.
حذف FS (جزئي) FileSystemDirectoryHandle.removeEntry() على عكس PPAPI، لا يجب أن تكون الأدلة فارغة.
إعادة التسمية من النهاية إلى البداية (جزئي) GAP (جزئي) - باستخدام واجهة برمجة التطبيقات لنظام الملفات الأصلي، يمكن كتابة الملف بالاسم الجديد باستخدام تركيبة من FileSystemFileHandle.getFile() للاسم الجديد وFileSystemFileHandle.createWriter().write() بمحتويات الملف القديم. ثم FileSystemDirectoryHandle.removeEntry() لحذف الملف القديم. لا تتوفّر واجهة برمجة تطبيقات مباشرة لتنفيذ ذلك في خطوة واحدة في واجهة برمجة التطبيقات لنظام الملفات الأصلي.
طلب البحث GAP (جزئي) Blob.size وFileSystemHandle.getFile() وFileSystemHandle.getDirectory() وFile.lastModified GAP (جزئي) - يمكن أيضًا استخدام Blob.type للتحقق من نوع MIME. لا يمكن تحديد نوع نظام الملفات ووقت إنشائه ووقت آخر وصول إليه باستخدام Native File System API.
ReadDirectoryEntries من النهاية إلى البداية (جزئي) FileSystemDirectoryHandle.getEntries()

PPB_FileSystem

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء FS (جزئي) window.requestFileSystem تُجري JS API كلا العمليتين في خطوة واحدة.
فتح GAP window.requestFileSystem تتيح واجهة برمجة التطبيقات JS API تنفيذ كلا الإجراءين في خطوة واحدة
GetType GAP FileSystem.type

PPB_Fullscreen

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
IsFullScreen html5.h Document.fullscreenEnabled
SetFullscreen html5.h Document.requestFullscreen
GetScreenSize html5.h Document.exitFullscreen

PPB_Gamepad

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
عيّنة SDL جهاز تحكّم في الألعاب* يعرض كائن "لوحة الألعاب" طابعًا زمنيًا مرتبطًا بـ NavigationStart. ويتم تعديلها عند تلقّي البيانات من الجهاز https://www.w3.org/TR/gamepad/#gamepad-interface

PPB_Graphics2D

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL Canvas.getContext('2d')
الوصف SDL Canvas.clientLabel + Canvas.clientHeight
PaintImageData SDL CanvasRenderingContext2D.putImageData
صفحة مواضع التمرير GAP CanvasRenderingContext2D.scrollIntoView وCanvasRenderingContext2D.drawImage GAP (جزئي) - يمكن تنفيذها عن طريق رسم اللوحة على نفسها، مع إزاحة، باستخدام drawImage، ثم ملء الباقي.
ReplaceContents SDL CanvasRenderingContext2D.drawImage
وجه محمّر الخدود GAP لا يتوفّر مكافئ مباشر GAP (جزئي) - هناك دائمًا عملية تنظيف ضمنية في نهاية رمز الرسم، ومن غير المرجّح أن يتم تغيير ذلك. ومع ذلك، يقدّم كلّ من OffscreenCanvas و ImageBitmapRenderingContext وظائف مشابهة.
SetScale SDL CanvasRenderingContext2D.scale
GetScale SDL CanvasRenderingContext2D.currentTransform
SetLayerTransform SDL CanvasRenderingContext2D.setTransform CanvasRenderingContext2D.scale CanvasRenderingContext2D.translate

PPB_Graphics3D

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetAttribMaxValue OpenGL ES 3.0 WebGL 2.0 GAP (جزئي) - يتيح كل من WebGL 2.0 وEmscripten عرض OpenGL ES 3.0 مع المخازن المؤقتة للإطارات متعددة العينات التي يحددها المستخدم، والتي يمكن من خلالها تعيين جميع المعلمات القابلة للتهيئة عبر PPAPI.
إنشاء SDL Canvas.getContext
GetAttribs SDL WebGLRenderingContext.getContextAttributes
SetAttribs SDL Canvas.getContext(.., OPTIONS)
GetError SDL WebGLRenderingContext.getError
ResizeBuffers SDL Canvas.width = w; Canvas.height = h;
SwapBuffers GAP لا يتوفّر مكافئ مباشر GAP (جزئي) - يوجد دائمًا تدفق ضمني في نهاية رمز الرسم؛ هذا مُستبعَد. للتغيير. ومع ذلك، فإن الجمع بين OffscreenCanvas و ImageBitmapRenderingContext توفر وظائف مماثلة.

PPB_ImageData

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetNativeImageDataFormat SDL ImageData تشترط وجود طلب RGBA
IsImageDataFormatSupported SDL تفرض ImageData ترتيب RGBA
إنشاء SDL CanvasRenderingContext2d.createImageData
الوصف SDL لم يسير ImageData أبدًا
خريطة SDL ImageData.data
إلغاء الخريطة SDL ImageData.data

PPB_InputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
RequestInputEvents SDL لا يتوفّر مكافئ مباشر يُرجى العِلم أنّ عدم توفُّر هذه الميزة سيكون أقل صلة على الأرجح لأنّ لغة JavaScript أو Wasm تعمل على سلسلة التعليمات الرئيسية، ويمكنها فلترة الأحداث بتكلفة أقل بدون الحاجة إلى إجراء جولات ذهاب وعودة.
RequestFilteringInputEvents SDL الماوس* المفتاح* عجلة* اللمس* التركيب* الأحداث
SDL Element.addEventListener
ClearInputEventRequest SDL Element.removeEventListener
GetType SDL العناصر المشتقة لفئة الحدث
GetTimeStamp SDL Event.timeStamp
GetModifiers SDL *Event.altKey/shiftKey/metaKey/ctrlKey

PPB_MouseInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL MouseEvent
GetButton SDL MouseEvent.button
GetPosition SDL MouseEvent.client*/page*/offset*
GetClickCount SDL أمر dblclick مقابل "الماوس" الفعاليات
GetMovement SDL MouseEvent.movement*

PPB_WheelInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL WheelEvent
GetDelta SDL WheelEvent.delta*
GetTicks GAP يحتوي نوع من GAP - deltaMode على هذه المعلومات، ولكن بشكل غير كامل. هناك مناقشة حول تنفيذ واجهة برمجة تطبيقات WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017
GetScrollByPage GAP يحتوي نوع من GAP - deltaMode على هذه المعلومات، ولكن بشكل غير كامل. هناك مناقشة حول تنفيذ واجهة برمجة تطبيقات WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017

PPB_KeyboardInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL KeyboardEvent
GetKeyCode SDL KeyboardEvent.keyCode
GetCharacterText SDL KeyboardEvent.key
GetCode SDL KeyboardEvent.code

PPB_TouchInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء SDL TouchEvent
AddTouchPoint SDL TouchEvent.touches.push
GetTouchCount SDL TouchEvent.touches.length
GetTouchByIndex SDL TouchEvent.touches[i]
GetTouchById SDL Touch.indentifer (لاكتشاف ذلك بنفسك)

PPB_IMEInputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP CompositionEvent
GetText GAP CompositionEvent.data
GetSegmentNumber GAP GAP - لا يتوفّر مكافئ مباشر ويمكن استرداد هذه البيانات من GenreEvent.data.
GetSegmentOffset GAP GAP - لا يتوفّر مكافئ مباشر
GetTargetSegment GAP GAP - لا يتوفّر مكافئ مباشر
GetSelection GAP GAP - لا يتوفّر مكافئ مباشر

PPB_Instance

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
BindGraphics SDL Canvas.getContext (غير مهم لأنّ الربط تلقائي)
IsFullFrame GAP GAP - لا تتوفّر معالجات بديلة لأنواع MIME. يمكن تسجيل تطبيقات NaCl لمعالجة نوع MIME معيّن وامتلاك المستند بأكمله.
DidCreate لا ينطبق <Element>[key] يتيح لك الوصول العام إلى DOM البحث عن سمات العلامات.
DidDestroy لا ينطبق لا ينطبق غير مُشغَّلة لـ NaCl
DidChangeView لا ينطبق حدث عنصر "resize"
DidChangeFocus لا ينطبق أحداث العنصر "focus" و"focusin" و"focusout"
HandleDocumentLoad لا ينطبق GAP - لا تتوفّر طريقة للتسجيل كمعالِج لنوع mime يمكن إعداد وحدات NaCl من خلال التطبيقات + إدخال بيان لمعالجة أنواع mime معيّنة.

PPB_MediaStreamAudioTrack

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إعداد GAP getUserMedia() يمكن أن تقدّم القيود من getUserMedia() قيم الإعدادات لاستخدامها في MediaStreamTrack.
GetAttrib GAP MediaStreamTrack.getSettings()
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetBuffer GAP GAP - بلا مكافئ
RecycleBuffer GAP GAP - لا يتوفّر مكافئ
إغلاق GAP MediaStreamTrack.stop()

PPB_MediaStreamVideoTrack

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP ميزة "التقاط الشاشة" توفّر ميزة "التقاط اللوحة" إمكانية عرض لقطات فيديو آليًا.
إعداد GAP applyConstraints(), getUserMedia() GAP (جزئي) - قد يختلف مدى التهيئات المتاحة في Web API عن PPAPI.
GetAttrib GAP MediaStreamSettings.width
GAP MediaStreamSettings.height
GAP GAP - لا يتوفّر مكافئ لـ PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES لا يمكن تحميل MediaStream مسبقًا، لذا لن يتم تخزينها مؤقتًا: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements
GAP GAP - لا توجد مكافئة لـ PP_MEDIASTREAMVIDEOTrack_ATTRIB_FORMAT
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetFrame GAP GAP - بلا مكافئ
RecycleFrame GAP GAP - لا يتوفّر مكافئ
إغلاق GAP MediaStreamTrack.stop()
GetEmptyFrame GAP GAP - بلا مكافئ
PutFrame GAP GAP - لا يتوفّر مكافئ

PPB_MessageLoop

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء لا ينطبق في معظم الأحيان، تحصل الوحدات العاملة على حلقة أحداث ضمنية.
GetForMainThread لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.
GetCurrent لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.
AttachToCurrentThread لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.
تشغيل لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.
PostWork لا ينطبق في معظم الأحيان، تحصل الوحدات العاملة على حلقة أحداث ضمنية.
PostQuit لا ينطبق يحصل العاملون على حلقة أحداث ضمنية في الغالب.

PPB_Messaging

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
PostMessage لا ينطبق Window.postMessage
RegisterMessageHandler لا ينطبق Window.addEventListener
UnregisterMessageHandler لا ينطبق Window.removeEventListener

PPB_MouseCursor

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
SetCursor SDL Element.style.cursor يمكن استخدام المجموعة نفسها من مؤشرات الأسهم. يمكن إنشاء مؤشرات مخصّصة باستخدام url(..). يمكن إنشاء مؤشرات مخصّصة ديناميكية باستخدام معرّفات URI للبيانات. تتيح CSS3 تحديد نقطة الاتصال.

PPB_MouseLock

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
LockMouse SDL Element.requestPointerLock
UnlockMouse SDL Element.exitPointerLock

PPB_OpenGLES2

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
عدة طرق OpenGLES قريبًا من وظائف WebGL 1.0.
x OffscreenCanvas

PPB_TextInputController

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
SetTextInputType GAP GAP - يمكن ملء هذه الواجهة بواسطة واجهة برمجة تطبيقات "محرِّر طريقة الإدخال" يريد بعض المطوّرين أن يتمكّنوا من التلميح بهذه الطريقة، أو يفضّلون أن يتمكّنوا من اعتراض أحداث / إخراج IME وعرضها مضمّنة داخل لوحة.
UpdateCaretPosition GAP الفجوة: يمكن أن تملأها واجهة برمجة التطبيقات Input Method Editor API https://www.w3.org/TR/ime-api/
CancelCompositionText GAP الفجوة: يمكن أن تملأها واجهة برمجة التطبيقات Input Method Editor API https://www.w3.org/TR/ime-api/
UpdateSurroundingText GAP الفجوة: يمكن أن تملأها واجهة برمجة التطبيقات Input Method Editor API https://www.w3.org/TR/ime-api/

PPB_URLLoader

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء embind new XMLHttpRequest();
فتح embind XMLHttpRequest.open
FollowRedirect embind Request.redirect
GAP GAP - لا يوجد مكافئ XMLHTTPRequest
GetUploadProgress embind "التقدم" في XMLHttpRequest فعالية
GAP FetchObserver لم يتم تحديد مواصفاته أو تنفيذه بعد: https://github.com/whatwg/fetch/issues/607
GetDownloadProgress embind "التقدم" في XMLHttpRequest فعالية
GAP FetchObserver لم يتم تحديدها أو تنفيذها بعد. https://github.com/whatwg/fetch/issues/607
GetResponseInfo embind XMLHttpRequest.getAllResponseHeaders
embind جلب الردّ*
ReadResponseBody embind XMLHttpRequest.response
embind النص الأساسي* (Response is a Body)
FinishStreamingToFile embind GAP - بلا مكافئ مباشر يفترضان كلّ من XMLHttpRequest وFetch بث البيانات إلى الذاكرة بدلاً من بثها مباشرةً إلى مساحة تخزين.
إغلاق embind XMLHttpRequest.abort
GAP واجهة برمجة تطبيقات الجلب: AbortSignal وAbortController

PPB_URLRequestInfo

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء embind XMLHttpRequest
embind طلب الجلب
SetProperty GAP GAP - لا يوجد مكافئ مباشر لطلب XMLHttpRequest لا يوفّر XMLHttpRequest طرقًا مباشرة لتقييد عمليات إعادة التوجيه أو الوصول المباشر إلى ملف أو ضبط سياسة المُحيل أو بيانات الاعتماد لكل طلب.
embind الطلب.*
AppendDataToBody embind XMLHttpRequest.send GAP - يجب أن يكون لكليهما النص الكامل، بدلاً من مقطع.
embind fetch(.., options:body)
AppendFileToBody GAP جلب (جلب) تحميل البث https://www.chromestatus.com/features/5274139738767360
لا ينطبق <form> يمكنك أيضًا القراءة باستخدام FileReader والتحميل، ولكن أشبه ذلك بـ AppendDataToBody

PPB_URLResponseInfo

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetProperty embind XMLHttpRequest.getAllResponseHeaders والمزيد
embind جلب الرد.*
GetBodyAsFileRef embind استجابة الجلب (النص الأساسي) .blob() يفترض أنّ طبقة التخزين تحسِّن عملية النقل.

PPB_Var

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
VarFromUtf8 embind TextDecoder.decode
VarToUtf8 embind TextEncoder.encode
VarFromResource لا ينطبق لا ينطبق
VarToResource لا ينطبق لا ينطبق

PPB_VarArray

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
جلب embind الصفيف[i]
تأهّب embind الصفيف[i] = س
GetLength embind Array.length
SetLength embind طول المصفوفة = n

PPB_VarArrayBuffer

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء embind جديد ArrayBuffer(n)
ByteLength embind ArrayBuffer.byteLength
خريطة GAP GAP - بلا مكافئ مباشر يتعذّر على وحدات Asm.js / Wasm تعيين مناطق في ArrayBuffer غير كومة الذاكرة الخطية الفردية الخاصة بها. وقد يؤدي توفّر ميزة "الذكريات المتعددة" أو ميزة "تعيين الذكريات" في المستقبل إلى تحسين هذه الميزة.
إلغاء الربط GAP GAP - لا يتوفّر مكافئ مباشر

PPB_VarDictionary

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء embind {}
جلب embind &lt;Object&gt;[i]
تأهّب embind <Object>[i] = x
حذف embind حذف <Object>[i]
HasKey embind x في <Object>
GetKeys embind for (k in <Object>) {} لا يتوفّر مكافئ حرفي، ولكن يمكن إنشاؤه.

PPB_VideoDecoder

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API باستخدام VideoDecoder()‎ https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
إعداد GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة باستخدام مَعلمات إعداد VideoDecoder()‎ (VideoDecoderInitParameters) https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Decode GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API باستخدام 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 - ستتم معالجته مع واجهة برمجة التطبيقات WebCodecs API باستخدام ReadableStream.piThrough(VideoDecoder).piTo(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 الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API. وسيعيد التصميم الحالي تدوير الصور تلقائيًا ويستمر في عملية فك الترميز. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
وجه محمّر الخدود GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة. سيُطلق على واجهة برمجة التطبيقات اسم Flush()، ولكن لا تزال هناك مناقشة حول كيفية تسلسلها في ما يتعلّق بفك ترميز الطلبات. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
إعادة الضبط GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة من خلال إتلاف مثيل VideoDecoder وإنشاء مثيل جديد. لن تكون هذه الطريقة فعّالة بقدر طريقة إعادة الضبط المخصّصة، ولكن لا تزال تتم مناقشة الدلالات المتعلّقة لواجهة برمجة التطبيقات Reset()‎. https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming

PPB_VideoEncoder

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API باستخدام VideoEncoder()‎
GetSupportedProfiles GAP GAP (جزئي) - navigator.mediaCapabilities.encodingInfo() يجب التحقّق من الملفات الشخصية المتوافقة واحدة تلو الأخرى.
إعداد GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة باستخدام مَعلمات إعداد VideoEncoder()‎
GetFramesRequired GAP GAP - بلا مكافئ من غير المرجّح أن يتم عرض حوض اللقطات المستخدَم داخليًا من قِبل Web Codecs API.
GetFrameCodedSize GAP GAP - بلا مكافئ من غير المرجّح أن يتم الكشف عن مجموعة اللقطات التي تستخدمها واجهة برمجة التطبيقات Web Codecs API داخليًا.
GetVideoFrame GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة من خلال استخدام ReadableStream.pipeThrough(VideoEncoder). سيؤدي ذلك إلى ترميز البيانات مباشرةً في البث القابل للقراءة بدلاً من الحصول على إطار واحد لملئه بالبيانات قبل الترميز.
ترميز GAP GAP - ستتم معالجته مع واجهة برمجة التطبيقات WebCodecs API باستخدام ReadableStream.piThrough(VideoEncoder)
GetBitstreamBuffer GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة. سيمرّ التصميم الحالي تلقائيًا عبر وحدة تخزين بث البتات المشفَّرة التي يتم نقلها. تفترض واجهة برمجة التطبيقات WebCodecs حاليًا أنّه يمكن نسخ المخزن المؤقت للبث المباشر البتلي بدلاً من تجميعه، لذلك لن يكون هناك حاجة لإعادة تدويره.
RecycleBitstreamBuffer GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة. سيعيد التصميم الحالي استخدام المساحة المتوفّرة في المخزن المؤقت تلقائيًا لمواصلة عملية الترميز. من غير المرجّح أن يتغيّر ذلك في المستقبل، لأنّ آثار الأداء التالية ستكون أقلّ.
RequestEncodingParametersChange GAP GAP: ستتم معالجة هذه السياسة من خلال واجهة برمجة التطبيقات Web Codecs API المقترَحة. يمكن تغيير بعض المَعلمات أثناء التشغيل، بينما تتطلّب المَعلمات الأخرى إيقاف برنامج الترميز.
إغلاق GAP GAP - ستتم معالجته مع واجهة برمجة تطبيقات WebCodecs المقترحة باستخدام VideoEncoder.Close()

PPB_VideoFrame

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetTimestamp GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API.
SetTimestamp GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة.
GetFormat GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API.
GetSize GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API.
GetDataBuffer GAP GAP - ستتم معالجتها باستخدام واجهة برمجة التطبيقات WebCodecs API المقترَحة.
GetDataBufferSize GAP الفجوة: سيتم التعامل معها باستخدام واجهة برمجة التطبيقات المقترَحة WebCodecs API.

PPB_View

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetRect embind Element.getBoundingClientRect
IsFullscreen embind Document.fullScreenEnabled أن يكون مرتبطًا بالمستند بدلاً من عنصر واحد فقط
IsVisible embind IntersectionObserver
IsPageVisible embind document.visibilityState
GetClipRect embind IntersectionObserver
GetDeviceScale embind window.devicePixelRatio
GetCSSScale embind <Element>.getBoundingClientRect().width / <Element>.offsetWidth
GetScrollOffset embind <Element>.scrollTop / <Element>.scrollLeft

PPB_WebSocket

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء GAP WebSocket.WebSocket
ربط GAP WebSocket.WebSocket(url, ...) WebSocket "مفتوح" فعالية
إغلاق GAP WebSocket.close
ReceiveMessage GAP حدث "الرسالة" في WebSocket حدث "الخطأ" في WebSocket حدث "الإغلاق" في 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

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
Graphics3DContextLost SDL Canvas "webglcontextlost" فعالية

PPP_InputEvent

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
HandleInputEvent SDL Element.addEventListener

PPP_Instance

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
DidCreate لا ينطبق <Element>[key] يتيح لك الوصول العام إلى DOM البحث عن سمات العلامات.
DidDestroy لا ينطبق لا ينطبق غير مُشغَّلة لـ NaCl
DidChangeView لا ينطبق حدث عنصر "resize"
DidChangeFocus لا ينطبق أحداث العنصر "focus" و"focusin" و"focusout"
HandleDocumentLoad لا ينطبق GAP - لا توجد طريقة للتسجيل كمعالج نوع mime يمكن إعداد وحدات NaCl عبر التطبيقات + أحد إدخالات البيان للتعامل مع أنواع MIME معيّنة.

PPP_MessageHandler

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
HandleMessage embind "رسالة" في MessagePort فعالية نافذة "رسالة" فعالية
HandleBlockingMessage لا ينطبق GAP - لا يتوفّر مكافئ مباشر يمكن إجراء مزامنة مماثلة خارج سلسلة التعليمات الرئيسية باستخدام Atomics.wait. وقد تمت إضافة ذلك لدعم محاكاة واجهات برمجة تطبيقات المكونات الإضافية المتزامنة.

PPP_Messaging

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
HandleMessage embind "رسالة" في MessagePort فعالية نافذة "رسالة" فعالية

PPP_MouseLock

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
MouseLockLost SDL حدثا العنصرَين pointerlockchange وpointerlockerror

‫PPAPI (التطبيقات)

PPB_HostResolver

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء x GAP GAP (جزئي) - بلا مكافئ مباشر
حلّ المشاكل x GAP فجوة (جزئية) - ما مِن مكافئ مباشر
GetCanonicalName x GAP فجوة (جزئية) - ما مِن مكافئ مباشر
GetNetAddressCount x GAP فجوة (جزئية) - ما مِن مكافئ مباشر
GetNetAddress x GAP GAP (جزئي) - بلا مكافئ مباشر

PPB_NetAddress

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
CreateFromIPv4Address x GAP فجوة (جزئية) - ما مِن مكافئ مباشر
CreateFromIPv6Address x GAP GAP (جزئي) - بلا مكافئ مباشر
GetFamily x GAP فجوة (جزئية) - ما مِن مكافئ مباشر
DescribeAsString x GAP فجوة (جزئية) - ما مِن مكافئ مباشر
DescribeAsIPv4Address x GAP فجوة (جزئية) - ما مِن مكافئ مباشر
DescribeAsIPv6Address x GAP فجوة (جزئية) - ما مِن مكافئ مباشر

PPB_NetworkList

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetCount x GAP GAP - بلا مكافئ مباشر
GetName x GAP GAP - لا يتوفّر مكافئ مباشر
GetType x GAP GAP - بلا مكافئ مباشر
GetState x GAP GAP - لا يتوفّر مكافئ مباشر
GetIpAddress x GAP GAP - بلا مكافئ مباشر
GetDisplayName x GAP GAP - لا يتوفّر مكافئ مباشر
GetMTU x GAP GAP - بلا مكافئ مباشر

PPB_NetworkMonitor

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
إنشاء x GAP GAP - بلا مكافئ مباشر
UpdateNetworkList x GAP GAP - بلا مكافئ مباشر

PPB_NetworkProxy

طريقة PPAPI استخدام سلاسل المحادثات Emscripten Web API القيود
GetProxyForURL x GAP GAP - بلا مكافئ مباشر

PPB_TCPSocket وPPB_UDPSocket

لا يوجد تعيين مباشر 1:1 لعملية نقل البيانات. بدلاً من ذلك، حددنا بعض المستخدم أدناه وما هو مسار النقل الموصى به.

حالة الاستخدام اقتراحات
مشاركة الشاشة getDisplayMedia WebRTC ( إصدار تجريبي)
التحميل من خادم محلي لتقليل استخدام معدل نقل البيانات XHR والجلب والبث ومشغّل الخدمات وواجهات برمجة تطبيقات ذاكرة التخزين المؤقت
التحميل من مثيل محلي لتطبيق ويب / الاتصال بمثيل محلي لتطبيق ويب WebRTC
دردشة WebSocket*
الوقت الفعلي التواصل الصوتي/الفيديو WebRTC
التعاون WebSocket*
الوقت الفعلي ألعاب اللاعبين المتعددين WebTransport** ما لم تكن الاتصالات بين شخصين، وفي هذه الحالة WebRTC (أو WebTransport عبر RTCIceTransport)
البث المباشر تفاعلي في الوقت الفعلي WebTransport**
التواصل باستخدام الخادم القديم خادم وكيل أو برمجيات وسيطة لإجراء تحويل البروتوكول. إرسال الملاحظات إلى bit.ly/network-api-gaps

*: أو WebTransport في المستقبل

**: يمكنك الاطّلاع على chromestatus لمعرفة مدى التوفّر