คู่มือการย้ายข้อมูล WebAssembly

ประกาศการเลิกใช้งาน (P)NaCl

เนื่องด้วยแรงขับเคลื่อนของการรองรับ WebAssembly ในเบราว์เซอร์ต่างๆ เราจึงวางแผนที่จะมุ่งเน้นไปที่โค้ดเนทีฟสำหรับ WebAssembly ในอนาคต และวางแผนที่จะยกเลิกการรองรับ PNaCl ในไตรมาสที่ 4 ของปี 2019 (ยกเว้นแอป Chrome) เราเชื่อว่าระบบนิเวศที่มีชีวิตชีวาของ WebAssembly เหมาะสําหรับเว็บแอปประสิทธิภาพสูงทั้งใหม่และที่มีอยู่มากกว่า และการใช้งาน PNaCl มีจำนวนต่ำมากจนสมควรเลิกใช้งาน

ตั้งแต่ Chrome 76 เป็นต้นไป PNaCl ในเว็บแบบเปิดได้ย้ายไปอยู่หลังการทดลองใช้แหล่งที่มา ซึ่งเป็นกลไกสำหรับนักพัฒนาเว็บในการลงทะเบียนและรับสิทธิ์เข้าถึงฟีเจอร์ที่ไม่ได้เปิดไว้โดยค่าเริ่มต้น โดยปกติแล้วสถานะนี้จะแสดงฟีเจอร์ใหม่ที่เสนอ แต่ในกรณีนี้แสดงฟีเจอร์ที่กำลังจะเลิกใช้งาน นักพัฒนาแอปสามารถลงทะเบียนในคอนโซลช่วงทดลองใช้จากต้นทาง แล้วรับโทเค็นซึ่งนำไปฝังในหน้าและเปิดใช้ฟีเจอร์ดังกล่าวได้โดยที่ผู้ใช้ไม่จำเป็นต้องใช้ Flag (ดูรายละเอียดเพิ่มเติมได้ที่คู่มือที่ลิงก์) ช่วงทดลองใช้มีกำหนดเวลาสิ้นสุดไปจนถึง Chrome 78 โดยประมาณจนถึงเดือนธันวาคม 2019 การเปลี่ยนแปลงนี้ไม่ได้มีจุดประสงค์ให้ส่งผลต่อ NaCl หรือ PNaCl ในแอปหรือส่วนขยายของ Chrome และขั้นตอน "enable-nacl" Flag ใน chrome://flags ยังใช้เพื่อเปิดใช้ PNaCl ในเครื่องสำหรับการทดสอบได้ (แฟล็กนี้ยังคงมีฟังก์ชันปัจจุบันสำหรับการเปิดใช้ NaCl ที่ไม่ใช่ PNaCl ในแบบ "เนทีฟ" ในหน้าใดก็ได้)

นอกจากนี้เรายังได้ประกาศการเลิกใช้งานไตรมาสที่ 1 ปี 2018 ของ แอป Chrome นอก ChromeOS

การย้ายข้อมูล Toolchain

สำหรับ Use Case ส่วนใหญ่ของ (P)NaCl เราขอแนะนำให้เปลี่ยนไปใช้ Emscripten จาก NaCl SDK การย้ายข้อมูลมีแนวโน้มที่จะดำเนินการได้ค่อนข้างง่ายหากแอปพลิเคชันของคุณย้ายข้อมูลไปยัง Linux ได้ ใช้ SDL หรือ POSIX API แม้ว่าเราจะไม่รองรับ NaCl / Pepper API โดยตรง แต่เราได้พยายามแสดงรายการ Web API ที่เทียบเท่า สำหรับกรณีที่ย้ายข้อมูลยากขึ้น โปรดติดต่อมาที่ native-client-discuss@googlegroups.com

การย้ายข้อมูล API

เราได้ระบุสถานะของการใช้แทนแพลตฟอร์มเว็บสำหรับแต่ละแพลตฟอร์มไว้ที่นี่ ของ API ที่เปิดเผยต่อ (P)NaCl นอกจากนี้ ตารางจะแสดงรายการไลบรารีหรือตัวเลือกใน Emscripten ที่มีการแทนที่ใกล้เคียงที่สุด

เราคาดว่าจะเพิ่มการรองรับชุดข้อความหน่วยความจำที่ใช้ร่วมกันใน WebAssembly ในปี 2017 เนื่องจากชุดข้อความมีความสําคัญต่อการจับคู่กรณีการใช้งานที่น่าสนใจที่สุดของ (P)NaCl รายการการย้ายข้อมูลที่ถือว่าเป็นการรองรับชุดข้อความที่กำลังจะเข้ามา จะทำเครื่องหมายไว้ด้านล่าง หากการควบคุมการไหลของข้อมูลของแอปพลิเคชันอาศัย API แบบบล็อกเป็นหลัก คุณอาจพบว่าจำเป็นต้องมีการรองรับเธรดเพื่อให้พอร์ตได้อย่างสะดวก

แม้ว่าเราจะพยายามทำให้ถูกต้องในตารางนี้ ก็ไม่มีข้อผิดพลาดหรือการละเว้นใดๆ ต้องสงสัย หากพบปัญหา โปรดติดต่อเราที่ native-client-discuss@googlegroups.com

PPAPI

PPB_Audio

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง x SDL (บางส่วน) GAP (บางส่วน) - AudioWorkletNode เทียบเท่า ROUGHLY AudioWorkletSpec พร้อมแล้ว แต่ AudioDeviceClient อาจเหมาะกับ API นี้มากกว่า ชุมชนยังคงระบุ AudioDeviceClient อยู่ Worklet อาจไม่เทียบเท่าคร่าวๆ สำหรับ API นี้
GetCurrentConfig SDL AudioContext* (รับการตั้งค่าที่ส่งผ่าน)
StartPlayback SDL AudioBufferSourceNode.start
StopPlayback SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
CreateStereo16Bit GAP GAP - รองรับเฉพาะตัวอย่างจำนวนลอยตัว 32 บิต ข้อมูลจำเพาะของ Web Audio เวอร์ชันถัดไปจะใช้การรองรับตัวอย่าง 16 บิต
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.length
RecommendSampleRate SDL AudioContext.sampleRate (จากคอนสตรัคต์เริ่มต้น) โดย AudioContext จะมีอัตราการสุ่มตัวอย่างที่ต้องการซึ่งตรงกับอัตราตัวอย่างจริงของอุปกรณ์เสียงฮาร์ดแวร์โดยค่าเริ่มต้น
RecommendSampleFrameCount GAP GAP - จะจัดการด้วย AudioDeviceClient ที่วางแผนไว้ มีปัญหาที่ยังไม่ได้รับการแก้ไขเพื่ออนุญาตขนาดที่ผู้ใช้ระบุ แต่ยังคงอยู่ในระหว่างการกำหนด วิธีจัดการที่ดีที่สุดน่าจะเป็นการใช้ AudioDeviceClient ซึ่งบอกได้ขนาดที่เหมาะสมสำหรับฮาร์ดแวร์หนึ่งๆ

