chrome.contextMenus

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 นี้ ให้ติดตั้งตัวอย่าง API ของ contextMenus จากที่เก็บ chrome-extension-samples

ประเภท

ContextType

Chrome 44 ขึ้นไป

บริบทต่างๆ ที่เมนูจะปรากฏ การระบุ "all" จะเทียบเท่ากับการรวมบริบทอื่นๆ ทั้งหมด ยกเว้น "launcher" บริบท "ตัวเรียกใช้" รองรับเฉพาะแอปและใช้เพื่อเพิ่มรายการเมนูลงในเมนูตามบริบทซึ่งจะปรากฏขึ้นเมื่อคลิกไอคอนแอปในตัวเรียกใช้/แถบงาน/แถบแอป/ฯลฯ แพลตฟอร์มต่างๆ อาจจำกัดสิ่งที่รองรับจริงในเมนูตามบริบทของตัวเรียกใช้

ค่าแจกแจง

"ทั้งหมด"

"page"

"เฟรม"

"selection"

"ลิงก์"

"แก้ไขได้"

"image"

"วิดีโอ"

"audio"

"launcher"

"browser_action"

"page_action"

"การดำเนินการ"

"แท็บ"

CreateProperties

Chrome 123 ขึ้นไป

พร็อพเพอร์ตี้ของรายการเมนูบริบทใหม่

พร็อพเพอร์ตี้

  • เลือกแล้ว

    บูลีน ไม่บังคับ

    สถานะเริ่มต้นของช่องทำเครื่องหมายหรือปุ่มตัวเลือก: true สำหรับเลือก false สำหรับไม่ได้เลือก เลือกปุ่มตัวเลือกได้ครั้งละ 1 ปุ่มเท่านั้นในกลุ่มที่กำหนด

  • บริบท

    [ContextType, ...ContextType[]] ไม่บังคับ

    รายการบริบทที่รายการเมนูนี้จะปรากฏ ค่าเริ่มต้นคือ ['page']

  • documentUrlPatterns

    string[] ไม่บังคับ

    จำกัดรายการให้ใช้กับเอกสารหรือเฟรมที่มี URL ตรงกับรูปแบบใดรูปแบบหนึ่งที่ระบุเท่านั้น ดูรายละเอียดเกี่ยวกับรูปแบบของรูปแบบได้ที่รูปแบบการจับคู่

  • เปิดใช้อยู่

    บูลีน ไม่บังคับ

    เปิดหรือปิดใช้รายการเมนูบริบทนี้ ค่าเริ่มต้นคือ true

  • id

    สตริง ไม่บังคับ

    รหัสที่ไม่ซ้ำกันที่จะกำหนดให้กับรายการนี้ ต้องระบุสำหรับหน้ากิจกรรม ต้องไม่ซ้ำกับรหัสอื่นของส่วนขยายนี้

  • parentId

    สตริง | ตัวเลข ไม่บังคับ

    รหัสของรายการเมนูหลัก ซึ่งจะทำให้รายการนี้เป็นรายการย่อยของรายการที่เพิ่มก่อนหน้านี้

  • 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

Chrome 44 ขึ้นไป

ประเภทของรายการในเมนู

ค่าแจกแจง

"ปกติ"

"ช่องทำเครื่องหมาย"

"วิทยุ"

"separator"

OnClickData

ข้อมูลที่ส่งเมื่อมีการคลิกรายการในเมนูตามบริบท

พร็อพเพอร์ตี้

  • เลือกแล้ว

    บูลีน ไม่บังคับ

    ค่าสถานะที่ระบุสถานะของช่องทำเครื่องหมายหรือรายการตัวเลือกหลังจากคลิก

  • แก้ไขได้

    บูลีน

    การแจ้งที่ระบุว่าองค์ประกอบแก้ไขได้หรือไม่ (ข้อความที่ป้อน, textarea ฯลฯ)

  • frameId

    หมายเลข ไม่บังคับ

    Chrome 51 ขึ้นไป

    รหัสของเฟรมขององค์ประกอบที่มีการคลิกเมนูตามบริบท หากอยู่ในเฟรม

  • frameUrl

    สตริง ไม่บังคับ

    URL ของเฟรมขององค์ประกอบที่มีการคลิกเมนูตามบริบท หากอยู่ในเฟรม

  • linkUrl

    สตริง ไม่บังคับ

    หากองค์ประกอบเป็นลิงก์ URL ที่ลิงก์ชี้ไป

  • mediaType

    สตริง ไม่บังคับ

    อย่างใดอย่างหนึ่งจาก "รูปภาพ" "วิดีโอ" หรือ "เสียง" หากเปิดใช้งานเมนูบริบทในองค์ประกอบประเภทใดประเภทหนึ่งเหล่านี้

  • menuItemId

    สตริง | ตัวเลข

    รหัสของรายการในเมนูที่มีผู้คลิก

  • pageUrl

    สตริง ไม่บังคับ

    URL ของหน้าเว็บที่มีการคลิกรายการเมนู ระบบจะไม่ตั้งค่าพร็อพเพอร์ตี้นี้หากมีการคลิกในบริบทที่ไม่มีหน้าปัจจุบัน เช่น ในเมนูตามบริบทของตัวเรียกใช้

  • parentMenuItemId

    สตริง | ตัวเลข ไม่บังคับ

    รหัสระดับบนของสินค้าที่คลิก หากมี

  • 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()

