คำอธิบาย
ใช้ chrome.runtime
API เพื่อดึงข้อมูล Service Worker, แสดงรายละเอียดเกี่ยวกับไฟล์ Manifest รวมถึงรับฟังและตอบสนองต่อเหตุการณ์ในวงจรของส่วนขยาย นอกจากนี้ คุณยังใช้ API นี้เพื่อแปลงเส้นทางสัมพัทธ์ของ URL เป็น URL ที่มีคุณสมบัติครบถ้วนได้ด้วย
ภาพรวม
Runtime API มีเมธอดที่รองรับฟังก์ชันการทำงานหลายด้านที่ส่วนขยายของคุณใช้ได้ ดังนี้
- การส่งผ่านข้อความ
- ส่วนขยายของคุณสามารถสื่อสารกับบริบทต่างๆ ภายในส่วนขยาย รวมถึงกับส่วนขยายอื่นๆ ได้โดยใช้วิธีการและเหตุการณ์ต่อไปนี้ connect(), onConnect, onConnectExternal, sendMessage(), onMessage และ onMessageExternal นอกจากนี้ ส่วนขยายยังส่งข้อความไปยังแอปพลิเคชันดั้งเดิมในอุปกรณ์ของผู้ใช้ได้โดยใช้ connectNative() และ sendNativeMessage()
- การเข้าถึงข้อมูลเมตาของส่วนขยายและแพลตฟอร์ม
- วิธีเหล่านี้ช่วยให้คุณดึงข้อมูลเมตาที่เฉพาะเจาะจงหลายรายการเกี่ยวกับส่วนขยายและแพลตฟอร์มได้ เมธอดในหมวดหมู่นี้ ได้แก่ getManifest() และ getPlatformInfo()
- การจัดการวงจรและตัวเลือกของส่วนขยาย
- พร็อพเพอร์ตี้เหล่านี้ช่วยให้คุณดำเนินการเมตาบางอย่างในส่วนขยายและแสดงหน้าตัวเลือกได้ วิธีการและเหตุการณ์ในหมวดหมู่นี้ ได้แก่ onInstalled onStartup openOptionsPage() reload() requestUpdateCheck() และ setUninstallURL()
- ยูทิลิตีตัวช่วย
- เมธอดเหล่านี้มีประโยชน์ เช่น การแปลงการแสดงทรัพยากรภายในเป็น รูปแบบภายนอก เมธอดในหมวดหมู่นี้ ได้แก่ getURL()
- ยูทิลิตีโหมดคีออสก์
- วิธีการเหล่านี้ใช้ได้เฉพาะใน ChromeOS และมีไว้เพื่อรองรับการใช้งานคีออสก์เป็นหลัก เมธอดในหมวดหมู่นี้ ได้แก่ restart และ restartAfterDelay
สิทธิ์
เมธอดส่วนใหญ่ใน Runtime API ไม่ต้องใช้สิทธิ์ใดๆ ยกเว้น sendNativeMessage และ connectNative ซึ่งต้องใช้สิทธิ์ nativeMessaging
ไฟล์ Manifest
ตัวอย่างต่อไปนี้แสดงวิธีกำหนดสิทธิ์ nativeMessaging
ในไฟล์ Manifest
manifest.json:
{
"name": "My extension",
...
"permissions": [
"nativeMessaging"
],
...
}
กรณีการใช้งาน
เพิ่มรูปภาพลงในหน้าเว็บ
หากต้องการให้หน้าเว็บเข้าถึงชิ้นงานที่โฮสต์ในโดเมนอื่นได้ หน้าเว็บนั้นต้องระบุ URL แบบเต็มของทรัพยากร
(เช่น <img src="https://example.com/logo.png">
) เช่นเดียวกับการฝังชิ้นงานส่วนขยายใน
หน้าเว็บ ความแตกต่าง 2 อย่างคือต้องเปิดเผยเนื้อหาของส่วนขยายเป็นทรัพยากรที่เข้าถึงได้จากเว็บ และโดยปกติแล้ว สคริปต์เนื้อหาจะเป็นผู้รับผิดชอบในการแทรกเนื้อหาของส่วนขยาย
ในตัวอย่างนี้ ส่วนขยายจะเพิ่ม logo.png
ลงในหน้าที่สคริปต์
เนื้อหาแทรกโดยใช้ runtime.getURL()
เพื่อสร้าง URL ที่มีคุณสมบัติครบถ้วน แต่ก่อนอื่นต้องประกาศชิ้นงานเป็นทรัพยากรที่เข้าถึงได้บนเว็บในไฟล์ Manifest
manifest.json:
{
...
"web_accessible_resources": [
{
"resources": [ "logo.png" ],
"matches": [ "https://*/*" ]
}
],
...
}
content.js:
{ // Block used to avoid setting global variables
const img = document.createElement('img');
img.src = chrome.runtime.getURL('logo.png');
document.body.append(img);
}
ส่งข้อมูลจาก Service Worker ไปยัง Content Script
โดยทั่วไปแล้ว สคริปต์เนื้อหาของส่วนขยายมักต้องใช้ข้อมูลที่จัดการโดยส่วนอื่นของส่วนขยาย เช่น Service Worker เช่นเดียวกับหน้าต่างเบราว์เซอร์ 2 หน้าต่างที่เปิดไปยังหน้าเว็บเดียวกัน บริบททั้ง 2 นี้ไม่สามารถเข้าถึงค่าของกันและกันได้โดยตรง แต่ส่วนขยายสามารถใช้การส่งผ่านข้อความเพื่อประสานงานในบริบทต่างๆ เหล่านี้ได้
ในตัวอย่างนี้ Content Script ต้องการข้อมูลบางอย่างจาก Service Worker ของส่วนขยายเพื่อ
เริ่มต้น UI หากต้องการรับข้อมูลนี้ ระบบจะส่งข้อความ get-user-data
ไปยัง Service Worker และ
Service Worker จะตอบกลับด้วยสำเนาข้อมูลของผู้ใช้
content.js:
// 1. Send a message to the service worker requesting the user's data
chrome.runtime.sendMessage('get-user-data', (response) => {
// 3. Got an asynchronous response with the data from the service worker
console.log('received user data', response);
initializeUI(response);
});
background.js:
// Example of a simple user data object
const user = {
username: 'demo-user'
};
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
// 2. A page requested user data, respond with a copy of `user`
if (message === 'get-user-data') {
sendResponse(user);
}
});
รวบรวมความคิดเห็นเกี่ยวกับการถอนการติดตั้ง
ส่วนขยายจำนวนมากใช้แบบสำรวจหลังการถอนการติดตั้งเพื่อทำความเข้าใจว่าส่วนขยายจะให้บริการแก่ผู้ใช้ได้ดียิ่งขึ้นและปรับปรุงการรักษาผู้ใช้ได้อย่างไร ตัวอย่างต่อไปนี้แสดงวิธีเพิ่มฟังก์ชันนี้
background.js:
chrome.runtime.onInstalled.addListener(details => {
if (details.reason === chrome.runtime.OnInstalledReason.INSTALL) {
chrome.runtime.setUninstallURL('https://example.com/extension-survey');
}
});
ตัวอย่างส่วนขยาย
ดูตัวอย่าง Runtime API เพิ่มเติมได้ที่ตัวอย่าง Manifest V3 - ทรัพยากรที่เข้าถึงได้จากเว็บ
ประเภท
ContextFilter
ตัวกรองที่ใช้จับคู่กับบริบทของส่วนขยายบางอย่าง บริบทที่ตรงกันต้องตรงกับตัวกรองที่ระบุทั้งหมด ส่วนตัวกรองที่ไม่ได้ระบุจะตรงกับบริบทที่มีอยู่ทั้งหมด ดังนั้น ตัวกรอง `{}` จะตรงกับบริบทที่มีอยู่ทั้งหมด
พร็อพเพอร์ตี้
-
contextIds
string[] ไม่บังคับ
-
contextTypes
ContextType[] ไม่บังคับ
-
documentIds
string[] ไม่บังคับ
-
documentOrigins
string[] ไม่บังคับ
-
documentUrls
string[] ไม่บังคับ
-
frameIds
number[] ไม่บังคับ
-
ไม่ระบุตัวตน
บูลีน ไม่บังคับ
-
tabIds
number[] ไม่บังคับ
-
windowIds
number[] ไม่บังคับ
ContextType
ค่าแจกแจง
"TAB"
ระบุประเภทบริบทเป็นแท็บ
"POPUP"
ระบุประเภทบริบทเป็นหน้าต่างป๊อปอัปของส่วนขยาย
"BACKGROUND"
ระบุประเภทบริบทเป็น Service Worker
"OFFSCREEN_DOCUMENT"
ระบุประเภทบริบทเป็นเอกสารนอกหน้าจอ
"SIDE_PANEL"
ระบุประเภทบริบทเป็นแผงด้านข้าง
"DEVELOPER_TOOLS"
ระบุประเภทบริบทเป็นเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
ExtensionContext
บริบทที่โฮสต์เนื้อหาส่วนขยาย
พร็อพเพอร์ตี้
-
contextId
สตริง
ตัวระบุที่ไม่ซ้ำกันสำหรับบริบทนี้
-
contextType
ประเภทบริบทที่สอดคล้องกับข้อมูลนี้
-
documentId
สตริง ไม่บังคับ
UUID สำหรับเอกสารที่เชื่อมโยงกับบริบทนี้ หรือไม่ระบุหากบริบทนี้ไม่ได้โฮสต์ในเอกสาร
-
documentOrigin
สตริง ไม่บังคับ
แหล่งที่มาของเอกสารที่เชื่อมโยงกับบริบทนี้ หรือไม่ระบุหากบริบทไม่ได้โฮสต์ในเอกสาร
-
documentUrl
สตริง ไม่บังคับ
URL ของเอกสารที่เชื่อมโยงกับบริบทนี้ หรือไม่ระบุหากบริบทไม่ได้โฮสต์ในเอกสาร
-
frameId
ตัวเลข
รหัสของเฟรมสำหรับบริบทนี้ หรือ -1 หากบริบทนี้ไม่ได้โฮสต์ในเฟรม
-
ไม่ระบุตัวตน
บูลีน
บริบทเชื่อมโยงกับโปรไฟล์ไม่ระบุตัวตนหรือไม่
-
tabId
ตัวเลข
รหัสของแท็บสำหรับบริบทนี้ หรือ -1 หากบริบทนี้ไม่ได้โฮสต์ในแท็บ
-
windowId
ตัวเลข
รหัสของหน้าต่างสำหรับบริบทนี้ หรือ -1 หากบริบทนี้ไม่ได้โฮสต์ในหน้าต่าง
MessageSender
ออบเจ็กต์ที่มีข้อมูลเกี่ยวกับบริบทของสคริปต์ที่ส่งข้อความหรือคำขอ
พร็อพเพอร์ตี้
-
documentId
สตริง ไม่บังคับ
Chrome 106 ขึ้นไปUUID ของเอกสารที่เปิดการเชื่อมต่อ
-
documentLifecycle
สตริง ไม่บังคับ
Chrome 106 ขึ้นไปวงจรของเอกสารที่เปิดการเชื่อมต่อในขณะที่สร้างพอร์ต โปรดทราบว่าสถานะวงจรของเอกสารอาจเปลี่ยนแปลงไปตั้งแต่สร้างพอร์ต
-
frameId
หมายเลข ไม่บังคับ
เฟรมที่เปิดการเชื่อมต่อ 0 สำหรับเฟรมระดับบนสุด ค่าบวกสำหรับเฟรมย่อย ระบบจะตั้งค่านี้เมื่อมีการตั้งค่า
tab
เท่านั้น -
id
สตริง ไม่บังคับ
รหัสของส่วนขยายที่เปิดการเชื่อมต่อ (หากมี)
-
nativeApplication
สตริง ไม่บังคับ
Chrome 74 ขึ้นไปชื่อของแอปพลิเคชันดั้งเดิมที่เปิดการเชื่อมต่อ หากมี
-
origin
สตริง ไม่บังคับ
Chrome 80 ขึ้นไปต้นทางของหน้าเว็บหรือเฟรมที่เปิดการเชื่อมต่อ ซึ่งอาจแตกต่างกันไปตั้งแต่พร็อพเพอร์ตี้ URL (เช่น about:blank) หรืออาจเป็นแบบทึบแสง (เช่น iframe ที่แซนด์บ็อกซ์) ซึ่งจะเป็นประโยชน์ในการระบุว่าแหล่งที่มาเชื่อถือได้หรือไม่ในกรณีที่เราไม่สามารถบอกได้ทันทีจาก URL
-
แท็บ
แท็บ ไม่บังคับ
tabs.Tab
ที่เปิดการเชื่อมต่อ (หากมี) พร็อพเพอร์ตี้นี้จะแสดงเฉพาะเมื่อเปิดการเชื่อมต่อจากแท็บ (รวมถึง Content Script) และเฉพาะในกรณีที่ตัวรับเป็นส่วนขยาย ไม่ใช่แอป -
tlsChannelId
สตริง ไม่บังคับ
รหัสช่อง TLS ของหน้าเว็บหรือเฟรมที่เปิดการเชื่อมต่อ หากส่วนขยายขอและหากมี
-
URL
สตริง ไม่บังคับ
URL ของหน้าเว็บหรือเฟรมที่เปิดการเชื่อมต่อ หากผู้ส่งอยู่ใน iframe จะเป็น URL ของ iframe ไม่ใช่ URL ของหน้าที่โฮสต์ iframe
OnInstalledReason
เหตุผลที่ส่งเหตุการณ์นี้
ค่าแจกแจง
"install"
ระบุเหตุผลของเหตุการณ์เป็นการติดตั้ง
"update"
ระบุเหตุผลของเหตุการณ์เป็นการอัปเดตส่วนขยาย
"chrome_update"
ระบุเหตุผลของเหตุการณ์เป็นการอัปเดต Chrome
"shared_module_update"
ระบุเหตุผลของเหตุการณ์เป็นการอัปเดตโมดูลที่แชร์
OnRestartRequiredReason
เหตุผลที่ส่งเหตุการณ์ ใช้ "app_update" เมื่อต้องรีสตาร์ทเนื่องจากแอปพลิเคชันได้รับการอัปเดตเป็นเวอร์ชันใหม่กว่า "os_update" จะใช้เมื่อต้องรีสตาร์ทเนื่องจากเบราว์เซอร์/ระบบปฏิบัติการได้รับการอัปเดตเป็นเวอร์ชันใหม่กว่า "เป็นระยะ" จะใช้เมื่อระบบทำงานนานกว่าเวลาทำงานที่อนุญาตซึ่งตั้งค่าไว้ในนโยบายขององค์กร
ค่าแจกแจง
"app_update"
ระบุเหตุผลของเหตุการณ์เป็นการอัปเดตแอป
"os_update"
ระบุเหตุผลของเหตุการณ์เป็นการอัปเดตระบบปฏิบัติการ
"periodic"
ระบุเหตุผลของเหตุการณ์เป็นการรีสตาร์ทแอปเป็นระยะ
PlatformArch
สถาปัตยกรรมของตัวประมวลผลของเครื่อง
ค่าแจกแจง
"arm"
ระบุสถาปัตยกรรมของโปรเซสเซอร์เป็น arm
"arm64"
ระบุสถาปัตยกรรมของโปรเซสเซอร์เป็น arm64
"x86-32"
ระบุสถาปัตยกรรมของโปรเซสเซอร์เป็น x86-32
"x86-64"
ระบุสถาปัตยกรรมของโปรเซสเซอร์เป็น x86-64
"mips"
ระบุสถาปัตยกรรมของหน่วยประมวลผลเป็น mips
"mips64"
ระบุสถาปัตยกรรมของโปรเซสเซอร์เป็น mips64
"riscv64"
ระบุสถาปัตยกรรมของโปรเซสเซอร์เป็น riscv64
PlatformInfo
ออบเจ็กต์ที่มีข้อมูลเกี่ยวกับแพลตฟอร์มปัจจุบัน
พร็อพเพอร์ตี้
-
arch
สถาปัตยกรรมของตัวประมวลผลของเครื่อง
-
nacl_arch
PlatformNaclArch ไม่บังคับ
สถาปัตยกรรมไคลเอ็นต์ในระบบ ซึ่งอาจแตกต่างจาก arch ในบางแพลตฟอร์ม
-
os
ระบบปฏิบัติการที่ Chrome ทำงานอยู่
PlatformNaclArch
สถาปัตยกรรมไคลเอ็นต์ในระบบ ซึ่งอาจแตกต่างจาก arch ในบางแพลตฟอร์ม
ค่าแจกแจง
"arm"
ระบุสถาปัตยกรรมไคลเอ็นต์ดั้งเดิมเป็น arm
"x86-32"
ระบุสถาปัตยกรรมไคลเอ็นต์ดั้งเดิมเป็น x86-32
"x86-64"
ระบุสถาปัตยกรรมไคลเอ็นต์ดั้งเดิมเป็น x86-64
"mips"
ระบุสถาปัตยกรรมไคลเอ็นต์ดั้งเดิมเป็น mips
"mips64"
ระบุสถาปัตยกรรมไคลเอ็นต์ดั้งเดิมเป็น mips64
PlatformOs
ระบบปฏิบัติการที่ Chrome ทำงานอยู่
ค่าแจกแจง
"mac"
ระบุระบบปฏิบัติการ MacOS
"win"
ระบุระบบปฏิบัติการ Windows
"android"
ระบุระบบปฏิบัติการ Android
"cros"
ระบุระบบปฏิบัติการ Chrome
"linux"
ระบุระบบปฏิบัติการ Linux
"openbsd"
ระบุระบบปฏิบัติการ OpenBSD
Port
ออบเจ็กต์ที่อนุญาตให้มีการสื่อสารแบบ 2 ทางกับหน้าอื่นๆ ดูข้อมูลเพิ่มเติมได้ที่การเชื่อมต่อที่ใช้งานได้นาน
พร็อพเพอร์ตี้
-
ชื่อ
สตริง
ชื่อพอร์ตตามที่ระบุในการเรียกใช้
runtime.connect
-
onDisconnect
Event<functionvoidvoid>
เริ่มทำงานเมื่อพอร์ตถูกตัดการเชื่อมต่อจากปลายทางอื่นๆ ระบบอาจตั้งค่า
runtime.lastError
หากพอร์ตถูกตัดการเชื่อมต่อเนื่องจากข้อผิดพลาด หากปิดพอร์ตผ่านยกเลิกการเชื่อมต่อ ระบบจะทริกเกอร์เหตุการณ์นี้เฉพาะที่ปลายทางอีกด้าน ระบบจะทริกเกอร์เหตุการณ์นี้อย่างน้อย 1 ครั้ง (ดูอายุการใช้งานพอร์ตด้วย)ฟังก์ชัน
onDisconnect.addListener
มีลักษณะดังนี้(callback: function) => {...}
-
onMessage
Event<functionvoidvoid>
เหตุการณ์นี้จะเริ่มทำงานเมื่อปลายทางอีกด้านของพอร์ตเรียกใช้ postMessage
ฟังก์ชัน
onMessage.addListener
มีลักษณะดังนี้(callback: function) => {...}
-
ผู้ส่ง
MessageSender ไม่บังคับ
พร็อพเพอร์ตี้นี้จะมีเฉพาะในพอร์ตที่ส่งไปยังเครื่องมือฟัง onConnect / onConnectExternal / onConnectNative เท่านั้น
-
ยกเลิกการเชื่อมต่อ
เป็นโมฆะ
ถอดสายพอร์ตออกทันที การเรียกใช้
disconnect()
ในพอร์ตที่ยกเลิกการเชื่อมต่อแล้วจะไม่มีผลใดๆ เมื่อพอร์ตถูกยกเลิกการเชื่อมต่อ ระบบจะไม่ส่งเหตุการณ์ใหม่ไปยังพอร์ตนี้ฟังก์ชัน
disconnect
มีลักษณะดังนี้() => {...}
-
postMessage
เป็นโมฆะ
ส่งข้อความไปยังปลายทางอีกด้านของพอร์ต หากพอร์ตถูกยกเลิกการเชื่อมต่อ ระบบจะแสดงข้อผิดพลาด
ฟังก์ชัน
postMessage
มีลักษณะดังนี้(message: any) => {...}
-
ข้อความ
ใดๆ
Chrome 52 ขึ้นไปข้อความที่จะส่ง ออบเจ็กต์นี้ควรแปลงเป็น JSON ได้
-
RequestUpdateCheckStatus
ผลการตรวจสอบการอัปเดต
ค่าแจกแจง
"ถูกจำกัด"
ระบุว่าการตรวจสอบสถานะถูกจำกัด ซึ่งอาจเกิดขึ้นหลังจากตรวจสอบซ้ำๆ ในระยะเวลาอันสั้น
"no_update"
ระบุว่าไม่มีการอัปเดตที่พร้อมให้ติดตั้ง
"update_available"
ระบุว่ามีการอัปเดตที่พร้อมให้ติดตั้ง
พร็อพเพอร์ตี้
id
รหัสของส่วนขยาย/แอป
ประเภท
สตริง
lastError
มีข้อความแสดงข้อผิดพลาดหากการเรียกฟังก์ชัน API ไม่สำเร็จ หรือไม่ระบุไว้ โดยจะกำหนดไว้ภายในขอบเขตของ Callback ของฟังก์ชันนั้นเท่านั้น หากเกิดข้อผิดพลาด แต่ไม่ได้เข้าถึง runtime.lastError
ภายในโค้ดเรียกกลับ ระบบจะบันทึกข้อความไปยังคอนโซลซึ่งแสดงฟังก์ชัน API ที่ทำให้เกิดข้อผิดพลาด ฟังก์ชัน API ที่แสดงผล Promise จะไม่ตั้งค่าพร็อพเพอร์ตี้นี้
ประเภท
ออบเจ็กต์
พร็อพเพอร์ตี้
-
ข้อความ
สตริง ไม่บังคับ
รายละเอียดเกี่ยวกับข้อผิดพลาดที่เกิดขึ้น
เมธอด
connect()
chrome.runtime.connect(
extensionId?: string,
connectInfo?: object,
): Port
พยายามเชื่อมต่อ Listener ภายในส่วนขยาย (เช่น หน้าพื้นหลัง) หรือส่วนขยาย/แอปอื่นๆ ซึ่งมีประโยชน์สำหรับ Content Script ที่เชื่อมต่อกับกระบวนการของส่วนขยาย การสื่อสารระหว่างแอป/ส่วนขยาย และการรับส่งข้อความบนเว็บ โปรดทราบว่าการดำเนินการนี้ไม่ได้เชื่อมต่อกับ Listener ใดๆ ใน Content Script ส่วนขยายอาจเชื่อมต่อกับสคริปต์เนื้อหาที่ฝังอยู่ในแท็บผ่าน tabs.connect
พารามิเตอร์
-
extensionId
สตริง ไม่บังคับ
รหัสของส่วนขยายที่จะเชื่อมต่อ หากไม่ระบุ ระบบจะพยายามเชื่อมต่อกับส่วนขยายของคุณเอง ต้องระบุหากส่งข้อความจากหน้าเว็บสำหรับการรับส่งข้อความบนเว็บ
-
connectInfo
object ไม่บังคับ
-
includeTlsChannelId
บูลีน ไม่บังคับ
ระบุว่าจะส่งรหัสแชแนล TLS ไปยัง onConnectExternal สำหรับกระบวนการที่รอรับเหตุการณ์การเชื่อมต่อหรือไม่
-
ชื่อ
สตริง ไม่บังคับ
จะส่งไปยัง onConnect สำหรับกระบวนการที่รอรับเหตุการณ์การเชื่อมต่อ
-
การคืนสินค้า
-
พอร์ตที่ใช้รับส่งข้อความ ระบบจะทริกเกอร์เหตุการณ์ onDisconnect ของพอร์ตหากไม่มีส่วนขยาย
connectNative()
chrome.runtime.connectNative(
application: string,
): Port
เชื่อมต่อกับแอปพลิเคชันดั้งเดิมในเครื่องโฮสต์ วิธีนี้ต้องใช้สิทธิ์ "nativeMessaging"
ดูข้อมูลเพิ่มเติมได้ที่การรับส่งข้อความดั้งเดิม
พารามิเตอร์
-
แอปพลิเคชัน
สตริง
ชื่อของแอปพลิเคชันที่ลงทะเบียนเพื่อเชื่อมต่อ
การคืนสินค้า
-
พอร์ตที่ใช้ส่งและรับข้อความกับแอปพลิเคชัน
getBackgroundPage()
chrome.runtime.getBackgroundPage(
callback?: function,
): Promise<Window | undefined>
หน้าพื้นหลังไม่มีอยู่ในส่วนขยาย MV3
เรียกออบเจ็กต์ JavaScript "window" สำหรับหน้าพื้นหลังที่ทำงานภายในส่วนขยาย/แอปปัจจุบัน หากหน้าพื้นหลังเป็นหน้าเหตุการณ์ ระบบจะตรวจสอบว่ามีการโหลดหน้าดังกล่าวแล้วก่อนที่จะเรียกใช้ Callback หากไม่มีหน้าพื้นหลัง ระบบจะตั้งค่าข้อผิดพลาด
พารามิเตอร์
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(backgroundPage?: Window) => void
-
backgroundPage
หน้าต่าง ไม่บังคับ
ออบเจ็กต์ JavaScript "window" สำหรับหน้าพื้นหลัง
-
การคืนสินค้า
-
Promise<Window | undefined>
Chrome 99 ขึ้นไประบบรองรับ Promise สำหรับไฟล์ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ
getManifest()
chrome.runtime.getManifest(): object
แสดงรายละเอียดเกี่ยวกับแอปหรือส่วนขยายจากไฟล์ Manifest ออบเจ็กต์ที่ส่งคืนคือการซีเรียลไลซ์ของไฟล์ Manifest แบบเต็ม
การคืนสินค้า
-
ออบเจ็กต์
รายละเอียดของไฟล์ Manifest
getPackageDirectoryEntry()
chrome.runtime.getPackageDirectoryEntry(
callback?: function,
): Promise<DirectoryEntry>
แสดงผล DirectoryEntry สำหรับไดเรกทอรีแพ็กเกจ
พารามิเตอร์
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(directoryEntry: DirectoryEntry) => void
-
directoryEntry
DirectoryEntry
-
การคืนสินค้า
-
Promise<DirectoryEntry>
Chrome 122 ขึ้นไประบบรองรับ Promise สำหรับไฟล์ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ
getPlatformInfo()
chrome.runtime.getPlatformInfo(
callback?: function,
): Promise<PlatformInfo>
แสดงข้อมูลเกี่ยวกับแพลตฟอร์มปัจจุบัน
พารามิเตอร์
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(platformInfo: PlatformInfo) => void
-
platformInfo
-
การคืนสินค้า
-
Promise<PlatformInfo>
Chrome 99 ขึ้นไประบบรองรับ Promise สำหรับไฟล์ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ
getURL()
chrome.runtime.getURL(
path: string,
): string
แปลงเส้นทางแบบสัมพัทธ์ภายในไดเรกทอรีการติดตั้งแอป/ส่วนขยายเป็น URL ที่สมบูรณ์ในตัวเอง
พารามิเตอร์
-
เส้นทาง
สตริง
เส้นทางไปยังทรัพยากรภายในแอป/ส่วนขยายที่แสดงแบบสัมพัทธ์กับไดเรกทอรีการติดตั้ง
การคืนสินค้า
-
สตริง
URL ที่สมบูรณ์ในตัวเองของทรัพยากร
openOptionsPage()
chrome.runtime.openOptionsPage(
callback?: function,
): Promise<void>
เปิดหน้าตัวเลือกของส่วนขยาย หากทำได้
ลักษณะการทำงานที่แน่นอนอาจขึ้นอยู่กับคีย์ options_ui
หรือ options_page
ในไฟล์ Manifest หรือสิ่งที่ Chrome รองรับในขณะนั้น เช่น ระบบอาจเปิดหน้าเว็บในแท็บใหม่ ภายใน chrome://extensions ภายในแอป หรืออาจเพียงแค่โฟกัสหน้าตัวเลือกที่เปิดอยู่ และจะไม่ทำให้หน้าเว็บที่เรียกใช้โหลดซ้ำ
หากส่วนขยายไม่ได้ประกาศหน้าตัวเลือก หรือ Chrome สร้างหน้าตัวเลือกไม่ได้ด้วยเหตุผลอื่น ระบบจะตั้งค่า lastError
ในการเรียกกลับ
พารามิเตอร์
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 99 ขึ้นไประบบรองรับ Promise สำหรับไฟล์ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ
reload()
chrome.runtime.reload(): void
โหลดแอปหรือส่วนขยายซ้ำ โหมดคีออสก์ไม่รองรับวิธีนี้ สำหรับโหมดคีออสก์ ให้ใช้วิธี chrome.runtime.restart()
requestUpdateCheck()
chrome.runtime.requestUpdateCheck(
callback?: function,
): Promise<object>
ขอให้ตรวจสอบการอัปเดตแอป/ส่วนขยายนี้ทันที
สำคัญ: ส่วนขยาย/แอปส่วนใหญ่ไม่ควรใช้วิธีนี้ เนื่องจาก Chrome จะตรวจสอบโดยอัตโนมัติทุก 2-3 ชั่วโมงอยู่แล้ว และคุณสามารถรอเหตุการณ์ runtime.onUpdateAvailable
ได้โดยไม่ต้องเรียกใช้ requestUpdateCheck
วิธีการนี้เหมาะสำหรับการเรียกใช้ในสถานการณ์ที่จำกัดมากเท่านั้น เช่น หากส่วนขยายของคุณสื่อสารกับบริการแบ็กเอนด์ และบริการแบ็กเอนด์พิจารณาแล้วว่าเวอร์ชันส่วนขยายไคลเอ็นต์ล้าสมัยมาก และคุณต้องการแจ้งให้ผู้ใช้อัปเดต การใช้งาน requestUpdateCheck อื่นๆ ส่วนใหญ่ เช่น การเรียกใช้แบบไม่มีเงื่อนไขตามตัวจับเวลาที่ทำซ้ำ อาจทำให้สิ้นเปลืองทรัพยากรของไคลเอ็นต์ เครือข่าย และเซิร์ฟเวอร์เท่านั้น
หมายเหตุ: เมื่อเรียกใช้ด้วย Callback ฟังก์ชันนี้จะส่งคืนพร็อพเพอร์ตี้ 2 รายการเป็นอาร์กิวเมนต์แยกต่างหากที่ส่งไปยัง Callback แทนที่จะส่งคืนออบเจ็กต์
พารามิเตอร์
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(result: object) => void
-
ผลลัพธ์
ออบเจ็กต์
Chrome 109 ขึ้นไปออบเจ็กต์ RequestUpdateCheckResult ที่มีสถานะของการตรวจสอบการอัปเดตและรายละเอียดของผลลัพธ์หากมีการอัปเดตพร้อมใช้งาน
-
สถานะ
ผลการตรวจสอบการอัปเดต
-
เวอร์ชัน
สตริง ไม่บังคับ
หากมีการอัปเดตพร้อมใช้งาน ฟิลด์นี้จะมีเวอร์ชันของการอัปเดตที่พร้อมใช้งาน
-
-
การคืนสินค้า
-
Promise<object>
Chrome 109 ขึ้นไประบบรองรับ Promise สำหรับไฟล์ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ
restart()
chrome.runtime.restart(): void
รีสตาร์ทอุปกรณ์ ChromeOS เมื่อแอปทํางานในโหมดคีออสก์ ไม่เช่นนั้นก็จะไม่ดำเนินการใดๆ
restartAfterDelay()
chrome.runtime.restartAfterDelay(
seconds: number,
callback?: function,
): Promise<void>
รีสตาร์ทอุปกรณ์ ChromeOS เมื่อแอปทำงานในโหมดคีออสก์หลังจากผ่านไปตามจำนวนวินาทีที่ระบุ หากมีการเรียกใช้ฟังก์ชันอีกครั้งก่อนหมดเวลา ระบบจะเลื่อนการรีบูต หากเรียกใช้ด้วยค่า -1 ระบบจะยกเลิกการรีบูต ซึ่งจะไม่มีผลในโหมดที่ไม่ใช่โหมดคีออสก์ อนุญาตให้ส่วนขยายแรกเรียกใช้ซ้ำๆ เพื่อเรียกใช้ API นี้เท่านั้น
พารามิเตอร์
-
วินาที
ตัวเลข
เวลารอเป็นวินาทีก่อนรีบูตอุปกรณ์ หรือ -1 เพื่อยกเลิกการรีบูตที่กำหนดเวลาไว้
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 99 ขึ้นไประบบรองรับ Promise สำหรับไฟล์ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ
sendMessage()
chrome.runtime.sendMessage(
extensionId?: string,
message: any,
options?: object,
callback?: function,
): Promise<any>
ส่งข้อความเดียวไปยังเครื่องมือฟังเหตุการณ์ภายในส่วนขยายหรือส่วนขยาย/แอปอื่น คล้ายกับ runtime.connect
แต่จะส่งข้อความเดียวเท่านั้น โดยมีคำตอบที่ไม่บังคับ หากส่งไปยังส่วนขยายของคุณ ระบบจะทริกเกอร์เหตุการณ์ runtime.onMessage
ในทุกเฟรมของส่วนขยาย (ยกเว้นเฟรมของผู้ส่ง) หรือ runtime.onMessageExternal
หากเป็นส่วนขยายอื่น โปรดทราบว่าส่วนขยายไม่สามารถส่งข้อความไปยัง Content Script โดยใช้วิธีนี้ หากต้องการส่งข้อความไปยัง Content Script ให้ใช้ tabs.sendMessage
พารามิเตอร์
-
extensionId
สตริง ไม่บังคับ
รหัสของส่วนขยายที่จะส่งข้อความถึง หากไม่ระบุ ระบบจะส่งข้อความไปยังส่วนขยาย/แอปของคุณเอง ต้องระบุหากส่งข้อความจากหน้าเว็บสำหรับการรับส่งข้อความบนเว็บ
-
ข้อความ
ใดๆ
ข้อความที่จะส่ง ข้อความนี้ควรเป็นออบเจ็กต์ที่แปลงเป็น JSON ได้
-
ตัวเลือก
object ไม่บังคับ
-
includeTlsChannelId
บูลีน ไม่บังคับ
ระบุว่าจะส่งรหัสแชแนล TLS ไปยัง onMessageExternal สำหรับกระบวนการที่รอรับเหตุการณ์การเชื่อมต่อหรือไม่
-
-
callback
ฟังก์ชัน ไม่บังคับ
Chrome 99 ขึ้นไปพารามิเตอร์
callback
มีลักษณะดังนี้(response: any) => void
-
การตอบกลับ
ใดๆ
ออบเจ็กต์การตอบกลับ JSON ที่ตัวแฮนเดิลของข้อความส่ง หากเกิดข้อผิดพลาดขณะเชื่อมต่อกับส่วนขยาย ระบบจะเรียกใช้การเรียกกลับโดยไม่มีอาร์กิวเมนต์และตั้งค่า
runtime.lastError
เป็นข้อความแสดงข้อผิดพลาด
-
การคืนสินค้า
-
Promise<any>
Chrome 99 ขึ้นไประบบรองรับ Promise สำหรับไฟล์ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ
sendNativeMessage()
chrome.runtime.sendNativeMessage(
application: string,
message: object,
callback?: function,
): Promise<any>
ส่งข้อความเดียวไปยังแอปพลิเคชันเนทีฟ วิธีนี้ต้องใช้สิทธิ์ "nativeMessaging"
พารามิเตอร์
-
แอปพลิเคชัน
สตริง
ชื่อของโฮสต์การรับส่งข้อความในเครื่อง
-
ข้อความ
ออบเจ็กต์
ข้อความที่จะส่งไปยังโฮสต์การรับส่งข้อความดั้งเดิม
-
callback
ฟังก์ชัน ไม่บังคับ
Chrome 99 ขึ้นไปพารามิเตอร์
callback
มีลักษณะดังนี้(response: any) => void
-
การตอบกลับ
ใดๆ
ข้อความตอบกลับที่ส่งโดยโฮสต์การรับส่งข้อความที่มาพร้อมระบบ หากเกิดข้อผิดพลาดขณะเชื่อมต่อกับโฮสต์การรับส่งข้อความดั้งเดิม ระบบจะเรียกใช้การเรียกกลับโดยไม่มีอาร์กิวเมนต์ และจะตั้งค่า
runtime.lastError
เป็นข้อความแสดงข้อผิดพลาด
-
การคืนสินค้า
-
Promise<any>
Chrome 99 ขึ้นไประบบรองรับ Promise สำหรับไฟล์ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ
setUninstallURL()
chrome.runtime.setUninstallURL(
url: string,
callback?: function,
): Promise<void>
ตั้งค่า URL ที่จะเข้าชมเมื่อถอนการติดตั้ง ซึ่งอาจใช้เพื่อล้างข้อมูลฝั่งเซิร์ฟเวอร์ ทำการวิเคราะห์ และใช้แบบสำรวจ ความยาวไม่เกิน 1,023 อักขระ
พารามิเตอร์
-
URL
สตริง
URL ที่จะเปิดหลังจากถอนการติดตั้งส่วนขยาย URL นี้ต้องมีรูปแบบ http: หรือ https: ตั้งค่าเป็นสตริงว่างเพื่อไม่ให้เปิดแท็บใหม่เมื่อถอนการติดตั้ง
-
callback
ฟังก์ชัน ไม่บังคับ
Chrome 45 ขึ้นไปพารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 99 ขึ้นไประบบรองรับ Promise สำหรับไฟล์ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ
กิจกรรม
onBrowserUpdateAvailable
chrome.runtime.onBrowserUpdateAvailable.addListener(
callback: function,
)
โปรดใช้ runtime.onRestartRequired
ทริกเกอร์เมื่อมีการอัปเดต Chrome แต่ไม่ได้ติดตั้งทันทีเนื่องจากต้องรีสตาร์ทเบราว์เซอร์
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
onConnect
chrome.runtime.onConnect.addListener(
callback: function,
)
ทริกเกอร์เมื่อมีการเชื่อมต่อจากกระบวนการส่วนขยายหรือ Content Script (โดย runtime.connect
)
onConnectExternal
chrome.runtime.onConnectExternal.addListener(
callback: function,
)
ทริกเกอร์เมื่อมีการเชื่อมต่อจากส่วนขยายอื่น (โดย runtime.connect
) หรือจากเว็บไซต์ที่เชื่อมต่อภายนอกได้
onConnectNative
chrome.runtime.onConnectNative.addListener(
callback: function,
)
เริ่มทำงานเมื่อมีการเชื่อมต่อจากแอปพลิเคชันที่มาพร้อมเครื่อง กิจกรรมนี้ต้องมี"nativeMessaging"
สิทธิ์ โดยรองรับเฉพาะใน ChromeOS
onInstalled
chrome.runtime.onInstalled.addListener(
callback: function,
)
ทริกเกอร์เมื่อติดตั้งส่วนขยายเป็นครั้งแรก เมื่ออัปเดตส่วนขยายเป็นเวอร์ชันใหม่ และเมื่ออัปเดต Chrome เป็นเวอร์ชันใหม่
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(details: object) => void
-
รายละเอียด
ออบเจ็กต์
-
id
สตริง ไม่บังคับ
ระบุรหัสของส่วนขยายโมดูลที่แชร์ที่นำเข้าซึ่งได้รับการอัปเดต ซึ่งจะแสดงต่อเมื่อ "เหตุผล" คือ "shared_module_update" เท่านั้น
-
previousVersion
สตริง ไม่บังคับ
ระบุเวอร์ชันก่อนหน้าของส่วนขยายที่เพิ่งอัปเดต พารามิเตอร์นี้จะแสดงก็ต่อเมื่อ "reason" เป็น "update" เท่านั้น
-
เหตุผล
เหตุผลที่ส่งเหตุการณ์นี้
-
-
onMessage
chrome.runtime.onMessage.addListener(
callback: function,
)
ทริกเกอร์เมื่อมีการส่งข้อความจากกระบวนการของส่วนขยาย (โดย runtime.sendMessage
) หรือ Content Script (โดย tabs.sendMessage
)
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(message: any, sender: MessageSender, sendResponse: function) => boolean | undefined
-
ข้อความ
ใดๆ
-
ผู้ส่ง
-
sendResponse
ฟังก์ชัน
พารามิเตอร์
sendResponse
มีลักษณะดังนี้() => void
-
returns
boolean | undefined
-
onMessageExternal
chrome.runtime.onMessageExternal.addListener(
callback: function,
)
ทริกเกอร์เมื่อมีการส่งข้อความจากส่วนขยายอื่น (โดย runtime.sendMessage
) ใช้ใน Content Script ไม่ได้
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(message: any, sender: MessageSender, sendResponse: function) => boolean | undefined
-
ข้อความ
ใดๆ
-
ผู้ส่ง
-
sendResponse
ฟังก์ชัน
พารามิเตอร์
sendResponse
มีลักษณะดังนี้() => void
-
returns
boolean | undefined
-
onRestartRequired
chrome.runtime.onRestartRequired.addListener(
callback: function,
)
ทริกเกอร์เมื่อต้องรีสตาร์ทแอปหรืออุปกรณ์ที่แอปทำงานอยู่ แอปควรปิดหน้าต่างทั้งหมดในเวลาที่สะดวกที่สุดเพื่อให้ระบบรีสตาร์ทได้ หากแอปไม่ดำเนินการใดๆ ระบบจะบังคับให้รีสตาร์ทหลังจากระยะเวลาผ่อนผัน 24 ชั่วโมงสิ้นสุดลง ปัจจุบันเหตุการณ์นี้จะทริกเกอร์สำหรับแอปคีออสก์ของ Chrome OS เท่านั้น
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(reason: OnRestartRequiredReason) => void
-
เหตุผล
-
onStartup
chrome.runtime.onStartup.addListener(
callback: function,
)
เริ่มทำงานเมื่อโปรไฟล์ที่ติดตั้งส่วนขยายนี้เริ่มทำงานเป็นครั้งแรก ระบบจะไม่เรียกใช้เหตุการณ์นี้เมื่อเริ่มโปรไฟล์ไม่ระบุตัวตน แม้ว่าส่วนขยายนี้จะทำงานในโหมดไม่ระบุตัวตนแบบ "แยก" ก็ตาม
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
onSuspend
chrome.runtime.onSuspend.addListener(
callback: function,
)
ส่งไปยังหน้ากิจกรรมก่อนที่จะยกเลิกการโหลด ซึ่งจะช่วยให้ส่วนขยายมีโอกาสในการล้างข้อมูล โปรดทราบว่าเนื่องจากหน้าเว็บกำลังเลิกโหลด การดำเนินการแบบไม่พร้อมกันใดๆ ที่เริ่มขึ้นขณะจัดการเหตุการณ์นี้จึงไม่รับประกันว่าจะเสร็จสมบูรณ์ หากมีกิจกรรมในหน้ากิจกรรมเกิดขึ้นก่อนที่จะมีการยกเลิกการโหลด ระบบจะส่งเหตุการณ์ onSuspendCanceled และจะไม่ยกเลิกการโหลดหน้า
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
onSuspendCanceled
chrome.runtime.onSuspendCanceled.addListener(
callback: function,
)
ส่งหลังจาก onSuspend เพื่อระบุว่าระบบจะไม่เลิกโหลดแอป
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
onUpdateAvailable
chrome.runtime.onUpdateAvailable.addListener(
callback: function,
)
ทริกเกอร์เมื่อมีการอัปเดต แต่ไม่ได้ติดตั้งทันทีเนื่องจากแอปกำลังทำงานอยู่ หากคุณไม่ดำเนินการใดๆ ระบบจะติดตั้งการอัปเดตในครั้งถัดไปที่หน้าพื้นหลังถูกนำออก หากต้องการให้ติดตั้งเร็วขึ้น คุณสามารถเรียกใช้ chrome.runtime.reload() อย่างชัดเจนได้ หากส่วนขยายใช้หน้าพื้นหลังแบบถาวร หน้าพื้นหลังจะไม่ถูกนำออก ดังนั้นหากคุณไม่เรียกใช้ chrome.runtime.reload() ด้วยตนเองเพื่อตอบสนองต่อเหตุการณ์นี้ ระบบจะไม่ติดตั้งการอัปเดตจนกว่า Chrome จะรีสตาร์ทในครั้งถัดไป หากไม่มีตัวแฮนเดิลที่รอรับฟังเหตุการณ์นี้ และส่วนขยายมีหน้าพื้นหลังแบบถาวร ส่วนขยายจะทำงานราวกับว่ามีการเรียกใช้ chrome.runtime.reload() เพื่อตอบสนองต่อเหตุการณ์นี้
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(details: object) => void
-
รายละเอียด
ออบเจ็กต์
-
เวอร์ชัน
สตริง
หมายเลขเวอร์ชันของการอัปเดตที่พร้อมใช้งาน
-
-