คำอธิบาย
ใช้ chrome.sidePanel
API เพื่อโฮสต์เนื้อหาในแผงด้านข้างของเบราว์เซอร์ควบคู่ไปกับเนื้อหาหลักของหน้าเว็บ
สิทธิ์
sidePanel
หากต้องการใช้ Side Panel API ให้เพิ่มสิทธิ์ "sidePanel"
ในไฟล์ manifest ของส่วนขยาย
manifest.json:
{
"name": "My side panel extension",
...
"permissions": [
"sidePanel"
]
}
ความพร้อมใช้งาน
แนวคิดและการใช้งาน
Side Panel API ช่วยให้ส่วนขยายแสดง UI ของตัวเองในแผงด้านข้างได้ ซึ่งจะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ต่อเนื่องซึ่งเสริมเส้นทางการท่องเว็บของผู้ใช้

ฟีเจอร์บางอย่างมีดังนี้
- แผงด้านข้างจะยังคงเปิดอยู่เมื่อไปยังส่วนต่างๆ ของแท็บ (หากตั้งค่าไว้)
- โดยอาจใช้ได้ในบางเว็บไซต์เท่านั้น
- แผงด้านข้างในฐานะหน้าส่วนขยายจะมีสิทธิ์เข้าถึง Chrome API ทั้งหมด
- ผู้ใช้สามารถระบุได้ว่าควรแสดงแผงไว้ที่ด้านใดในการตั้งค่าของ Chrome
กรณีการใช้งาน
ส่วนต่อไปนี้จะแสดงกรณีการใช้งานทั่วไปบางส่วนสำหรับ Side Panel API ดูตัวอย่างส่วนขยายทั้งหมดได้ที่ตัวอย่างส่วนขยาย
แสดงแผงด้านข้างเดียวกันในทุกเว็บไซต์
คุณตั้งค่าแผงด้านข้างได้ตั้งแต่แรกจากพร็อพเพอร์ตี้ "default_path"
ในคีย์ "side_panel"
ของไฟล์ Manifest เพื่อแสดงแผงด้านข้างเดียวกันในทุกเว็บไซต์ ซึ่งควรชี้ไปยังเส้นทางแบบสัมพัทธ์ภายในไดเรกทอรีของส่วนขยาย
manifest.json:
{
"name": "My side panel extension",
...
"side_panel": {
"default_path": "sidepanel.html"
}
...
}
sidepanel.html:
<!DOCTYPE html>
<html>
<head>
<title>My Sidepanel</title>
</head>
<body>
<h1>All sites sidepanel extension</h1>
<p>This side panel is enabled on all sites</p>
</body>
</html>
เปิดใช้แผงด้านข้างในเว็บไซต์ที่เฉพาะเจาะจง
ส่วนขยายสามารถใช้ sidepanel.setOptions()
เพื่อเปิดใช้แผงด้านข้างในแท็บที่เฉพาะเจาะจงได้ ตัวอย่างนี้ใช้ chrome.tabs.onUpdated()
เพื่อฟังการอัปเดตที่ทำกับแท็บ โดยจะตรวจสอบว่า URL คือ www.google.com และเปิดใช้แผงด้านข้างหรือไม่ ไม่เช่นนั้น ระบบจะปิดใช้
service-worker.js:
const GOOGLE_ORIGIN = 'https://www.google.com';
chrome.tabs.onUpdated.addListener(async (tabId, info, tab) => {
if (!tab.url) return;
const url = new URL(tab.url);
// Enables the side panel on google.com
if (url.origin === GOOGLE_ORIGIN) {
await chrome.sidePanel.setOptions({
tabId,
path: 'sidepanel.html',
enabled: true
});
} else {
// Disables the side panel on all other sites
await chrome.sidePanel.setOptions({
tabId,
enabled: false
});
}
});
เมื่อผู้ใช้เปลี่ยนไปใช้แท็บที่ไม่ได้เปิดใช้แผงด้านข้างชั่วคราว ระบบจะซ่อนแผงด้านข้าง โดยจะแสดงอีกครั้งโดยอัตโนมัติเมื่อผู้ใช้เปลี่ยนไปที่แท็บที่เปิดไว้ก่อนหน้านี้
เมื่อผู้ใช้ไปที่เว็บไซต์ที่ไม่ได้เปิดใช้แผงด้านข้าง แผงด้านข้างจะปิด และส่วนขยายจะไม่แสดงในเมนูแบบเลื่อนลงของแผงด้านข้าง
ดูตัวอย่างที่สมบูรณ์ได้ในตัวอย่างแผงด้านข้างเฉพาะแท็บ
เปิดแผงด้านข้างโดยคลิกไอคอนแถบเครื่องมือ
นักพัฒนาแอปสามารถอนุญาตให้ผู้ใช้เปิดแผงด้านข้างได้เมื่อคลิกไอคอนแถบเครื่องมือการดำเนินการด้วย sidePanel.setPanelBehavior()
ก่อนอื่น ให้ประกาศคีย์ "action"
ในไฟล์ Manifest ดังนี้
manifest.json:
{
"name": "My side panel extension",
...
"action": {
"default_title": "Click to open panel"
},
...
}
ตอนนี้ให้เพิ่มโค้ดนี้ลงในตัวอย่างก่อนหน้า
service-worker.js:
const GOOGLE_ORIGIN = 'https://www.google.com';
// Allows users to open the side panel by clicking on the action toolbar icon
chrome.sidePanel
.setPanelBehavior({ openPanelOnActionClick: true })
.catch((error) => console.error(error));
...
เปิดแผงด้านข้างโดยอัตโนมัติเมื่อผู้ใช้โต้ตอบ
Chrome 116 เปิดตัวsidePanel.open()
ซึ่งอนุญาตให้ส่วนขยายเปิดแผงด้านข้างผ่านท่าทางของผู้ใช้ส่วนขยาย เช่น การคลิกไอคอนการดำเนินการ หรือการโต้ตอบของผู้ใช้ในหน้าส่วนขยายหรือสคริปต์เนื้อหา เช่น การคลิกปุ่ม ดูการสาธิตแบบสมบูรณ์ได้ที่ส่วนขยายตัวอย่างเปิดแผงด้านข้าง
โค้ดต่อไปนี้แสดงวิธีเปิดแผงด้านข้างส่วนกลางในหน้าต่างปัจจุบันเมื่อผู้ใช้คลิกเมนูตามบริบท เมื่อใช้ sidePanel.open()
คุณต้องเลือกบริบทที่ควรเปิด ใช้ windowId
เพื่อเปิดแผงด้านข้างส่วนกลาง หรือจะตั้งค่า tabId
ให้เปิดแผงด้านข้างในแท็บที่เฉพาะเจาะจงเท่านั้นก็ได้
service-worker.js:
chrome.runtime.onInstalled.addListener(() => {
chrome.contextMenus.create({
id: 'openSidePanel',
title: 'Open side panel',
contexts: ['all']
});
});
chrome.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === 'openSidePanel') {
// This will open the panel in all the pages on the current window.
chrome.sidePanel.open({ windowId: tab.windowId });
}
});
เปลี่ยนไปใช้แผงอื่น
ส่วนขยายสามารถใช้ sidepanel.getOptions()
เพื่อดึงแผงด้านข้างปัจจุบันได้ ตัวอย่างต่อไปนี้จะตั้งค่าแผงด้านข้างต้อนรับใน runtime.onInstalled()
จากนั้นเมื่อผู้ใช้ไปยังแท็บอื่น ระบบจะแทนที่ด้วยแผงด้านข้างหลัก
service-worker.js:
const welcomePage = 'sidepanels/welcome-sp.html';
const mainPage = 'sidepanels/main-sp.html';
chrome.runtime.onInstalled.addListener(() => {
chrome.sidePanel.setOptions({ path: welcomePage });
chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true });
});
chrome.tabs.onActivated.addListener(async ({ tabId }) => {
const { path } = await chrome.sidePanel.getOptions({ tabId });
if (path === welcomePage) {
chrome.sidePanel.setOptions({ path: mainPage });
}
});
ดูโค้ดทั้งหมดได้ที่ตัวอย่างแผงด้านข้างหลายรายการ
ประสบการณ์ของผู้ใช้แผงด้านข้าง
ผู้ใช้จะเห็นแผงด้านข้างในตัวของ Chrome ก่อน แผงด้านข้างแต่ละแผงจะแสดงไอคอนของส่วนขยายในเมนูแผงด้านข้าง หากไม่มีไอคอน ระบบจะแสดงไอคอนตัวยึดตำแหน่งที่มีตัวอักษรตัวแรกของชื่อส่วนขยาย
เปิดแผงด้านข้าง
หากต้องการอนุญาตให้ผู้ใช้เปิดแผงด้านข้าง ให้ใช้ไอคอนการดำเนินการร่วมกับ sidePanel.setPanelBehavior()
หรือจะโทรหา sidePanel.open()
หลังจากที่ผู้ใช้โต้ตอบ เช่น
- คลิกการกระทำ
- แป้นพิมพ์ลัด
- เมนูตามบริบท
- ท่าทางของผู้ใช้ในหน้าส่วนขยายหรือ Content Script
ปักหมุดแผงด้านข้าง