PPB_Console

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
บันทึก Utime console.log/warn/error/...
LogWithSource GAP GAP Console API ถือว่าเป็น API ที่ทดแทนได้อย่างสมบูรณ์เพียงพอ เว้นแต่นักพัฒนาซอฟต์แวร์จะระบุ Use Case ที่เฉพาะเจาะจงสำหรับฟังก์ชันการทำงานที่ LogWithSource มีให้ คุณสามารถใช้แผนที่แหล่งที่มาของเครื่องมือสำหรับนักพัฒนาเว็บเพื่อแก้ไขข้อบกพร่อง JavaScript ที่เปลี่ยนรูปแบบแล้วในภาษาต้นฉบับ

PPB_Core

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
getTime utime Date().getTime() ใหม่
getTimeTicks utime Date().getTime() ใหม่
IsMainThread GAP window.document !== ไม่ระบุ
CallOnMainThread GAP Worker.postMessage + Atomics.wait สร้างการซิงค์ข้อมูลที่เทียบเท่ากันได้

PPB_FileIO

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง FS (บางส่วน) 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})
อ่าน FS (บางส่วน) Blob.slice().arrayBuffer()
เขียน FS (บางส่วน) FileSystemWriter.write()
SetLength FS (บางส่วน) FileSystemWriter.truncate()
แบบยึดเพดานด้วยฐาน GAP (บางส่วน) GAP (บางส่วน) - ระบบจะล้างไฟล์เมื่อมีการเรียกใช้ FileSystemWrite.close() ทั้งนี้ เราออกแบบให้เพราะไฟล์ Native File System API ปรากฏอยู่ในระบบปฏิบัติการ ดังนั้นจึงต้องมีการตรวจสอบ Google Safe Browsing ก่อนที่ข้อมูลจะแสดงในระบบปฏิบัติการ
ปิด FS (บางส่วน) FileSystemWriter.close() ไม่ยกเลิกการดำเนินการที่รอดำเนินการ แต่จะล้างข้อมูลที่เขียนไว้จนถึงดิสก์
ReadToArray GAP Blob.slice().arrayBuffer() หรือ Blob.arrayBuffer() อนุญาตการอ่านช่วงย่อยหลายช่วงพร้อมกัน

PPB_FileRef

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง FS (บางส่วน) FileSystemDirectoryHandle.getFile("name", {create: true})
GetFileSystemType FS (บางส่วน) FileSystem.type
GetName FS (บางส่วน) File.name
GetPath FS (บางส่วน) GAP (บางส่วน) - เมื่อใช้ Native File System API คุณจะระบุเส้นทางแบบสัมพัทธ์ของไฟล์จากการอ้างอิงไปยังไดเรกทอรีที่มีไฟล์ได้โดยใช้ FileSystemHandle.resolve(FileSystemHandle) ระบุเส้นทางสัมบูรณ์ของไฟล์ไม่ได้ และผู้ใช้ต้องให้สิทธิ์เข้าถึงไดเรกทอรีที่มีไฟล์
GetParent FS (บางส่วน) GAP (บางส่วน) - เมื่อใช้ File System API เดิม คุณจะกำหนดเส้นทางแบบสัมพัทธ์ของไฟล์ได้จากการอ้างอิงไปยังไดเรกทอรีที่มีไฟล์โดยใช้ FileSystemHandle.resolve(FileSystemHandle) ผู้ใช้ต้องให้สิทธิ์เข้าถึงไดเรกทอรีที่มีไฟล์
MakeDirectory FS (บางส่วน) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
แตะ FS (บางส่วน) FileSystemDirectoryHandle.getFile("name", {create: true}) แก้ไขเวลาได้ด้วยการเขียน
ลบ FS (บางส่วน) FileSystemDirectoryHandle.removeEntry() ไดเรกทอรีไม่จำเป็นต้องว่างเปล่า ซึ่งต่างจาก PPAPI
เปลี่ยนชื่อ FS (บางส่วน) GAP (บางส่วน) - เมื่อใช้ Native File System API ระบบสามารถเขียนไฟล์โดยใช้ชื่อใหม่โดยใช้ FileSystemFileHandle.getFile() สำหรับชื่อใหม่และ FileSystemFileHandle.createWriter().write() ที่มีเนื้อหาของไฟล์เก่า จากนั้น FileSystemDirectoryHandle.removeEntry() เพื่อลบไฟล์เก่า ไม่มี API โดยตรงที่จะดำเนินการนี้ในขั้นตอนเดียวใน Native File System API
การค้นหา GAP (บางส่วน) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (บางส่วน) - Blob.type สามารถใช้ในการตรวจสอบประเภท MIME ได้เช่นกัน ไม่สามารถระบุประเภทระบบไฟล์ เวลาที่สร้าง และเวลาเข้าถึงล่าสุดได้ด้วย Native File System API
ReadDirectoryEntries FS (บางส่วน) FileSystemDirectoryHandle.getEntries()

PPB_FileSystem

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง FS (บางส่วน) window.requestFileSystem JS API ทําทั้ง 2 อย่างในขั้นตอนเดียว
เปิด GAP window.requestFileSystem JS API ทําทั้ง 2 อย่างในขั้นตอนเดียว
GetType GAP FileSystem.type

PPB_Fullscreen

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
IsFullScreen html5.h Document.fullscreenEnabled
SetFullscreen html5.h Document.requestFullscreen
GetScreenSize html5.h Document.exitFullscreen

PPB_Gamepad

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
ตัวอย่าง SDL เกมแพด* ออบเจ็กต์ Gamepad จะแสดงการประทับเวลาซึ่งสัมพันธ์กับ navigationStart จะได้รับการอัปเดตเมื่อได้รับข้อมูลจากฮาร์ดแวร์ https://www.w3.org/TR/gamepad/#gamepad-interface

PPB_Graphics2D

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง SDL Canvas.getContext('2d')
อธิบาย SDL Canvas.clientWidth + 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
GetAttribMaxValue OpenGL ES 3.0 WebGL 2.0 GAP (บางส่วน) - WebGL 2.0 และการเปิดเผย OpenGL ES 3.0 ของ Emscripten รองรับ Framebuffers แบบหลายตัวอย่างที่ผู้ใช้กำหนดเอง ซึ่งคุณสามารถตั้งค่าพารามิเตอร์ทั้งหมดที่สามารถกำหนดค่าผ่าน 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
GetNativeImageDataFormat SDL ImageData กำหนดลำดับ RGBA
IsImageDataFormatSupported SDL ImageData กำหนดลำดับ RGBA
สร้าง SDL CanvasRenderingContext2d.createImageData
อธิบาย SDL ImageData ไม่มี Stride เสมอ
แผนที่ SDL ImageData.data
ยกเลิกการแมป SDL ImageData.data

PPB_InputEvent

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
RequestInputEvents SDL ไม่มีรายการที่ตรงกันโดยตรง การที่ไม่มีฟีเจอร์นี้อาจมีความเกี่ยวข้องน้อยกว่าเนื่องจาก JS / 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง SDL MouseEvent
GetButton SDL MouseEvent.button
GetPosition SDL MouseEvent.client*/page*/offset*
GetClickCount SDL dblclick เทียบกับ "mousedown" กิจกรรม
GetMovement SDL MouseEvent.movement*

