(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 |
|
طريقة 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 |
|
طريقة PPAPI |
استخدام سلاسل المحادثات |
Emscripten |
Web API |
القيود |
إنشاء |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
أمر dblclick مقابل "الماوس" الفعاليات |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
طريقة 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 |
طريقة PPAPI |
استخدام سلاسل المحادثات |
Emscripten |
Web API |
القيود |
إنشاء |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
طريقة 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 (لاكتشاف ذلك بنفسك) |
|
طريقة 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 معيّنة. |
طريقة 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() |
|
طريقة 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 |
<Object>[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" فعالية |
|
طريقة 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("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 |
|
طريقة 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 |
|
طريقة PPAPI |
استخدام سلاسل المحادثات |
Emscripten |
Web API |
القيود |
إنشاء |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
أمر dblclick مقابل "الماوس" الفعاليات |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
طريقة 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 |
طريقة PPAPI |
استخدام سلاسل المحادثات |
Emscripten |
Web API |
القيود |
إنشاء |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
طريقة 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 (لاكتشاف ذلك بنفسك) |
|
طريقة 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 معيّنة. |
طريقة 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() |
|
طريقة 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 |
<Object>[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" فعالية |
|
طريقة 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 لمعرفة مدى التوفّر