refresh date: 2026-09-25 robots: noindex
คำอธิบาย
ใช้ 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 นี้ ให้ติดตั้งตัวอย่าง contextMenus API จากที่เก็บ chrome-extension-samples
ประเภท
ContextType
บริบทต่างๆ ที่เมนูสามารถปรากฏได้ การระบุ "all" จะเทียบเท่ากับการรวมบริบทอื่นๆ ทั้งหมด ยกเว้น "launcher" และ "tab" บริบท "launcher" รองรับเฉพาะแอปและใช้เพื่อเพิ่มรายการเมนูลงในเมนูตามบริบทที่ปรากฏขึ้นเมื่อคลิกไอคอนแอปใน Launcher/แถบงาน/Dock/ฯลฯ แพลตฟอร์มต่างๆ อาจจำกัดสิ่งที่รองรับจริงๆ ในเมนูตามบริบทของ Launcher
ค่าแจกแจง
"all"
"page"
"frame"
"selection"
"link"
"editable"
"image"
"video"
"audio"
"launcher"
"action"
ใช้กับเมนูตามบริบทของการดำเนินการของส่วนขยาย (ไอคอนแถบเครื่องมือ)
"tab"
ใช้กับเมนูตามบริบทของแท็บในแนวแท็บ
CreateProperties
พร็อพเพอร์ตี้ของรายการเมนูตามบริบทใหม่
พร็อพเพอร์ตี้
-
เลือกแล้ว
บูลีน ไม่บังคับ
สถานะเริ่มต้นของช่องทำเครื่องหมายหรือปุ่มตัวเลือก:
trueสำหรับเลือกไว้falseสำหรับไม่ได้เลือกไว้ คุณเลือกปุ่มตัวเลือกได้ครั้งละ 1 ปุ่มเท่านั้นในกลุ่มที่กำหนด -
บริบท
[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' เป็นภาษา Pig Latin" และผู้ใช้เลือกคำว่า "cool" รายการเมนูตามบริบทสำหรับการเลือกจะเป็น "แปล 'cool' เป็นภาษา Pig Latin" -
ประเภท
ItemType ไม่บังคับ
ประเภทของรายการในเมนู ค่าเริ่มต้นคือ
normal -
มองเห็นได้
บูลีน ไม่บังคับ
เลือกว่าจะแสดงรายการในเมนูหรือไม่
-
onclick
void ไม่บังคับ
ฟังก์ชันที่เรียกกลับเมื่อมีการคลิกรายการในเมนู ฟังก์ชันนี้ใช้ไม่ได้ภายใน Service Worker แต่คุณควรลงทะเบียน Listener สำหรับ
contextMenus.onClickedแทนฟังก์ชัน
onclickจะมีลักษณะดังนี้(info: OnClickData, tab: Tab) => {...}
-
ข้อมูล
ข้อมูลเกี่ยวกับรายการที่คลิกและบริบทที่เกิดการคลิก
-
แท็บ
รายละเอียดของแท็บที่เกิดการคลิก พารามิเตอร์นี้ไม่มีอยู่ในแอปแพลตฟอร์ม
-
ItemType
ประเภทของรายการในเมนู
ค่าแจกแจง
"normal"
"checkbox"
"radio"
"separator"
OnClickData
ข้อมูลที่ส่งเมื่อมีการคลิกรายการในเมนูตามบริบท
พร็อพเพอร์ตี้
-
เลือกแล้ว
บูลีน ไม่บังคับ
การแจ้งที่ระบุสถานะของช่องทำเครื่องหมายหรือรายการปุ่มตัวเลือกหลังจากคลิก
-
แก้ไขได้
บูลีน
การแจ้งที่ระบุว่าองค์ประกอบแก้ไขได้หรือไม่ (การป้อนข้อความ, textarea ฯลฯ)
-
frameId
number ไม่บังคับ
Chrome 51 ขึ้นไปรหัสของเฟรมขององค์ประกอบที่มีการคลิกเมนูตามบริบท หากอยู่ในเฟรม
-
frameUrl
สตริง ไม่บังคับ
URL ของเฟรมขององค์ประกอบที่มีการคลิกเมนูตามบริบท หากอยู่ในเฟรม
-
linkUrl
สตริง ไม่บังคับ
หากองค์ประกอบเป็นลิงก์ ให้ระบุ URL ที่ลิงก์ชี้ไป
-
mediaType
สตริง ไม่บังคับ
"รูปภาพ" "วิดีโอ" หรือ "เสียง" อย่างใดอย่างหนึ่ง หากมีการเปิดใช้งานเมนูตามบริบทในองค์ประกอบประเภทใดประเภทหนึ่งเหล่านี้
-
string | number
รหัสของรายการเมนูที่มีผู้คลิก
-
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,
): number | string
สร้างรายการเมนูตามบริบทใหม่ หากเกิดข้อผิดพลาดระหว่างการสร้าง ระบบอาจตรวจไม่พบจนกว่าจะมีการเรียกใช้ Callback การสร้าง โดยรายละเอียดจะอยู่ใน runtime.lastError
พารามิเตอร์
-
createProperties
-
callback
function ไม่บังคับ
พารามิเตอร์
callbackจะมีลักษณะดังนี้() => void
การคืนสินค้า
-
number | string
รหัสของรายการที่สร้างขึ้นใหม่
remove()
chrome.contextMenus.remove(
menuItemId: string | number,
callback?: function,
): Promise<void>
นำรายการเมนูตามบริบทออก
พารามิเตอร์
-
string | number
รหัสของรายการเมนูตามบริบทที่จะนำออก
-
callback
function ไม่บังคับ
พารามิเตอร์
callbackจะมีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 123 ขึ้นไปแก้ไขเมื่อนำเมนูตามบริบทออกแล้ว
ระบบรองรับ Promise สำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้ Callback
removeAll()
chrome.contextMenus.removeAll(
callback?: function,
): Promise<void>
นำรายการเมนูตามบริบททั้งหมดที่เพิ่มโดยส่วนขยายนี้ออก
พารามิเตอร์
-
callback
function ไม่บังคับ
พารามิเตอร์
callbackจะมีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 123 ขึ้นไประบบจะแก้ไขเมื่อนำออกเสร็จสมบูรณ์
ระบบรองรับ Promise สำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้ Callback
update()
chrome.contextMenus.update(
id: string | number,
updateProperties: object,
callback?: function,
): Promise<void>
อัปเดตรายการเมนูตามบริบทที่สร้างไว้ก่อนหน้านี้
พารามิเตอร์
-
id
string | number
รหัสของรายการที่จะอัปเดต
-
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
function ไม่บังคับ
พารามิเตอร์
callbackจะมีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 123 ขึ้นไปแก้ไขเมื่ออัปเดตเมนูตามบริบทแล้ว
ระบบรองรับ Promise สำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้ Callback
กิจกรรม
onClicked
chrome.contextMenus.onClicked.addListener(
callback: function,
)
เริ่มทำงานเมื่อมีการคลิกรายการในเมนูตามบริบท
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackจะมีลักษณะดังนี้(info: OnClickData, tab?: tabs.Tab) => void
-
ข้อมูล
-
แท็บ
tabs.Tab ไม่บังคับ
-