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