PPB_WheelInputEvent

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง SDL WheelEvent
GetDelta SDL WheelEvent.delta*
GetTicks GAP GAP - deltaMode มีข้อมูลนี้อยู่แต่ไม่สมบูรณ์ มีการพูดคุยเกี่ยวกับการใช้ WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017
GetScrollByPage GAP GAP - deltaMode มีข้อมูลนี้อยู่แต่ไม่สมบูรณ์ มีการพูดคุยเกี่ยวกับการใช้ WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017

PPB_KeyboardInputEvent

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง SDL KeyboardEvent
GetKeyCode SDL KeyboardEvent.keyCode
GetCharacterText SDL KeyboardEvent.key
GetCode SDL KeyboardEvent.code

PPB_TouchInputEvent

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง GAP CompositionEvent
GetText GAP CompositionEvent.data
GetSegmentNumber GAP GAP - ไม่มีรายการที่เทียบเท่าโดยตรง ข้อมูลนี้อาจดึงมาจาก CompositionEvent.data
GetSegmentOffset GAP GAP - ไม่มีรายการที่เทียบเท่าโดยตรง
GetTargetSegment GAP GAP - ไม่มีค่าเทียบเท่าโดยตรง
GetSelection GAP GAP - ไม่มีค่าเทียบเท่าโดยตรง

PPB_Instance

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 ผ่านแอป + รายการไฟล์ Manifest เพื่อจัดการกับประเภท MIME บางประเภทได้

PPB_MediaStreamAudioTrack

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง GAP การจับภาพ Canvas Canvas Capture ช่วยให้คุณสามารถแนะนำเฟรมวิดีโอแบบเป็นโปรแกรมได้
กำหนดค่า 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง ไม่มี ส่วนใหญ่ไม่เกี่ยวข้อง เวิร์กเกอร์จะได้รับลูปเหตุการณ์โดยนัย
GetForMainThread ไม่มี ส่วนใหญ่ไม่เกี่ยวข้อง เวิร์กเกอร์จะได้รับลูปเหตุการณ์โดยนัย
GetCurrent ไม่มี ส่วนใหญ่แล้วผู้ปฏิบัติงานจะเห็นลูปเหตุการณ์แบบไม่เจาะจงปลายทาง
AttachToCurrentThread ไม่มี ส่วนใหญ่ไม่เกี่ยวข้อง เวิร์กเกอร์จะได้รับลูปเหตุการณ์โดยนัย
เรียกใช้ ไม่มี ส่วนใหญ่แล้วผู้ปฏิบัติงานจะเห็นลูปเหตุการณ์แบบไม่เจาะจงปลายทาง
PostWork ไม่มี ส่วนใหญ่แล้วผู้ปฏิบัติงานจะเห็นลูปเหตุการณ์แบบไม่เจาะจงปลายทาง
PostQuit ไม่มี ส่วนใหญ่แล้วผู้ปฏิบัติงานจะเห็นลูปเหตุการณ์แบบไม่เจาะจงปลายทาง

PPB_Messaging

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
PostMessage ไม่มี Window.postMessage
RegisterMessageHandler ไม่มี Window.addEventListener
UnregisterMessageHandler ไม่มี Window.removeEventListener

PPB_MouseCursor

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
SetCursor SDL Element.style.cursor รองรับเคอร์เซอร์หุ้นชุดเดียวกัน คุณสามารถใช้เคอร์เซอร์ที่กำหนดเองกับ URL(..) ได้ เคอร์เซอร์ที่กำหนดเองแบบไดนามิกทำได้ด้วย URI ข้อมูล CSS3 รองรับการระบุฮอตสปอต

PPB_MouseLock

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
LockMouse SDL Element.requestPointerLock
UnlockMouse SDL Element.exitPointerLock

PPB_OpenGLES2

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
หลายวิธี OpenGLES ใกล้กับ WebGL 1.0 ในฟังก์ชันการทำงาน
x OffscreenCanvas

PPB_TextInputController

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
SetTextInputType GAP GAP - อาจมีการเติมโดย Input Method Editor API นักพัฒนาซอฟต์แวร์บางรายต้องการให้คำแนะนำในลักษณะนี้ หรือโดยเฉพาะอย่างยิ่ง ความสามารถในการสกัดกั้นและแสดงเหตุการณ์ / เอาต์พุต IME ในบรรทัดภายใน Canvas ได้
UpdateCaretPosition GAP GAP - อาจมีการเติมโดย Input Method Editor API https://www.w3.org/TR/ime-api/
CancelCompositionText GAP GAP - อาจมีการเติมโดย Input Method Editor API https://www.w3.org/TR/ime-api/
UpdateSurroundingText GAP GAP - อาจมีการเติมโดย Input Method Editor API https://www.w3.org/TR/ime-api/

PPB_URLLoader

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง embind 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 เนื้อความ* (คำตอบคือเนื้อหา)
FinishStreamingToFile embind GAP - ไม่มีรายการที่เทียบเท่าโดยตรง ทั้ง XMLHttpRequest และ Fetch ถือว่าสตรีมไปยังหน่วยความจำแทนที่จะสตรีมไปยังพื้นที่เก็บข้อมูลโดยตรง
ปิด embind XMLHttpRequest.abort
GAP Fetch API: AbortSignal และ AbortController

PPB_URLRequestInfo

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง embind XMLHttpRequest
embind คำขอดึงข้อมูล
SetProperty GAP GAP - ไม่มีบริการเทียบเท่าโดยตรงสำหรับ XMLHttpRequest XMLHttpRequest ไม่มีวิธีโดยตรงในการจำกัดตามคำขอหลังจากการเปลี่ยนเส้นทาง สตรีมไปยังไฟล์ ตั้งค่านโยบายผู้อ้างอิงหรือข้อมูลรับรอง
embind ส่งคำขอ*
AppendDataToBody embind XMLHttpRequest.send GAP - เนื้อหาทั้งสองต้องประกอบไปด้วยตัวเครื่องทั้งหมด ไม่ใช่เป็นส่วนๆ
embind fetch(.., options:body)
AppendFileToBody GAP Googlebot() อัปโหลดสตรีมมิง https://www.chromestatus.com/features/5274139738767360
ไม่มี <form> และอ่านด้วย FileReader และอัปโหลดก็ได้ แต่จะคล้ายๆ กับ AppendDataToBody มากกว่า

PPB_URLResponseInfo

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
GetProperty embind XMLHttpRequest.getAllResponseHeaders + others
embind ดึงข้อมูลคำตอบ*
GetBodyAsFileRef embind ดึงข้อมูลการตอบกลับ (เนื้อหา) .blob() ถือว่าเลเยอร์พื้นที่เก็บข้อมูลเพิ่มประสิทธิภาพการโอน

PPB_Var

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
VarFromUtf8 embind TextDecoder.decode
VarToUtf8 embind TextEncoder.encode
VarFromResource ไม่มี ไม่มี
VarToResource ไม่มี ไม่มี