แถบเครื่องมือแผงด้านข้างจะแสดงไอคอนหมุดเมื่อแผงด้านข้างเปิดอยู่ การคลิกไอคอนจะเป็นการปักหมุดไอคอนการดำเนินการของส่วนขยาย การคลิกไอคอนการดำเนินการเมื่อปักหมุดแล้วจะดำเนินการเริ่มต้นสำหรับไอคอนการดำเนินการ และจะเปิดแผงด้านข้างก็ต่อเมื่อมีการกำหนดค่าอย่างชัดเจนเท่านั้น
ตัวอย่าง
หากต้องการดูการสาธิตส่วนขยาย Side Panel API เพิ่มเติม ให้สำรวจส่วนขยายต่อไปนี้
- แผงด้านข้างของพจนานุกรม
- แผงด้านข้างส่วนกลาง
- แผงด้านข้างหลายแผง
- เปิดแผงด้านข้าง
- แผงด้านข้างเฉพาะเว็บไซต์
ประเภท
CloseOptions
พร็อพเพอร์ตี้
-
tabId
หมายเลข ไม่บังคับ
แท็บที่จะปิดแผงด้านข้าง หากแผงด้านข้างเฉพาะแท็บเปิดอยู่ในแท็บที่ระบุ ระบบจะปิดแผงด้านข้างสำหรับแท็บนั้น ต้องระบุข้อมูลนี้หรือ
windowId
อย่างน้อย 1 รายการ -
windowId
หมายเลข ไม่บังคับ
หน้าต่างที่จะปิดแผงด้านข้าง หากแผงด้านข้างส่วนกลางเปิดอยู่ในหน้าต่างที่ระบุ ระบบจะปิดแผงดังกล่าวสำหรับแท็บทั้งหมดในหน้าต่างนั้นซึ่งไม่มีแผงเฉพาะแท็บที่ใช้งานอยู่ ต้องระบุข้อมูลนี้หรือ
tabId
อย่างน้อย 1 รายการ
GetPanelOptions
พร็อพเพอร์ตี้
-
tabId
หมายเลข ไม่บังคับ
หากระบุไว้ ระบบจะแสดงตัวเลือกแผงด้านข้างสำหรับแท็บที่ระบุ มิฉะนั้นจะแสดงตัวเลือกแผงด้านข้างเริ่มต้น (ใช้กับแท็บที่ไม่มีการตั้งค่าเฉพาะ)
OpenOptions
พร็อพเพอร์ตี้
-
tabId
หมายเลข ไม่บังคับ
แท็บที่จะเปิดแผงด้านข้าง หากแท็บที่เกี่ยวข้องมีแผงด้านข้างเฉพาะแท็บ แผงจะเปิดเฉพาะแท็บนั้น หากไม่มีแผงเฉพาะแท็บ ระบบจะเปิดแผงส่วนกลางในแท็บที่ระบุและแท็บอื่นๆ ที่ไม่มีแผงเฉพาะแท็บที่เปิดอยู่ในปัจจุบัน การดำเนินการนี้จะลบล้างแผงด้านข้างที่ใช้งานอยู่ในปัจจุบัน (ส่วนกลางหรือเฉพาะแท็บ) ในแท็บที่เกี่ยวข้อง ต้องระบุข้อมูลนี้หรือ
windowId
อย่างน้อย 1 รายการ -
windowId
หมายเลข ไม่บังคับ
หน้าต่างที่จะเปิดแผงด้านข้าง ซึ่งจะมีผลก็ต่อเมื่อส่วนขยายมีแผงด้านข้างแบบทั่วโลก (ไม่ใช่เฉพาะแท็บ) หรือมีการระบุ
tabId
ด้วย การดำเนินการนี้จะลบล้างแผงด้านข้างส่วนกลางที่ใช้งานอยู่ในปัจจุบันซึ่งผู้ใช้เปิดไว้ในหน้าต่างที่ระบุ ต้องระบุข้อมูลนี้หรือtabId
อย่างน้อย 1 รายการ
PanelBehavior
พร็อพเพอร์ตี้
-
openPanelOnActionClick
บูลีน ไม่บังคับ
การคลิกไอคอนของส่วนขยายจะสลับการแสดงรายการของส่วนขยายในแผงด้านข้างหรือไม่ ค่าเริ่มต้นคือ false
PanelLayout
พร็อพเพอร์ตี้
-
ด้านข้าง
PanelOptions
พร็อพเพอร์ตี้
-
เปิดใช้อยู่
บูลีน ไม่บังคับ
ควรเปิดใช้แผงด้านข้างไหม ขั้นตอนนี้ไม่บังคับ ค่าเริ่มต้นคือ True
-
เส้นทาง
สตริง ไม่บังคับ
เส้นทางไปยังไฟล์ HTML ของแผงด้านข้างที่จะใช้ โดยต้องเป็นทรัพยากรในเครื่องภายในแพ็กเกจส่วนขยาย
-
tabId
หมายเลข ไม่บังคับ
หากระบุไว้ ตัวเลือกแผงด้านข้างจะมีผลกับแท็บที่มีรหัสนี้เท่านั้น หากละไว้ ตัวเลือกเหล่านี้จะตั้งค่าลักษณะการทำงานเริ่มต้น (ใช้กับแท็บที่ไม่มีการตั้งค่าเฉพาะ) หมายเหตุ: หากตั้งค่าเส้นทางเดียวกันสำหรับ tabId นี้และ tabId เริ่มต้น แผงสำหรับ tabId นี้จะเป็นอินสแตนซ์ที่แตกต่างจากแผงสำหรับ tabId เริ่มต้น
Side
กำหนดการจัดแนวที่เป็นไปได้สำหรับแผงด้านข้างใน UI ของเบราว์เซอร์
ค่าแจกแจง
"left"
"right"
SidePanel
พร็อพเพอร์ตี้
-
default_path
สตริง
เส้นทางที่นักพัฒนาแอปกำหนดสำหรับการแสดงแผงด้านข้าง
เมธอด
getLayout()
chrome.sidePanel.getLayout(): Promise<PanelLayout>
แสดงผลเลย์เอาต์ปัจจุบันของแผงด้านข้าง
การคืนสินค้า
-
Promise<PanelLayout>
getOptions()
chrome.sidePanel.getOptions(
options: GetPanelOptions,
): Promise<PanelOptions>
แสดงผลการกำหนดค่าแผงที่ใช้งานอยู่
พารามิเตอร์
-
ตัวเลือก
ระบุบริบทที่จะส่งคืนการกำหนดค่า
การคืนสินค้า
-
Promise<PanelOptions>
getPanelBehavior()
chrome.sidePanel.getPanelBehavior(): Promise<PanelBehavior>
แสดงผลลักษณะการทำงานของแผงด้านข้างปัจจุบันของส่วนขยาย
การคืนสินค้า
-
Promise<PanelBehavior>
open()
chrome.sidePanel.open(
options: OpenOptions,
): Promise<void>
เปิดแผงด้านข้างสำหรับส่วนขยาย ซึ่งจะเรียกใช้ได้ก็ต่อเมื่อเป็นการตอบสนองต่อการกระทำของผู้ใช้เท่านั้น
พารามิเตอร์
-
ตัวเลือก
ระบุบริบทที่จะเปิดแผงด้านข้าง
การคืนสินค้า
-
Promise<void>
setOptions()
chrome.sidePanel.setOptions(
options: PanelOptions,
): Promise<void>
กำหนดค่าแผงด้านข้าง
พารามิเตอร์
-
ตัวเลือก
ตัวเลือกการกำหนดค่าที่จะใช้กับแผง
การคืนสินค้า
-
Promise<void>
setPanelBehavior()
chrome.sidePanel.setPanelBehavior(
behavior: PanelBehavior,
): Promise<void>
กำหนดค่าลักษณะการทำงานของแผงด้านข้างของส่วนขยาย นี่คือการดำเนินการ upsert
พารามิเตอร์
-
ประโยชน์จากผู้อื่น
ลักษณะการทำงานใหม่ที่จะตั้งค่า
การคืนสินค้า
-
Promise<void>