คำอธิบาย
ใช้ chrome.contextMenus
API เพื่อเพิ่มรายการลงในเมนูบริบทของ Google Chrome คุณเลือกประเภทของออบเจ็กต์ที่จะใช้เมนูตามบริบทเพิ่มเติมได้ เช่น รูปภาพ ไฮเปอร์ลิงก์ และหน้าเว็บ
สิทธิ์
contextMenus
คุณต้องประกาศสิทธิ์ "contextMenus"
ในไฟล์ Manifest ของส่วนขยายจึงจะใช้ API ได้ นอกจากนี้ คุณควรระบุไอคอนขนาด 16 x 16 พิกเซลเพื่อแสดงข้างรายการเมนู เช่น
{
"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 นี้ ให้ติดตั้งตัวอย่าง contextMenus API จากที่เก็บchrome-extension-samples
ประเภท
ContextType
บริบทต่างๆ ที่เมนูอาจปรากฏ การระบุ "all" เทียบเท่ากับการรวมบริบทอื่นๆ ทั้งหมดยกเว้น "launcher" บริบท "launcher" รองรับเฉพาะแอปเท่านั้นและใช้เพื่อเพิ่มรายการเมนูลงในเมนูตามบริบทที่ปรากฏขึ้นเมื่อคลิกไอคอนแอปใน Launcher/แถบงาน/แท่นชาร์จ/ฯลฯ แพลตฟอร์มต่างๆ อาจมีข้อจำกัดเกี่ยวกับสิ่งที่รองรับในเมนูตามบริบทของ Launcher
ค่าแจกแจง
"all"
"page"
"frame"
"selection"
"link"
"editable"
"image"
"video"
"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" เป็นภาษาพิกลิก" และผู้ใช้เลือกคำว่า "เจ๋ง" รายการในเมนูบริบทสำหรับการเลือกจะเป็น "แปล "เจ๋ง" เป็นภาษาพิกลิก" -
ประเภท
ItemType ไม่บังคับ
ประเภทของรายการในเมนู ค่าเริ่มต้นคือ
normal
-
มองเห็นได้
บูลีน ไม่บังคับ
รายการจะแสดงในเมนูหรือไม่
-
onclick
void ไม่บังคับ
ฟังก์ชันที่เรียกกลับเมื่อมีการคลิกรายการเมนู การดำเนินการนี้ไม่พร้อมใช้งานภายใน Service Worker คุณควรลงทะเบียน Listener สำหรับ
contextMenus.onClicked
แทนฟังก์ชัน
onclick
มีรูปแบบดังนี้(info: OnClickData, tab: Tab) => {...}
-
ข้อมูล
ข้อมูลเกี่ยวกับรายการที่คลิกและบริบทที่เกิดคลิก
-
แท็บ
รายละเอียดของแท็บที่มีการคลิก ไม่มีพารามิเตอร์นี้สําหรับแอปแพลตฟอร์ม
-
ItemType
ประเภทของรายการในเมนู
ค่าแจกแจง
"normal"
"checkbox"
"radio"
"separator"
OnClickData
ข้อมูลที่ส่งเมื่อมีการคลิกรายการในเมนูตามบริบท
พร็อพเพอร์ตี้
-
เลือกไว้
บูลีน ไม่บังคับ
การแจ้งที่ระบุสถานะของช่องทําเครื่องหมายหรือรายการตัวเลือกหลังจากมีการคลิก
-
แก้ไขได้
บูลีน
การแจ้งที่ระบุว่าองค์ประกอบแก้ไขได้หรือไม่ (การป้อนข้อความ, textarea ฯลฯ)
-
frameId
ตัวเลข ไม่บังคับ
Chrome 51 ขึ้นไปรหัสของเฟรมขององค์ประกอบที่มีการคลิกเมนูตามบริบท หากอยู่ในเฟรม
-
frameUrl
สตริง ไม่บังคับ
URL ของเฟรมขององค์ประกอบที่มีการคลิกเมนูตามบริบท หากอยู่ในเฟรม
-
linkUrl
สตริง ไม่บังคับ
หากองค์ประกอบเป็นลิงก์ ให้ระบุ URL ที่ลิงก์ชี้ไป
-
mediaType
สตริง ไม่บังคับ
"รูปภาพ" "วิดีโอ" หรือ "เสียง" รายการใดรายการหนึ่ง หากเปิดใช้งานเมนูตามบริบทในองค์ประกอบประเภทใดประเภทหนึ่งเหล่านี้
-
สตริง | ตัวเลข
รหัสของรายการเมนูที่มีการคลิก
-
pageUrl
สตริง ไม่บังคับ
URL ของหน้าเว็บที่มีการคลิกรายการเมนู ระบบจะไม่ตั้งค่าพร็อพเพอร์ตี้นี้หากการคลิกเกิดขึ้นในบริบทที่ไม่มีหน้าปัจจุบัน เช่น ในเมนูบริบทของ Launcher
-
parentMenuItemId
string | number ไม่บังคับ
รหัสหลักของรายการที่คลิก (หากมี)
-
selectionText
สตริง ไม่บังคับ
ข้อความสําหรับการเลือกบริบท (หากมี)
-
srcUrl
สตริง ไม่บังคับ
จะแสดงสําหรับองค์ประกอบที่มี URL "src"
-
wasChecked
บูลีน ไม่บังคับ
การแจ้งที่ระบุสถานะของช่องทําเครื่องหมายหรือรายการตัวเลือกก่อนที่จะมีการคลิก
พร็อพเพอร์ตี้
ACTION_MENU_TOP_LEVEL_LIMIT
จํานวนสูงสุดของรายการชิ้นงานระดับบนสุดที่เพิ่มลงในเมนูบริบทของการดําเนินการของชิ้นงานได้ ระบบจะไม่คำนึงถึงรายการที่เกินขีดจำกัดนี้
ค่า
6
เมธอด
create()
chrome.contextMenus.create(
createProperties: CreateProperties,
callback?: function,
)
สร้างรายการเมนูตามบริบทใหม่ หากเกิดข้อผิดพลาดระหว่างการสร้าง ระบบอาจไม่ตรวจพบจนกว่าการเรียกกลับการสร้างจะเริ่มต้นขึ้น รายละเอียดจะอยู่ใน runtime.lastError
พารามิเตอร์
-
createProperties
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
การคืนสินค้า
-
ตัวเลข | สตริง
รหัสของสินค้าที่สร้างขึ้นใหม่
remove()
chrome.contextMenus.remove(
menuItemId: string | number,
callback?: function,
)
นำรายการเมนูตามบริบทออก
พารามิเตอร์
-
สตริง | ตัวเลข
รหัสของรายการเมนูตามบริบทที่จะนำออก
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 123 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
removeAll()
chrome.contextMenus.removeAll(
callback?: function,
)
นำรายการเมนูตามบริบททั้งหมดที่ส่วนขยายนี้เพิ่มออก
พารามิเตอร์
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 123 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
update()
chrome.contextMenus.update(
id: string | number,
updateProperties: object,
callback?: function,
)
อัปเดตรายการเมนูตามบริบทที่สร้างไว้ก่อนหน้านี้
พารามิเตอร์
-
id
สตริง | ตัวเลข
รหัสของรายการที่จะอัปเดต
-
updateProperties
ออบเจ็กต์
พร็อพเพอร์ตี้ที่จะอัปเดต ยอมรับค่าเดียวกับฟังก์ชัน
contextMenus.create
-
เลือกไว้
บูลีน ไม่บังคับ
-
บริบท
[ContextType, ...ContextType[]] ไม่บังคับ
-
documentUrlPatterns
string[] ไม่บังคับ
-
เปิดใช้อยู่
บูลีน ไม่บังคับ
-
parentId
string | number ไม่บังคับ
รหัสของรายการที่จะทําให้เป็นรายการหลักของรายการนี้ หมายเหตุ: คุณไม่สามารถตั้งค่ารายการให้กลายเป็นรายการย่อยของรายการที่สืบทอดมาเอง
-
targetUrlPatterns
string[] ไม่บังคับ
-
title
สตริง ไม่บังคับ
-
ประเภท
ItemType ไม่บังคับ
-
มองเห็นได้
บูลีน ไม่บังคับ
Chrome 62 ขึ้นไปรายการจะแสดงในเมนูหรือไม่
-
onclick
void ไม่บังคับ
ฟังก์ชัน
onclick
มีรูปแบบดังนี้(info: OnClickData, tab: Tab) => {...}
-
ข้อมูลChrome 44 ขึ้นไป
-
แท็บChrome 44 ขึ้นไป
รายละเอียดของแท็บที่มีการคลิก ไม่มีพารามิเตอร์นี้สําหรับแอปแพลตฟอร์ม
-
-
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 123 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
กิจกรรม
onClicked
chrome.contextMenus.onClicked.addListener(
callback: function,
)
เริ่มทํางานเมื่อมีการคลิกรายการในเมนูตามบริบท
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
จะมีลักษณะดังนี้(info: OnClickData, tab?: tabs.Tab) => void
-
ข้อมูล
-
แท็บ
tabs.Tab ไม่บังคับ
-