refresh date: 2026-09-25 robots: noindex
คำอธิบาย
ใช้ chrome.tabCapture API เพื่อโต้ตอบกับสตรีมสื่อของแท็บ
สิทธิ์
tabCaptureภาพรวม
chrome.tabCapture API ช่วยให้คุณเข้าถึง MediaStream ที่มีวิดีโอและเสียงของแท็บปัจจุบันได้ โดยจะเรียกใช้ได้หลังจากที่ผู้ใช้เรียกใช้ส่วนขยายเท่านั้น เช่น โดยการคลิกปุ่มดำเนินการของส่วนขยาย ซึ่งคล้ายกับลักษณะการทำงานของสิทธิ์ activeTab
การคงเสียงของระบบไว้
เมื่อได้รับ MediaStream สำหรับแท็บ ระบบจะไม่เล่นเสียงในแท็บนั้นให้ผู้ใช้ฟังอีกต่อไป ซึ่งคล้ายกับลักษณะการทำงานของฟังก์ชัน getDisplayMedia() เมื่อตั้งค่าแฟล็ก suppressLocalAudioPlayback เป็น "จริง"
หากต้องการเล่นเสียงให้ผู้ใช้ฟังต่อ ให้ใช้สิ่งต่อไปนี้
const output = new AudioContext();
const source = output.createMediaStreamSource(stream);
source.connect(output.destination);
การดำเนินการนี้จะสร้าง AudioContext ใหม่และเชื่อมต่อเสียงของ MediaStream ของแท็บกับปลายทางเริ่มต้น
รหัสสตรีม
การเรียกใช้ chrome.tabCapture.getMediaStreamId จะแสดงรหัสสตรีม หากต้องการเข้าถึง MediaStream จากรหัสดังกล่าวในภายหลัง ให้ใช้โค้ดต่อไปนี้
navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
video: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
});
ข้อจำกัดการใช้งาน
หลังจากเรียกใช้ getMediaStreamId() แล้ว จะมีข้อจำกัดเกี่ยวกับตำแหน่งที่สามารถใช้รหัสสตรีมที่แสดงผลได้ ดังนี้
- หากระบุ
consumerTabIdการเรียกgetUserMedia()จะใช้รหัสดังกล่าวได้ในเฟรมใดก็ได้ในแท็บที่ระบุซึ่งมีต้นทางด้านความปลอดภัยเดียวกัน - หากไม่ได้ระบุไว้ ตั้งแต่ Chrome 116 เป็นต้นไป คุณจะใช้รหัสในเฟรมใดก็ได้ที่มีต้นทางด้านความปลอดภัยเดียวกันในกระบวนการแสดงผลเดียวกันกับผู้เรียก ซึ่งหมายความว่ารหัสสตรีมที่ได้รับใน Service Worker จะใช้ในเอกสารนอกหน้าจอได้
ก่อน Chrome 116 เมื่อไม่ได้ระบุ consumerTabId รหัสสตรีมจะถูกจำกัดทั้งต้นทางด้านความปลอดภัย กระบวนการแสดงผล และเฟรมการแสดงผลของผู้โทร
ดูข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ chrome.tabCapture API ได้ที่การบันทึกเสียงและการจับภาพหน้าจอ ซึ่งจะแสดงวิธีใช้ tabCapture และ API ที่เกี่ยวข้องเพื่อแก้ปัญหากรณีการใช้งานที่พบบ่อยหลายกรณี
ประเภท
CaptureInfo
พร็อพเพอร์ตี้
-
เต็มหน้าจอ
บูลีน
องค์ประกอบในแท็บที่กำลังจับภาพอยู่ในโหมดเต็มหน้าจอหรือไม่
-
สถานะ
สถานะการจับภาพใหม่ของแท็บ
-
tabId
ตัวเลข
รหัสของแท็บที่สถานะมีการเปลี่ยนแปลง
CaptureOptions
พร็อพเพอร์ตี้
-
เสียง
บูลีน ไม่บังคับ
-
audioConstraints
MediaStreamConstraint ไม่บังคับ
-
วิดีโอ
บูลีน ไม่บังคับ
-
videoConstraints
MediaStreamConstraint ไม่บังคับ
GetMediaStreamOptions
พร็อพเพอร์ตี้
-
consumerTabId
number ไม่บังคับ
รหัสแท็บที่ไม่บังคับของแท็บซึ่งจะเรียกใช้
getUserMedia()ในภายหลังเพื่อใช้สตรีม หากไม่ได้ระบุไว้ ส่วนขยายที่เรียกใช้จะใช้สตรีมที่ได้เท่านั้น สตรีมจะใช้ได้เฉพาะกับเฟรมในแท็บที่ระบุซึ่งมีต้นทางด้านความปลอดภัยตรงกับต้นทางของแท็บผู้ใช้ ต้นทางของแท็บต้องเป็นต้นทางที่ปลอดภัย เช่น HTTPS -
targetTabId
number ไม่บังคับ
รหัสแท็บ (ไม่บังคับ) ของแท็บที่จะบันทึก หากไม่ได้ระบุ ระบบจะเลือกแท็บที่ใช้งานอยู่ในปัจจุบัน เฉพาะแท็บที่ส่วนขยายได้รับสิทธิ์
activeTabเท่านั้นที่ใช้เป็นแท็บเป้าหมายได้
MediaStreamConstraint
พร็อพเพอร์ตี้
-
จำเป็น
ออบเจ็กต์
-
ไม่บังคับ
object ไม่บังคับ
TabCaptureState
ค่าแจกแจง
"pending"
"ใช้งานอยู่"
"หยุด"
"error"
เมธอด
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
จับภาพพื้นที่ที่มองเห็นได้ของแท็บที่ใช้งานอยู่ในปัจจุบัน การจับภาพจะเริ่มได้เฉพาะในแท็บที่ใช้งานอยู่ในปัจจุบันหลังจากที่เรียกใช้ส่วนขยายแล้ว ซึ่งคล้ายกับวิธีการทำงานของ activeTab ระบบจะคงการบันทึกไว้ตลอดการนำทางหน้าเว็บภายในแท็บ และจะหยุดเมื่อปิดแท็บหรือส่วนขยายปิดสตรีมสื่อ
พารามิเตอร์
-
ตัวเลือก
กำหนดค่าสตรีมสื่อที่แสดงผล
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackจะมีลักษณะดังนี้(stream: LocalMediaStream) => void
-
สตรีม
LocalMediaStream
-
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(
callback?: function,
): Promise<CaptureInfo[]>
แสดงรายการแท็บที่ขอการจับภาพหรือกำลังจับภาพอยู่ เช่น สถานะ != หยุด และสถานะ != ข้อผิดพลาด ซึ่งจะช่วยให้ส่วนขยายแจ้งผู้ใช้ได้ว่ามีการจับภาพแท็บอยู่แล้ว ซึ่งจะทำให้การจับภาพแท็บใหม่ไม่สำเร็จ (หรือเพื่อป้องกันคำขอที่ซ้ำซ้อนสำหรับแท็บเดียวกัน)
พารามิเตอร์
-
callback
function ไม่บังคับ
พารามิเตอร์
callbackจะมีลักษณะดังนี้(result: CaptureInfo[]) => void
-
ผลลัพธ์
-
การคืนสินค้า
-
Promise<CaptureInfo[]>
Chrome 116 ขึ้นไปแสดงผล Promise ซึ่งจะได้รับการแก้ไขด้วย CaptureInfo[] สำหรับแท็บที่บันทึกไว้
ระบบรองรับ Promise สำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้ Callback
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
callback?: function,
): Promise<string>
สร้างรหัสสตรีมเพื่อบันทึกแท็บเป้าหมาย คล้ายกับเมธอด chrome.tabCapture.capture() แต่จะแสดงรหัสสตรีมสื่อแทนสตรีมสื่อไปยังแท็บผู้ใช้
พารามิเตอร์
-
ตัวเลือก
GetMediaStreamOptions ไม่บังคับ
-
callback
function ไม่บังคับ
พารามิเตอร์
callbackจะมีลักษณะดังนี้(streamId: string) => void
-
streamId
สตริง
-
การคืนสินค้า
-
Promise<string>
Chrome 116 ขึ้นไปแสดงผล Promise ซึ่งจะได้รับการแก้ไขด้วยผลลัพธ์ หากสำเร็จ ผลลัพธ์จะเป็นสตริงทึบแสงที่ส่งไปยัง
getUserMedia()API เพื่อสร้างสตรีมสื่อที่สอดคล้องกับแท็บเป้าหมายได้streamIdที่สร้างขึ้นจะใช้ได้เพียงครั้งเดียวและจะหมดอายุหลังจากผ่านไป 2-3 วินาทีหากไม่ได้ใช้ระบบรองรับ Promise สำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้ Callback
กิจกรรม
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
เหตุการณ์เริ่มทำงานเมื่อสถานะการจับภาพของแท็บมีการเปลี่ยนแปลง ซึ่งช่วยให้ผู้เขียนส่วนขยายติดตามสถานะการจับภาพของแท็บเพื่อซิงค์องค์ประกอบ UI เช่น การดำเนินการในหน้าเว็บได้
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackจะมีลักษณะดังนี้(info: CaptureInfo) => void
-
ข้อมูล
-