Promise
chrome.contextMenus.remove(
  menuItemId: string | number,
  callback?: function,
)
: Promise<void>

นำรายการเมนูตามบริบทออก

พารามิเตอร์

  • menuItemId

    สตริง | ตัวเลข

    รหัสของรายการเมนูตามบริบทที่จะนำออก

  • callback

    ฟังก์ชัน ไม่บังคับ

    พารามิเตอร์ callback มีลักษณะดังนี้

    () => void

การคืนสินค้า

  • Promise<void>

    Chrome 123 ขึ้นไป

    แก้ไขเมื่อนำเมนูตามบริบทออกแล้ว

    ระบบรองรับเฉพาะ Promise สำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ

removeAll()

Promise
chrome.contextMenus.removeAll(
  callback?: function,
)
: Promise<void>

นำรายการทั้งหมดในเมนูบริบทที่ส่วนขยายนี้เพิ่มออก

พารามิเตอร์

  • callback

    ฟังก์ชัน ไม่บังคับ

    พารามิเตอร์ callback มีลักษณะดังนี้

    () => void

การคืนสินค้า

  • Promise<void>

    Chrome 123 ขึ้นไป

    แก้ไขเมื่อการนำออกเสร็จสมบูรณ์

    ระบบรองรับเฉพาะ Promise สำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ

update()

Promise
chrome.contextMenus.update(
  id: string | number,
  updateProperties: object,
  callback?: function,
)
: Promise<void>

อัปเดตรายการเมนูตามบริบทที่สร้างไว้ก่อนหน้านี้

พารามิเตอร์

  • id

    สตริง | ตัวเลข

    รหัสของรายการที่จะอัปเดต

  • updateProperties

    ออบเจ็กต์

    พร็อพเพอร์ตี้ที่จะอัปเดต ยอมรับค่าเดียวกับฟังก์ชัน contextMenus.create

    • เลือกแล้ว

      บูลีน ไม่บังคับ

    • บริบท

      [ContextType, ...ContextType[]] ไม่บังคับ

    • documentUrlPatterns

      string[] ไม่บังคับ

    • เปิดใช้อยู่

      บูลีน ไม่บังคับ

    • parentId

      สตริง | ตัวเลข ไม่บังคับ

      รหัสของรายการที่จะทำให้เป็นรายการหลักของรายการนี้ หมายเหตุ: คุณไม่สามารถตั้งค่าให้รายการเป็นรายการย่อยของรายการที่สืบทอดมาจากรายการนั้นเองได้

    • targetUrlPatterns

      string[] ไม่บังคับ

    • title

      สตริง ไม่บังคับ

    • ประเภท

      ItemType ไม่บังคับ

    • มองเห็นได้

      บูลีน ไม่บังคับ

      Chrome 62 ขึ้นไป

      เลือกว่าจะให้รายการแสดงในเมนูหรือไม่

    • onclick

      void optional

      ฟังก์ชัน onclick มีลักษณะดังนี้

      (info: OnClickData, tab: Tab) => {...}

      • ข้อมูล
        Chrome 44 ขึ้นไป
      • แท็บ
        Chrome 44 ขึ้นไป

        รายละเอียดของแท็บที่เกิดการคลิก พารามิเตอร์นี้จะไม่มีในแอปแพลตฟอร์ม

  • callback

    ฟังก์ชัน ไม่บังคับ

    พารามิเตอร์ callback มีลักษณะดังนี้

    () => void

การคืนสินค้า

  • Promise<void>

    Chrome 123 ขึ้นไป

    แก้ไขเมื่อมีการอัปเดตเมนูตามบริบท

    ระบบรองรับเฉพาะ Promise สำหรับ Manifest V3 ขึ้นไปเท่านั้น แพลตฟอร์มอื่นๆ ต้องใช้การเรียกกลับ

กิจกรรม

onClicked

chrome.contextMenus.onClicked.addListener(
  callback: function,
)

ทริกเกอร์จะทำงานเมื่อมีการคลิกรายการในเมนูตามบริบท

พารามิเตอร์

  • callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้

    (info: OnClickData, tab?: tabs.Tab) => void