คำอธิบาย
ใช้ chrome.contextMenus
API เพื่อเพิ่มรายการลงในเมนูบริบทของ Google Chrome คุณเลือกประเภทออบเจ็กต์ที่ส่วนเสริมเมนูตามบริบทจะใช้ได้ เช่น รูปภาพ ไฮเปอร์ลิงก์ และหน้าเว็บ
สิทธิ์
contextMenus
คุณต้องประกาศสิทธิ์ "contextMenus"
ในไฟล์ Manifest ของส่วนขยายเพื่อใช้ API นอกจากนี้
คุณควรระบุไอคอนขนาด 16x16 พิกเซลเพื่อแสดงข้างรายการเมนู เช่น
{
"name": "My extension",
...
"permissions": [
"contextMenus"
],
"icons": {
"16": "icon-bitty.png",
"48": "icon-small.png",
"128": "icon-large.png"
},
...
}
แนวคิดและการใช้งาน
รายการในเมนูบริบทจะปรากฏในเอกสารใดก็ได้ (หรือเฟรมภายในเอกสาร) แม้แต่เอกสารที่มี URL file://
หรือ chrome:// หากต้องการควบคุมเอกสารที่รายการของคุณจะปรากฏ ให้ระบุฟิลด์
documentUrlPatterns
เมื่อเรียกใช้เมธอด create()
หรือ update()
คุณสร้างรายการในเมนูบริบทได้มากเท่าที่ต้องการ แต่หากมีรายการจากส่วนขยายมากกว่า 1 รายการที่ แสดงพร้อมกัน Google Chrome จะยุบรายการเหล่านั้นเป็นเมนูหลักรายการเดียวโดยอัตโนมัติ
ตัวอย่าง
หากต้องการลองใช้ API นี้ ให้ติดตั้งตัวอย่าง API ของ contextMenus จากที่เก็บ chrome-extension-samples
ประเภท
ContextType
บริบทต่างๆ ที่เมนูจะปรากฏ การระบุ "ทั้งหมด" จะเทียบเท่ากับการรวมบริบทอื่นๆ ทั้งหมดยกเว้น "ตัวเรียกใช้" บริบท "Launcher" รองรับเฉพาะแอปและใช้เพื่อเพิ่มรายการเมนูลงในเมนูบริบทที่ปรากฏขึ้นเมื่อคลิกไอคอนแอปใน Launcher/แถบงาน/Dock/ฯลฯ แพลตฟอร์มต่างๆ อาจจำกัดสิ่งที่รองรับจริงในเมนูบริบทของ Launcher
ค่าแจกแจง
"all"
"page"
"frame"
"selection"
"link"
"editable"
"image"
"วิดีโอ"
"audio"
"launcher"
"browser_action"
"page_action"
"action"
CreateProperties
พร็อพเพอร์ตี้ของรายการใหม่ในเมนูตามบริบท
พร็อพเพอร์ตี้
-
เลือกแล้ว
บูลีน ไม่บังคับ
สถานะเริ่มต้นของช่องทำเครื่องหมายหรือปุ่มตัวเลือก:
true
สำหรับเลือกfalse
สำหรับไม่ได้เลือก โดยเลือกปุ่มตัวเลือกได้เพียงทีละปุ่มเท่านั้นในกลุ่มที่กำหนด -
บริบท
[ContextType, ...ContextType[]] ไม่บังคับ
รายการบริบทที่รายการเมนูนี้จะปรากฏ ค่าเริ่มต้นคือ
['page']
-
documentUrlPatterns
string[] ไม่บังคับ
จำกัดรายการให้ใช้กับเอกสารหรือเฟรมที่มี URL ตรงกับรูปแบบที่ระบุเท่านั้น โปรดดูรายละเอียดเกี่ยวกับรูปแบบของรูปแบบที่หัวข้อรูปแบบการจับคู่
-
เปิดใช้อยู่
บูลีน ไม่บังคับ
เปิดใช้หรือปิดใช้รายการในเมนูตามบริบทนี้หรือไม่ ค่าเริ่มต้นคือ
true
-
id
สตริง ไม่บังคับ
รหัสที่ไม่ซ้ำกันที่จะกำหนดให้กับรายการนี้ ต้องระบุสำหรับหน้ากิจกรรม ต้องไม่ซ้ำกับรหัสอื่นสำหรับส่วนขยายนี้
-
parentId
string | number ไม่บังคับ
รหัสของรายการเมนูหลัก ซึ่งจะทำให้รายการนี้เป็นรายการย่อยของรายการที่เพิ่มก่อนหน้านี้
-
targetUrlPatterns
string[] ไม่บังคับ
คล้ายกับ
documentUrlPatterns
ตัวกรองที่อิงตามแอตทริบิวต์src
ของแท็กimg
,audio
และvideo
รวมถึงแอตทริบิวต์href
ของแท็กa
-
title
สตริง ไม่บังคับ
ข้อความที่จะแสดงในรายการ ซึ่งต้องระบุ เว้นแต่
type
จะเป็นseparator
เมื่อบริบทเป็นselection
ให้ใช้%s
ภายในสตริงเพื่อแสดงข้อความที่เลือก เช่น หากค่าของพารามิเตอร์นี้คือ "แปล '%s' เป็นภาษาหมู" และผู้ใช้เลือกคำว่า "cool" รายการในเมนูบริบทสำหรับการเลือกจะเป็น "แปล 'cool' เป็นภาษาหมู" -
ประเภท
ItemType ไม่บังคับ
ประเภทของรายการในเมนู ค่าเริ่มต้นคือ
normal
-
มองเห็นได้
บูลีน ไม่บังคับ
เลือกว่าจะให้รายการแสดงในเมนูหรือไม่
-
onclick
void optional
ฟังก์ชันที่เรียกกลับเมื่อคลิกรายการเมนู ซึ่งจะใช้ภายใน Service Worker ไม่ได้ แต่คุณควรลงทะเบียน Listener สำหรับ
contextMenus.onClicked
แทนฟังก์ชัน
onclick
มีลักษณะดังนี้(info: OnClickData, tab: Tab) => {...}
-
ข้อมูล
ข้อมูลเกี่ยวกับรายการที่คลิกและบริบทที่เกิดการคลิก
-
แท็บ
รายละเอียดของแท็บที่เกิดการคลิก ไม่มีพารามิเตอร์นี้สำหรับแอปแพลตฟอร์ม
-
ItemType
ประเภทของรายการในเมนู
ค่าแจกแจง
"ปกติ"
"ช่องทำเครื่องหมาย"
"radio"
"separator"
OnClickData
ข้อมูลที่ส่งเมื่อมีการคลิกรายการในเมนูตามบริบท
พร็อพเพอร์ตี้
-
เลือกแล้ว
บูลีน ไม่บังคับ
แฟล็กที่ระบุสถานะของช่องทำเครื่องหมายหรือรายการตัวเลือกหลังจากคลิก
-
แก้ไขได้
บูลีน
การแจ้งที่ระบุว่าองค์ประกอบแก้ไขได้หรือไม่ (ข้อความที่ป้อน, textarea ฯลฯ)
-
frameId
หมายเลข ไม่บังคับ
Chrome 51 ขึ้นไปรหัสของเฟรมขององค์ประกอบที่มีการคลิกเมนูตามบริบท หากอยู่ในเฟรม
-
frameUrl
สตริง ไม่บังคับ
URL ของเฟรมขององค์ประกอบที่มีการคลิกเมนูตามบริบท หากอยู่ในเฟรม
-
linkUrl
สตริง ไม่บังคับ
หากองค์ประกอบเป็นลิงก์ URL ที่องค์ประกอบชี้ไป
-
mediaType
สตริง ไม่บังคับ
"รูปภาพ" "วิดีโอ" หรือ "เสียง" อย่างใดอย่างหนึ่ง หากเปิดใช้งานเมนูตามบริบทในองค์ประกอบประเภทใดประเภทหนึ่งเหล่านี้
-
สตริง | ตัวเลข
รหัสของรายการเมนูที่ถูกคลิก
-
pageUrl
สตริง ไม่บังคับ
URL ของหน้าเว็บที่มีการคลิกรายการเมนู ระบบจะไม่ตั้งค่าพร็อพเพอร์ตี้นี้หากการคลิกเกิดขึ้นในบริบทที่ไม่มีหน้าเว็บปัจจุบัน เช่น ในเมนูบริบทของตัวเรียกใช้
-
parentMenuItemId
string | number ไม่บังคับ
รหัสระดับบนของสินค้าที่คลิก (หากมี)
-
selectionText
สตริง ไม่บังคับ
ข้อความสำหรับการเลือกบริบท (หากมี)
-
srcUrl
สตริง ไม่บังคับ
จะแสดงสำหรับองค์ประกอบที่มี URL "src"
-
wasChecked
บูลีน ไม่บังคับ
แฟล็กที่ระบุสถานะของช่องทำเครื่องหมายหรือรายการตัวเลือกก่อนที่จะมีการคลิก
พร็อพเพอร์ตี้
ACTION_MENU_TOP_LEVEL_LIMIT
จำนวนสูงสุดของรายการส่วนขยายระดับบนสุดที่เพิ่มลงในเมนูบริบทของการดำเนินการส่วนขยายได้ ระบบจะไม่คำนึงถึงรายการที่เกินขีดจำกัดดังกล่าว
ค่า
6
เมธอด
create()
chrome.contextMenus.create(
createProperties: CreateProperties,
callback?: function,
): number | string
สร้างรายการเมนูตามบริบทใหม่ หากเกิดข้อผิดพลาดระหว่างการสร้าง ระบบอาจตรวจไม่พบจนกว่าการเรียกกลับของการสร้างจะเริ่มทำงาน โดยรายละเอียดจะอยู่ใน runtime.lastError
พารามิเตอร์
-
createProperties
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
number | string
รหัสของสินค้าที่สร้างขึ้นใหม่
remove()
chrome.contextMenus.remove(
menuItemId: string | number,
): Promise<void>
นำรายการเมนูตามบริบทออก
พารามิเตอร์
-
สตริง | ตัวเลข
รหัสของรายการเมนูตามบริบทที่จะนำออก
การคืนสินค้า
-
Promise<void>
Chrome 123 ขึ้นไป
removeAll()
chrome.contextMenus.removeAll(): Promise<void>
นำรายการทั้งหมดในเมนูตามบริบทที่ส่วนขยายนี้เพิ่มออก
การคืนสินค้า
-
Promise<void>
Chrome 123 ขึ้นไป
update()
chrome.contextMenus.update(
id: string | number,
updateProperties: object,
): Promise<void>
อัปเดตรายการเมนูตามบริบทที่สร้างไว้ก่อนหน้านี้
พารามิเตอร์
-
id
สตริง | ตัวเลข
รหัสของสินค้าที่จะอัปเดต
-
updateProperties
ออบเจ็กต์
พร็อพเพอร์ตี้ที่จะอัปเดต ยอมรับค่าเดียวกับฟังก์ชัน
contextMenus.create
-
เลือกแล้ว
บูลีน ไม่บังคับ
-
บริบท
[ContextType, ...ContextType[]] ไม่บังคับ
-
documentUrlPatterns
string[] ไม่บังคับ
-
เปิดใช้อยู่
บูลีน ไม่บังคับ
-
parentId
string | number ไม่บังคับ
รหัสของรายการที่จะทำให้เป็นรายการระดับบนสุดของรายการนี้ หมายเหตุ: คุณไม่สามารถตั้งค่าให้รายการเป็นรายการย่อยของรายการที่สืบทอดมาจากรายการนั้นเอง
-
targetUrlPatterns
string[] ไม่บังคับ
-
title
สตริง ไม่บังคับ
-
ประเภท
ItemType ไม่บังคับ
-
มองเห็นได้
บูลีน ไม่บังคับ
Chrome 62 ขึ้นไปเลือกว่าจะให้รายการแสดงในเมนูหรือไม่
-
onclick
void optional
ฟังก์ชัน
onclick
มีลักษณะดังนี้(info: OnClickData, tab: Tab) => {...}
-
ข้อมูลChrome 44 ขึ้นไป
-
แท็บChrome 44 ขึ้นไป
รายละเอียดของแท็บที่เกิดการคลิก ไม่มีพารามิเตอร์นี้สำหรับแอปแพลตฟอร์ม
-
-
การคืนสินค้า
-
Promise<void>
Chrome 123 ขึ้นไป
กิจกรรม
onClicked
chrome.contextMenus.onClicked.addListener(
callback: function,
)
เริ่มทำงานเมื่อมีการคลิกรายการในเมนูตามบริบท
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(info: OnClickData, tab?: tabs.Tab) => void
-
ข้อมูล
-
แท็บ
tabs.Tab ไม่บังคับ
-