PPB_VarArray

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
ดาวน์โหลด embind อาร์เรย์[i]
ตั้งค่า embind อาร์เรย์[i] = x
GetLength embind Array.length
SetLength embind Array.length = n

PPB_VarArrayBuffer

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง embind ArrayBuffer(n) ใหม่
ByteLength embind ArrayBuffer.byteLength
แผนที่ GAP GAP - ไม่มีค่าเทียบเท่าโดยตรง โมดูล Asm.js / Wasm ไม่สามารถแมปส่วนของ ArrayBuffer นอกเหนือจากกองหน่วยความจำเชิงเส้นเดียว ในอนาคต ความทรงจำหลายรายการหรือการแมปความทรงจำอาจช่วยปรับปรุงเรื่องนี้ได้
ยกเลิกการแมป GAP GAP - ไม่มีรายการที่เทียบเท่าโดยตรง

PPB_VarDictionary

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง embind {}
ดาวน์โหลด embind <Object>[i]
ตั้งค่า embind <Object>[i] = x
ลบ embind ลบ <ออบเจ็กต์>[i]
HasKey embind x ใน <Object>
GetKeys embind for (k ใน <Object>) {} ไม่มีค่าเทียบเท่า แต่สิ่งนั้นเป็นสิ่งที่สร้างขึ้นได้

PPB_VideoDecoder

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง GAP 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 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 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.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
RecyclePicture GAP GAP - จัดการด้วย 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 ที่เสนอ API นี้จะเรียกว่า Flush() แต่ยังคงมีการหารือกันอยู่ว่าจะเรียงลำดับอย่างไรในส่วนที่เกี่ยวข้องกับการถอดรหัสการเรียก 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 ที่เสนอโดยทำลายอินสแตนซ์ VideoDecoder แล้วสร้างอินสแตนซ์ใหม่ วิธีการนี้จะไม่มีประสิทธิภาพเท่ากับวิธีการรีเซ็ตโดยเฉพาะ แต่ความหมายของ API สำหรับการรีเซ็ต() ยังคงมีการกล่าวถึงอยู่ https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming

PPB_VideoEncoder

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง GAP GAP - จัดการด้วย WebCodecs API ที่เสนอโดยใช้ VideoEncoder()
GetSupportedProfiles GAP GAP (บางส่วน) - navigator.mediaCapabilities.encodingInfo() โดยต้องเลือกโปรไฟล์ที่รองรับทีละรายการ
เริ่มต้น GAP GAP - ได้รับการจัดการด้วย WebCodecs API ที่เสนอโดยใช้พารามิเตอร์การเริ่มต้น VideoEncoder()
GetFramesRequired GAP GAP - ไม่มีค่าเทียบเท่า ไม่น่าจะมีการแสดงพูลเฟรมที่ Web Codecs API ใช้ภายใน
GetFrameCodedSize GAP GAP - ไม่มีค่าเทียบเท่า เป็นไปได้ยากที่ Web Codecs API ที่ใช้ภายในจะถูกเปิดเผย
GetVideoFrame GAP GAP - จะจัดการด้วย WebCodecs API ที่เสนอโดยใช้ ReadableStream.pipeThrough(VideoEncoder) ซึ่งจะเข้ารหัสข้อมูลในสตรีมที่อ่านได้โดยตรงแทนที่จะจับเฟรมเดียวเพื่อเติมข้อมูลก่อนเข้ารหัส
เข้ารหัส GAP GAP - จัดการด้วย WebCodecs API ที่เสนอโดยใช้ ReadableStream.pipeThrough(VideoEncoder)
GetBitstreamBuffer GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ การออกแบบปัจจุบันจะผ่านบัฟเฟอร์บิตสตรีมที่เข้ารหัสซึ่งส่งผ่านผ่านโดยอัตโนมัติ ปัจจุบัน WebCodecs API ถือว่าสามารถคัดลอกบัฟเฟอร์บิตสตรีมแทนการรวมไว้ด้วยกันได้ จึงไม่จำเป็นต้องรีไซเคิล
RecycleBitstreamBuffer GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ การออกแบบในปัจจุบันจะนำบัฟเฟอร์ใหม่ไปรีไซเคิลโดยอัตโนมัติเพื่อให้กระบวนการเข้ารหัสดำเนินต่อไป ข้อมูลนี้ไม่น่าจะมีการเปลี่ยนแปลงในอนาคตเนื่องจากผลกระทบด้านประสิทธิภาพมีน้อยลง
RequestEncodingParametersChange GAP GAP - ได้รับการจัดการโดย Web Codecs API ที่เสนอ พารามิเตอร์บางตัวสามารถเปลี่ยนแปลงได้ทันที แต่บางรายการก็ต้องถอดโปรแกรมเปลี่ยนไฟล์ออก
ปิด GAP GAP - จัดการด้วย WebCodecs API ที่เสนอโดยใช้ VideoEncoder.Close()

PPB_VideoFrame

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
GetTimestamp GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ
SetTimestamp GAP GAP - ได้รับการจัดการด้วย WebCodecs API ที่เสนอ
GetFormat GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ
GetSize GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ
GetDataBuffer GAP GAP - ได้รับการจัดการด้วย WebCodecs API ที่เสนอ
GetDataBufferSize GAP GAP - ได้รับการจัดการด้วย WebCodecs API ที่เสนอ

PPB_View

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
กราฟิก 3 มิติของบริบทสูญหาย SDL Canvas "webglcontextlost" กิจกรรม

PPP_InputEvent

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
HandleInputEvent SDL Element.addEventListener

PPP_Instance

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
DidCreate ไม่มี &lt;Element&gt;[key] การเข้าถึง DOM ทั่วไปช่วยให้คุณกรองแอตทริบิวต์ของแท็กได้
DidDestroy ไม่มี ไม่มี ไม่ได้ทริกเกอร์สําหรับ NaCl
DidChangeView ไม่มี เหตุการณ์ "resize" ขององค์ประกอบ
DidChangeFocus ไม่มี เหตุการณ์ "focus", "focusin", "focusout" ขององค์ประกอบ
HandleDocumentLoad ไม่มี GAP - ไม่มีวิธีลงทะเบียนเป็นเครื่องจัดการประเภท MIME คุณสามารถตั้งค่าโมดูล NaCl ผ่านแอป + รายการไฟล์ Manifest เพื่อจัดการกับประเภท MIME บางประเภทได้

PPP_MessageHandler

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
HandleMessage embind "message" ใน MessagePort กิจกรรม "ข้อความ" ในหน้าต่าง กิจกรรม
HandleBlockingMessage ไม่มี GAP - ไม่มีรายการที่เทียบเท่าโดยตรง การซิงค์ข้อมูลที่คล้ายกันจะทำได้จากเทรดหลักด้วย Atomics.Wait เราได้เพิ่มตัวเลือกนี้เพื่อรองรับการจําลอง API ของปลั๊กอินแบบซิงค์

PPP_Messaging

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
HandleMessage embind "message" ใน MessagePort กิจกรรม "ข้อความ" ในหน้าต่าง กิจกรรม

PPP_MouseLock

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
MouseLockLost SDL องค์ประกอบ "pointerlockchange", "pointerlockerror" กิจกรรม

IRT

PPB_Audio

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง x SDL (บางส่วน) GAP (บางส่วน) - AudioWorkletNode เทียบเท่า ROUGHLY AudioWorkletSpec พร้อมแล้ว แต่ AudioDeviceClient อาจเหมาะกับ API นี้มากกว่า ชุมชนยังคงระบุ AudioDeviceClient อยู่ Worklet อาจไม่เทียบเท่าคร่าวๆ สำหรับ API นี้
GetCurrentConfig SDL AudioContext* (รับการตั้งค่าที่ส่งผ่าน)
StartPlayback SDL AudioBufferSourceNode.start
StopPlayback SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
CreateStereo16Bit GAP GAP - รองรับเฉพาะตัวอย่างจำนวนลอยตัว 32 บิต ข้อมูลจำเพาะของ Web Audio เวอร์ชันถัดไปจะใช้การรองรับตัวอย่าง 16 บิต
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.length
RecommendSampleRate SDL AudioContext.sampleRate (จากคอนสตรัคต์เริ่มต้น) โดย AudioContext จะมีอัตราการสุ่มตัวอย่างที่ต้องการซึ่งตรงกับอัตราตัวอย่างจริงของอุปกรณ์เสียงฮาร์ดแวร์โดยค่าเริ่มต้น
RecommendSampleFrameCount GAP GAP - จะจัดการด้วย AudioDeviceClient ที่วางแผนไว้ มีปัญหาที่ยังไม่ได้รับการแก้ไขเพื่ออนุญาตขนาดที่ผู้ใช้ระบุ แต่ยังคงอยู่ในระหว่างการกำหนด วิธีจัดการที่ดีที่สุดน่าจะเป็นการใช้ AudioDeviceClient ซึ่งบอกได้ขนาดที่เหมาะสมสำหรับฮาร์ดแวร์หนึ่งๆ

PPB_Console

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
บันทึก Utime console.log/warn/error/...
LogWithSource GAP GAP Console API ถือว่าเป็น API ที่ทดแทนได้อย่างสมบูรณ์เพียงพอ เว้นแต่นักพัฒนาซอฟต์แวร์จะระบุ Use Case ที่เฉพาะเจาะจงสำหรับฟังก์ชันการทำงานที่ LogWithSource มีให้ คุณสามารถใช้แผนที่แหล่งที่มาของเครื่องมือสำหรับนักพัฒนาเว็บเพื่อแก้ไขข้อบกพร่อง JavaScript ที่เปลี่ยนรูปแบบแล้วในภาษาต้นฉบับ

PPB_Core

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
getTime utime Date().getTime() ใหม่
getTimeTicks utime Date().getTime() ใหม่
IsMainThread GAP window.document !== ไม่ระบุ
CallOnMainThread GAP Worker.postMessage + Atomics.wait สร้างการซิงค์ข้อมูลที่เทียบเท่ากันได้

PPB_FileIO

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง FS (บางส่วน) 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})
อ่าน FS (บางส่วน) Blob.slice().arrayBuffer()
เขียน FS (บางส่วน) FileSystemWriter.write()
SetLength FS (บางส่วน) FileSystemWriter.truncate()
แบบยึดเพดานด้วยฐาน GAP (บางส่วน) GAP (บางส่วน) - ระบบจะล้างไฟล์เมื่อมีการเรียกใช้ FileSystemWrite.close() ทั้งนี้ เราออกแบบให้เพราะไฟล์ Native File System API ปรากฏอยู่ในระบบปฏิบัติการ ดังนั้นจึงต้องมีการตรวจสอบ Google Safe Browsing ก่อนที่ข้อมูลจะแสดงในระบบปฏิบัติการ
ปิด FS (บางส่วน) FileSystemWriter.close() ไม่ยกเลิกการดำเนินการที่รอดำเนินการ แต่จะล้างข้อมูลที่เขียนไว้จนถึงดิสก์
ReadToArray GAP Blob.slice().arrayBuffer() หรือ Blob.arrayBuffer() อนุญาตการอ่านช่วงย่อยหลายช่วงพร้อมกัน

PPB_FileRef

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง FS (บางส่วน) FileSystemDirectoryHandle.getFile(&quot;name&quot;, {create: true})
GetFileSystemType FS (บางส่วน) FileSystem.type
GetName FS (บางส่วน) File.name
GetPath FS (บางส่วน) GAP (บางส่วน) - เมื่อใช้ Native File System API คุณจะระบุเส้นทางแบบสัมพัทธ์ของไฟล์จากการอ้างอิงไปยังไดเรกทอรีที่มีไฟล์ได้โดยใช้ FileSystemHandle.resolve(FileSystemHandle) ระบุเส้นทางสัมบูรณ์ของไฟล์ไม่ได้ และผู้ใช้ต้องให้สิทธิ์เข้าถึงไดเรกทอรีที่มีไฟล์
GetParent FS (บางส่วน) GAP (บางส่วน) - เมื่อใช้ File System API เดิม คุณจะกำหนดเส้นทางแบบสัมพัทธ์ของไฟล์ได้จากการอ้างอิงไปยังไดเรกทอรีที่มีไฟล์โดยใช้ FileSystemHandle.resolve(FileSystemHandle) ผู้ใช้ต้องให้สิทธิ์เข้าถึงไดเรกทอรีที่มีไฟล์
MakeDirectory FS (บางส่วน) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
แตะ FS (บางส่วน) FileSystemDirectoryHandle.getFile(&quot;name&quot;, {create: true}) แก้ไขเวลาได้ด้วยการเขียน
ลบ FS (บางส่วน) FileSystemDirectoryHandle.removeEntry() ไดเรกทอรีไม่จำเป็นต้องว่างเปล่า ซึ่งต่างจาก PPAPI
เปลี่ยนชื่อ FS (บางส่วน) GAP (บางส่วน) - เมื่อใช้ Native File System API ระบบสามารถเขียนไฟล์โดยใช้ชื่อใหม่โดยใช้ FileSystemFileHandle.getFile() สำหรับชื่อใหม่และ FileSystemFileHandle.createWriter().write() ที่มีเนื้อหาของไฟล์เก่า จากนั้น FileSystemDirectoryHandle.removeEntry() เพื่อลบไฟล์เก่า ไม่มี API โดยตรงที่จะดำเนินการนี้ในขั้นตอนเดียวใน Native File System API
การค้นหา GAP (บางส่วน) Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified GAP (บางส่วน) - Blob.type สามารถใช้ในการตรวจสอบประเภท MIME ได้เช่นกัน ไม่สามารถระบุประเภทระบบไฟล์ เวลาที่สร้าง และเวลาเข้าถึงล่าสุดได้ด้วย Native File System API
ReadDirectoryEntries FS (บางส่วน) FileSystemDirectoryHandle.getEntries()

PPB_FileSystem

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง FS (บางส่วน) window.requestFileSystem JS API ทําทั้ง 2 อย่างในขั้นตอนเดียว
เปิด GAP window.requestFileSystem JS API ทําทั้ง 2 อย่างในขั้นตอนเดียว
GetType GAP FileSystem.type

PPB_Fullscreen

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
IsFullScreen html5.h Document.fullscreenEnabled
SetFullscreen html5.h Document.requestFullscreen
GetScreenSize html5.h Document.exitFullscreen

PPB_Gamepad

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
ตัวอย่าง SDL เกมแพด* ออบเจ็กต์ Gamepad จะแสดงการประทับเวลาซึ่งสัมพันธ์กับ navigationStart จะได้รับการอัปเดตเมื่อได้รับข้อมูลจากฮาร์ดแวร์ https://www.w3.org/TR/gamepad/#gamepad-interface

PPB_Graphics2D

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง SDL Canvas.getContext('2d')
อธิบาย SDL Canvas.clientWidth + 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
GetAttribMaxValue OpenGL ES 3.0 WebGL 2.0 GAP (บางส่วน) - WebGL 2.0 และการเปิดเผย OpenGL ES 3.0 ของ Emscripten รองรับ Framebuffers แบบหลายตัวอย่างที่ผู้ใช้กำหนดเอง ซึ่งคุณสามารถตั้งค่าพารามิเตอร์ทั้งหมดที่สามารถกำหนดค่าผ่าน 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
GetNativeImageDataFormat SDL ImageData กำหนดลำดับ RGBA
IsImageDataFormatSupported SDL ImageData กำหนดลำดับ RGBA
สร้าง SDL CanvasRenderingContext2d.createImageData
อธิบาย SDL ImageData ไม่มี Stride เสมอ
แผนที่ SDL ImageData.data
ยกเลิกการแมป SDL ImageData.data

PPB_InputEvent

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
RequestInputEvents SDL ไม่มีรายการที่ตรงกันโดยตรง การที่ไม่มีฟีเจอร์นี้อาจมีความเกี่ยวข้องน้อยกว่าเนื่องจาก JS / 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง SDL MouseEvent
GetButton SDL MouseEvent.button
GetPosition SDL MouseEvent.client*/page*/offset*
GetClickCount SDL dblclick เทียบกับ "mousedown" กิจกรรม
GetMovement SDL MouseEvent.movement*

PPB_WheelInputEvent

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง SDL WheelEvent
GetDelta SDL WheelEvent.delta*
GetTicks GAP GAP - deltaMode มีข้อมูลนี้อยู่แต่ไม่สมบูรณ์ มีการพูดคุยเกี่ยวกับการใช้ WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017
GetScrollByPage GAP GAP - deltaMode มีข้อมูลนี้อยู่แต่ไม่สมบูรณ์ มีการพูดคุยเกี่ยวกับการใช้ WheelEvent.deltaMode API: https://github.com/w3c/uievents/issues/181#issuecomment-537811017

PPB_KeyboardInputEvent

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง SDL KeyboardEvent
GetKeyCode SDL KeyboardEvent.keyCode
GetCharacterText SDL KeyboardEvent.key
GetCode SDL KeyboardEvent.code

PPB_TouchInputEvent

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง GAP CompositionEvent
GetText GAP CompositionEvent.data
GetSegmentNumber GAP GAP - ไม่มีรายการที่เทียบเท่าโดยตรง ข้อมูลนี้อาจดึงมาจาก CompositionEvent.data
GetSegmentOffset GAP GAP - ไม่มีรายการที่เทียบเท่าโดยตรง
GetTargetSegment GAP GAP - ไม่มีค่าเทียบเท่าโดยตรง
GetSelection GAP GAP - ไม่มีค่าเทียบเท่าโดยตรง

PPB_Instance

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
BindGraphics SDL Canvas.getContext (ไม่เกี่ยวข้องเนื่องจากมีการเชื่อมโยงโดยอัตโนมัติ)
IsFullFrame GAP GAP - ไม่เทียบเท่ากับเครื่องจัดการประเภท MIME แอป NaCl สามารถลงทะเบียนเพื่อจัดการประเภท MIME บางประเภทและเป็นเจ้าของเอกสารทั้งฉบับได้
DidCreate ไม่มี &lt;Element&gt;[key] การเข้าถึง DOM ทั่วไปช่วยให้คุณกรองแอตทริบิวต์ของแท็กได้
DidDestroy ไม่มี ไม่มี ไม่ได้ทริกเกอร์สําหรับ NaCl
DidChangeView ไม่มี เหตุการณ์ "resize" ขององค์ประกอบ
DidChangeFocus ไม่มี เหตุการณ์ "focus", "focusin", "focusout" ขององค์ประกอบ
HandleDocumentLoad ไม่มี GAP - ไม่มีวิธีลงทะเบียนเป็นเครื่องจัดการประเภท MIME คุณสามารถตั้งค่าโมดูล NaCl ผ่านแอป + รายการไฟล์ Manifest เพื่อจัดการกับประเภท MIME บางประเภทได้

PPB_MediaStreamAudioTrack

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง GAP การจับภาพ Canvas Canvas Capture ช่วยให้คุณสามารถแนะนำเฟรมวิดีโอแบบเป็นโปรแกรมได้
กำหนดค่า 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง ไม่มี ส่วนใหญ่ไม่เกี่ยวข้อง เวิร์กเกอร์จะได้รับลูปเหตุการณ์โดยนัย
GetForMainThread ไม่มี ส่วนใหญ่ไม่เกี่ยวข้อง เวิร์กเกอร์จะได้รับลูปเหตุการณ์โดยนัย
GetCurrent ไม่มี ส่วนใหญ่แล้วผู้ปฏิบัติงานจะเห็นลูปเหตุการณ์แบบไม่เจาะจงปลายทาง
AttachToCurrentThread ไม่มี ส่วนใหญ่ไม่เกี่ยวข้อง เวิร์กเกอร์จะได้รับลูปเหตุการณ์โดยนัย
เรียกใช้ ไม่มี ส่วนใหญ่แล้วผู้ปฏิบัติงานจะเห็นลูปเหตุการณ์แบบไม่เจาะจงปลายทาง
PostWork ไม่มี ส่วนใหญ่แล้วผู้ปฏิบัติงานจะเห็นลูปเหตุการณ์แบบไม่เจาะจงปลายทาง
PostQuit ไม่มี ส่วนใหญ่แล้วผู้ปฏิบัติงานจะเห็นลูปเหตุการณ์แบบไม่เจาะจงปลายทาง

PPB_Messaging

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
PostMessage ไม่มี Window.postMessage
RegisterMessageHandler ไม่มี Window.addEventListener
UnregisterMessageHandler ไม่มี Window.removeEventListener

PPB_MouseCursor

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
SetCursor SDL Element.style.cursor รองรับเคอร์เซอร์หุ้นชุดเดียวกัน คุณสามารถใช้เคอร์เซอร์ที่กำหนดเองกับ URL(..) ได้ เคอร์เซอร์ที่กำหนดเองแบบไดนามิกทำได้ด้วย URI ข้อมูล CSS3 รองรับการระบุฮอตสปอต

PPB_MouseLock

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
LockMouse SDL Element.requestPointerLock
UnlockMouse SDL Element.exitPointerLock

PPB_OpenGLES2

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
หลายวิธี OpenGLES ใกล้กับ WebGL 1.0 ในฟังก์ชันการทำงาน
x OffscreenCanvas

PPB_TextInputController

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
SetTextInputType GAP GAP - อาจมีการเติมโดย Input Method Editor API นักพัฒนาซอฟต์แวร์บางรายต้องการให้คำแนะนำในลักษณะนี้ หรือโดยเฉพาะอย่างยิ่ง ความสามารถในการสกัดกั้นและแสดงเหตุการณ์ / เอาต์พุต IME ในบรรทัดภายใน Canvas ได้
UpdateCaretPosition GAP GAP - อาจมีการเติมโดย Input Method Editor API https://www.w3.org/TR/ime-api/
CancelCompositionText GAP GAP - อาจมีการเติมโดย Input Method Editor API https://www.w3.org/TR/ime-api/
UpdateSurroundingText GAP GAP - อาจมีการเติมโดย Input Method Editor API https://www.w3.org/TR/ime-api/

PPB_URLLoader

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง embind 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 เนื้อความ* (คำตอบคือเนื้อหา)
FinishStreamingToFile embind GAP - ไม่มีรายการที่เทียบเท่าโดยตรง ทั้ง XMLHttpRequest และ Fetch ถือว่าสตรีมไปยังหน่วยความจำแทนที่จะสตรีมไปยังพื้นที่เก็บข้อมูลโดยตรง
ปิด embind XMLHttpRequest.abort
GAP Fetch API: AbortSignal และ AbortController

PPB_URLRequestInfo

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง embind XMLHttpRequest
embind คำขอดึงข้อมูล
SetProperty GAP GAP - ไม่มีบริการเทียบเท่าโดยตรงสำหรับ XMLHttpRequest XMLHttpRequest ไม่มีวิธีโดยตรงในการจำกัดตามคำขอหลังจากการเปลี่ยนเส้นทาง สตรีมไปยังไฟล์ ตั้งค่านโยบายผู้อ้างอิงหรือข้อมูลรับรอง
embind ส่งคำขอ*
AppendDataToBody embind XMLHttpRequest.send GAP - เนื้อหาทั้งสองต้องประกอบไปด้วยตัวเครื่องทั้งหมด ไม่ใช่เป็นส่วนๆ
embind fetch(.., options:body)
AppendFileToBody GAP Googlebot() อัปโหลดสตรีมมิง https://www.chromestatus.com/features/5274139738767360
ไม่มี &lt;form&gt; และอ่านด้วย FileReader และอัปโหลดก็ได้ แต่จะคล้ายๆ กับ AppendDataToBody มากกว่า

PPB_URLResponseInfo

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
GetProperty embind XMLHttpRequest.getAllResponseHeaders + others
embind ดึงข้อมูลคำตอบ*
GetBodyAsFileRef embind ดึงข้อมูลการตอบกลับ (เนื้อหา) .blob() ถือว่าเลเยอร์พื้นที่เก็บข้อมูลเพิ่มประสิทธิภาพการโอน

PPB_Var

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
VarFromUtf8 embind TextDecoder.decode
VarToUtf8 embind TextEncoder.encode
VarFromResource ไม่มี ไม่มี
VarToResource ไม่มี ไม่มี

PPB_VarArray

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
ดาวน์โหลด embind อาร์เรย์[i]
ตั้งค่า embind อาร์เรย์[i] = x
GetLength embind Array.length
SetLength embind Array.length = n

PPB_VarArrayBuffer

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง embind ArrayBuffer(n) ใหม่
ByteLength embind ArrayBuffer.byteLength
แผนที่ GAP GAP - ไม่มีค่าเทียบเท่าโดยตรง โมดูล Asm.js / Wasm ไม่สามารถแมปส่วนของ ArrayBuffer นอกเหนือจากกองหน่วยความจำเชิงเส้นเดียว ในอนาคต ความทรงจำหลายรายการหรือการแมปความทรงจำอาจช่วยปรับปรุงเรื่องนี้ได้
ยกเลิกการแมป GAP GAP - ไม่มีรายการที่เทียบเท่าโดยตรง

PPB_VarDictionary

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง embind {}
ดาวน์โหลด embind <Object>[i]
ตั้งค่า embind <Object>[i] = x
ลบ embind ลบ <ออบเจ็กต์>[i]
HasKey embind x ใน <Object>
GetKeys embind for (k ใน <Object>) {} ไม่มีค่าเทียบเท่า แต่สิ่งนั้นเป็นสิ่งที่สร้างขึ้นได้

PPB_VideoDecoder

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง GAP 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 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 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.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
RecyclePicture GAP GAP - จัดการด้วย 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 ที่เสนอ API นี้จะเรียกว่า Flush() แต่ยังคงมีการหารือกันอยู่ว่าจะเรียงลำดับอย่างไรในส่วนที่เกี่ยวข้องกับการถอดรหัสการเรียก 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 ที่เสนอโดยทำลายอินสแตนซ์ VideoDecoder แล้วสร้างอินสแตนซ์ใหม่ วิธีการนี้จะไม่มีประสิทธิภาพเท่ากับวิธีการรีเซ็ตโดยเฉพาะ แต่ความหมายของ API สำหรับการรีเซ็ต() ยังคงมีการกล่าวถึงอยู่ https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming

PPB_VideoEncoder

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง GAP GAP - จัดการด้วย WebCodecs API ที่เสนอโดยใช้ VideoEncoder()
GetSupportedProfiles GAP GAP (บางส่วน) - navigator.mediaCapabilities.encodingInfo() โดยต้องเลือกโปรไฟล์ที่รองรับทีละรายการ
เริ่มต้น GAP GAP - ได้รับการจัดการด้วย WebCodecs API ที่เสนอโดยใช้พารามิเตอร์การเริ่มต้น VideoEncoder()
GetFramesRequired GAP GAP - ไม่มีค่าเทียบเท่า ไม่น่าจะมีการแสดงพูลเฟรมที่ Web Codecs API ใช้ภายใน
GetFrameCodedSize GAP GAP - ไม่มีค่าเทียบเท่า เป็นไปได้ยากที่ Web Codecs API ที่ใช้ภายในจะถูกเปิดเผย
GetVideoFrame GAP GAP - จะจัดการด้วย WebCodecs API ที่เสนอโดยใช้ ReadableStream.pipeThrough(VideoEncoder) ซึ่งจะเข้ารหัสข้อมูลในสตรีมที่อ่านได้โดยตรงแทนที่จะจับเฟรมเดียวเพื่อเติมข้อมูลก่อนเข้ารหัส
เข้ารหัส GAP GAP - จัดการด้วย WebCodecs API ที่เสนอโดยใช้ ReadableStream.pipeThrough(VideoEncoder)
GetBitstreamBuffer GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ การออกแบบปัจจุบันจะผ่านบัฟเฟอร์บิตสตรีมที่เข้ารหัสซึ่งส่งผ่านผ่านโดยอัตโนมัติ ปัจจุบัน WebCodecs API ถือว่าสามารถคัดลอกบัฟเฟอร์บิตสตรีมแทนการรวมไว้ด้วยกันได้ จึงไม่จำเป็นต้องรีไซเคิล
RecycleBitstreamBuffer GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ การออกแบบในปัจจุบันจะนำบัฟเฟอร์ใหม่ไปรีไซเคิลโดยอัตโนมัติเพื่อให้กระบวนการเข้ารหัสดำเนินต่อไป ข้อมูลนี้ไม่น่าจะมีการเปลี่ยนแปลงในอนาคตเนื่องจากผลกระทบด้านประสิทธิภาพมีน้อยลง
RequestEncodingParametersChange GAP GAP - ได้รับการจัดการโดย Web Codecs API ที่เสนอ พารามิเตอร์บางตัวสามารถเปลี่ยนแปลงได้ทันที แต่บางรายการก็ต้องถอดโปรแกรมเปลี่ยนไฟล์ออก
ปิด GAP GAP - จัดการด้วย WebCodecs API ที่เสนอโดยใช้ VideoEncoder.Close()

PPB_VideoFrame

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
GetTimestamp GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ
SetTimestamp GAP GAP - ได้รับการจัดการด้วย WebCodecs API ที่เสนอ
GetFormat GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ
GetSize GAP GAP - จัดการด้วย WebCodecs API ที่เสนอ
GetDataBuffer GAP GAP - ได้รับการจัดการด้วย WebCodecs API ที่เสนอ
GetDataBufferSize GAP GAP - ได้รับการจัดการด้วย WebCodecs API ที่เสนอ

PPB_View

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
กราฟิก 3 มิติของบริบทสูญหาย SDL Canvas "webglcontextlost" กิจกรรม

PPP_InputEvent

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
HandleInputEvent SDL Element.addEventListener

PPP_Instance

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
DidCreate ไม่มี &lt;Element&gt;[key] การเข้าถึง DOM ทั่วไปช่วยให้คุณกรองแอตทริบิวต์ของแท็กได้
DidDestroy ไม่มี ไม่มี ไม่ได้ทริกเกอร์สําหรับ NaCl
DidChangeView ไม่มี เหตุการณ์ "resize" ขององค์ประกอบ
DidChangeFocus ไม่มี เหตุการณ์ "focus", "focusin", "focusout" ขององค์ประกอบ
HandleDocumentLoad ไม่มี GAP - ไม่มีวิธีลงทะเบียนเป็นเครื่องจัดการประเภท MIME คุณสามารถตั้งค่าโมดูล NaCl ผ่านแอป + รายการไฟล์ Manifest เพื่อจัดการกับประเภท MIME บางประเภทได้

PPP_MessageHandler

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
HandleMessage embind "message" ใน MessagePort กิจกรรม "ข้อความ" ในหน้าต่าง กิจกรรม
HandleBlockingMessage ไม่มี GAP - ไม่มีรายการที่เทียบเท่าโดยตรง การซิงค์ข้อมูลที่คล้ายกันจะทำได้จากเทรดหลักด้วย Atomics.Wait เราได้เพิ่มตัวเลือกนี้เพื่อรองรับการจําลอง API ของปลั๊กอินแบบซิงค์

PPP_Messaging

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
HandleMessage embind "message" ใน MessagePort กิจกรรม "ข้อความ" ในหน้าต่าง กิจกรรม

PPP_MouseLock

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
MouseLockLost SDL เหตุการณ์ "pointerlockchange", "pointerlockerror" ขององค์ประกอบ

PPAPI (แอป)

PPB_HostResolver

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง x GAP GAP (บางส่วน) - ไม่มีรายการที่เทียบเท่าโดยตรง
แก้ปัญหา x GAP GAP (บางส่วน) - ไม่มีรายการที่เทียบเท่าโดยตรง
GetCanonicalName x GAP GAP (บางส่วน) - ไม่มีค่าเทียบเท่าโดยตรง
GetNetAddressCount x GAP GAP (บางส่วน) - ไม่มีค่าเทียบเท่าโดยตรง
GetNetAddress x GAP GAP (บางส่วน) - ไม่มีรายการที่เทียบเท่าโดยตรง

PPB_NetAddress

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
CreateFromIPv4Address x GAP GAP (บางส่วน) - ไม่มีรายการที่เทียบเท่าโดยตรง
CreateFromIPv6Address x GAP GAP (บางส่วน) - ไม่มีค่าเทียบเท่าโดยตรง
GetFamily x GAP GAP (บางส่วน) - ไม่มีค่าเทียบเท่าโดยตรง
DescribeAsString x GAP GAP (บางส่วน) - ไม่มีรายการที่เทียบเท่าโดยตรง
DescribeAsIPv4Address x GAP GAP (บางส่วน) - ไม่มีค่าเทียบเท่าโดยตรง
DescribeAsIPv6Address x GAP GAP (บางส่วน) - ไม่มีค่าเทียบเท่าโดยตรง

PPB_NetworkList

เมธอด PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ 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 คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
สร้าง x GAP GAP - ไม่มีค่าเทียบเท่าโดยตรง
UpdateNetworkList x GAP GAP - ไม่มีค่าเทียบเท่าโดยตรง

PPB_NetworkProxy

วิธีการ PPAPI คาดว่าเป็นเทรด เอ็มสคริปต์ Web API ข้อจำกัด
GetProxyForURL x GAP GAP - ไม่มีรายการที่เทียบเท่าโดยตรง

PPB_TCPSocket และ PPB_UDPSocket

ไม่มีการแมปแบบ 1:1 โดยตรงสำหรับการย้ายข้อมูล แต่เราได้สรุปบางส่วน สถานการณ์ของผู้ใช้ด้านล่างนี้และเส้นทางการย้ายข้อมูลที่แนะนำ

กรณีการใช้งาน คำแนะนำ
การแชร์หน้าจอ getDisplayMedia และ WebRTC ( การสาธิต)
กำลังโหลดจาก เซิร์ฟเวอร์ภายในเพื่อลดการใช้แบนด์วิดท์ XHR, Fetch, Streams, Service Worker, API แคช
กำลังโหลดจาก อินสแตนซ์ในเครื่องของเว็บแอป / การเชื่อมต่อกับอินสแตนซ์ในเครื่องของเว็บแอป WebRTC
แชท WebSocket*
เรียลไทม์ การสื่อสารด้วยเสียง/วิดีโอ WebRTC
การทำงานร่วมกัน WebSocket*
เกมผู้เล่นหลายคนแบบเรียลไทม์ WebTransport** เว้นแต่จะเป็น P2P ในกรณีนี้จะเป็น WebRTC (หรือ WebTransport ผ่าน RTCIceTransport)
เรียลไทม์ สตรีมมิงแบบอินเทอร์แอกทีฟ WebTransport**
การสื่อสารกับเซิร์ฟเวอร์เดิม พร็อกซีเซิร์ฟเวอร์หรือมิดเดิลแวร์ที่จะทำการแปลงโปรโตคอล ข้อเสนอแนะสำหรับ bit.ly/network-api-gaps

*: หรือ WebTransport ในอนาคต

**: ดูความพร้อมให้บริการได้ที่ chromestatus