chrome.scripting

คำอธิบาย

ใช้ chrome.scripting API เพื่อเรียกใช้สคริปต์ในบริบทต่างๆ

สิทธิ์

scripting

ความพร้อมใช้งาน

Chrome เวอร์ชัน 88 ขึ้นไป MV3 ขึ้นไป

ไฟล์ Manifest

หากต้องการใช้ chrome.scripting API ให้ประกาศสิทธิ์ "scripting" ในไฟล์ Manifest บวกกับสิทธิ์โฮสต์สำหรับหน้าที่จะแทรกสคริปต์ ใช้คีย์ "host_permissions" หรือสิทธิ์ "activeTab" ซึ่งจะให้สิทธิ์โฮสต์ชั่วคราว ตัวอย่างต่อไปนี้ใช้สิทธิ์ ActiveTab

{
  "name": "Scripting Extension",
  "manifest_version": 3,
  "permissions": ["scripting", "activeTab"],
  ...
}

แนวคิดและการใช้งาน

คุณใช้ chrome.scripting API เพื่อแทรก JavaScript และ CSS ลงในเว็บไซต์ได้ ซึ่งคล้ายกับสิ่งที่คุณทำได้ด้วยสคริปต์เนื้อหา แต่การใช้เนมสเปซ chrome.scripting จะทำให้ส่วนขยายตัดสินใจได้ในระหว่างรันไทม์

เป้าหมายการแทรก

คุณสามารถใช้พารามิเตอร์ target เพื่อระบุเป้าหมายที่จะแทรก JavaScript หรือ CSS

ช่องที่ต้องกรอกเพียงช่องเดียวคือ tabId โดยค่าเริ่มต้น การแทรกจะทำงานในเฟรมหลักของแท็บที่ระบุ

function getTabId() { ... }

chrome.scripting
    .executeScript({
      target : {tabId : getTabId()},
      files : [ "script.js" ],
    })
    .then(() => console.log("script injected"));

หากต้องการเรียกใช้ในเฟรมทั้งหมดของแท็บที่ระบุ คุณสามารถตั้งค่าบูลีน allFrames เป็น true

function getTabId() { ... }

chrome.scripting
    .executeScript({
      target : {tabId : getTabId(), allFrames : true},
      files : [ "script.js" ],
    })
    .then(() => console.log("script injected in all frames"));

คุณยังแทรกลงในเฟรมที่เฉพาะเจาะจงของแท็บได้โดยการระบุรหัสเฟรมแต่ละรายการ ดูข้อมูลเพิ่มเติมเกี่ยวกับรหัสเฟรมได้ที่ chrome.webNavigationAPI

function getTabId() { ... }

chrome.scripting
    .executeScript({
      target : {tabId : getTabId(), frameIds : [ frameId1, frameId2 ]},
      files : [ "script.js" ],
    })
    .then(() => console.log("script injected on target frames"));

แทรกโค้ดแล้ว

ส่วนขยายสามารถระบุโค้ดที่จะแทรกผ่านไฟล์ภายนอกหรือตัวแปรรันไทม์

Files

โดยไฟล์จะระบุเป็นสตริงซึ่งเป็นเส้นทางที่เกี่ยวข้องกับไดเรกทอรีรากของส่วนขยาย โค้ดต่อไปนี้จะแทรกไฟล์ script.js ลงในเฟรมหลักของแท็บ

function getTabId() { ... }

chrome.scripting
    .executeScript({
      target : {tabId : getTabId()},
      files : [ "script.js" ],
    })
    .then(() => console.log("injected script file"));

ฟังก์ชันรันไทม์

เมื่อแทรก JavaScript ด้วย scripting.executeScript() คุณระบุฟังก์ชันที่จะดำเนินการแทนไฟล์ได้ ฟังก์ชันนี้ควรเป็นตัวแปรฟังก์ชันที่ใช้ได้กับบริบทส่วนขยายปัจจุบัน

function getTabId() { ... }
function getTitle() { return document.title; }

chrome.scripting
    .executeScript({
      target : {tabId : getTabId()},
      func : getTitle,
    })
    .then(() => console.log("injected a function"));
function getTabId() { ... }
function getUserColor() { ... }

function changeBackgroundColor() {
  document.body.style.backgroundColor = getUserColor();
}

chrome.scripting
    .executeScript({
      target : {tabId : getTabId()},
      func : changeBackgroundColor,
    })
    .then(() => console.log("injected a function"));

คุณแก้ไขปัญหานี้ได้โดยใช้พร็อพเพอร์ตี้ args

function getTabId() { ... }
function getUserColor() { ... }
function changeBackgroundColor(backgroundColor) {
  document.body.style.backgroundColor = backgroundColor;
}

chrome.scripting
    .executeScript({
      target : {tabId : getTabId()},
      func : changeBackgroundColor,
      args : [ getUserColor() ],
    })
    .then(() => console.log("injected a function"));

สตริงรันไทม์

หากแทรก CSS ภายในหน้าเว็บ คุณจะระบุสตริงที่จะใช้ในพร็อพเพอร์ตี้ css ได้ด้วย ตัวเลือกนี้มีให้สำหรับ scripting.insertCSS() เท่านั้น คุณไม่สามารถเรียกใช้สตริงโดยใช้ scripting.executeScript()

function getTabId() { ... }
const css = "body { background-color: red; }";

chrome.scripting
    .insertCSS({
      target : {tabId : getTabId()},
      css : css,
    })
    .then(() => console.log("CSS injected"));

จัดการผลลัพธ์

ระบบจะส่งผลลัพธ์ของการเรียกใช้ JavaScript ไปยังส่วนขยาย ผลลัพธ์เดียวจะรวม ต่อเฟรมด้วย เฟรมหลักจะเป็นดัชนีแรกในอาร์เรย์ผลลัพธ์ ส่วนเฟรมอื่นๆ ทั้งหมดจะอยู่ในลำดับที่ไม่กำหนด

function getTabId() { ... }
function getTitle() { return document.title; }

chrome.scripting
    .executeScript({
      target : {tabId : getTabId(), allFrames : true},
      func : getTitle,
    })
    .then(injectionResults => {
      for (const {frameId, result} of injectionResults) {
        console.log(`Frame ${frameId} result:`, result);
      }
    });

scripting.insertCSS() ไม่แสดงผลลัพธ์ใดๆ

คำมั่นสัญญา

หากผลที่ได้จากการดำเนินการสคริปต์เป็นที่น่าพอใจ Chrome จะรอให้คำสัญญาดังกล่าวจบลงแล้วจึงนำผลลัพธ์กลับมา

function getTabId() { ... }
async function addIframe() {
  const iframe = document.createElement("iframe");
  const loadComplete =
      new Promise(resolve => iframe.addEventListener("load", resolve));
  iframe.src = "https://example.com";
  document.body.appendChild(iframe);
  await loadComplete;
  return iframe.contentWindow.document.title;
}

chrome.scripting
    .executeScript({
      target : {tabId : getTabId(), allFrames : true},
      func : addIframe,
    })
    .then(injectionResults => {
      for (const frameResult of injectionResults) {
        const {frameId, result} = frameResult;
        console.log(`Frame ${frameId} result:`, result);
      }
    });

ตัวอย่าง

ยกเลิกการลงทะเบียนสคริปต์เนื้อหาแบบไดนามิกทั้งหมด

ข้อมูลโค้ดต่อไปนี้มีฟังก์ชันที่ยกเลิกการลงทะเบียนสคริปต์เนื้อหาแบบไดนามิกทั้งหมดที่ส่วนขยายเคยลงทะเบียนไว้

async function unregisterAllDynamicContentScripts() {
  try {
    const scripts = await chrome.scripting.getRegisteredContentScripts();
    const scriptIds = scripts.map(script => script.id);
    return chrome.scripting.unregisterContentScripts(scriptIds);
  } catch (error) {
    const message = [
      "An unexpected error occurred while",
      "unregistering dynamic content scripts.",
    ].join(" ");
    throw new Error(message, {cause : error});
  }
}

หากต้องการลองใช้ chrome.scripting API ให้ติดตั้งตัวอย่างสคริปต์จากที่เก็บตัวอย่างส่วนขยาย Chrome

ประเภท

ContentScriptFilter

Chrome 96 ขึ้นไป

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

  • ids

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

    หากระบุไว้ getRegisteredContentScripts จะส่งกลับสคริปต์ที่มีรหัสที่ระบุไว้ในรายการนี้เท่านั้น

CSSInjection

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

  • css

    string ไม่บังคับ

    สตริงที่มี CSS ที่จะแทรก ต้องระบุ files และ css อย่างใดอย่างหนึ่ง

  • files

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

    เส้นทางของไฟล์ CSS ที่จะแทรก ซึ่งเกี่ยวข้องกับไดเรกทอรีรากของส่วนขยาย ต้องระบุ files และ css อย่างใดอย่างหนึ่ง

  • ต้นกำเนิด

    StyleOrigin ไม่บังคับ

    ต้นทางรูปแบบสำหรับการแทรก ค่าเริ่มต้นคือ 'AUTHOR'

  • เป้าหมาย

    รายละเอียดที่ระบุเป้าหมายที่จะแทรก CSS

ExecutionWorld

Chrome 95 ขึ้นไป

โลกของ JavaScript สำหรับสคริปต์ที่เรียกใช้ภายใน

ค่าแจกแจง

"ISOLATED"
ระบุโลกที่อยู่ที่แยก (Isolated World) ซึ่งเป็นสภาพแวดล้อมการดำเนินการที่มีเอกลักษณ์เฉพาะของส่วนขยายนี้

"MAIN"
ระบุโลกหลักของ DOM ซึ่งเป็นสภาพแวดล้อมการดำเนินการที่แชร์กับ JavaScript ของหน้าโฮสต์

InjectionResult

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

  • documentId

    string

    Chrome 106 ขึ้นไป

    เอกสารที่เกี่ยวข้องกับการแทรก

  • frameId

    ตัวเลข

    Chrome 90 ขึ้นไป

    เฟรมที่เชื่อมโยงกับการแทรก

  • ผลลัพธ์

    รายการใดก็ได้ ไม่บังคับ

    ผลของการเรียกใช้สคริปต์

InjectionTarget

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

  • allFrames

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

    สคริปต์ควรแทรกลงในเฟรมทั้งหมดภายในแท็บหรือไม่ ค่าเริ่มต้นคือ "เท็จ" ค่านี้ต้องไม่เป็นจริงหากระบุ frameIds ไว้

  • documentIds

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

    Chrome 106 ขึ้นไป

    ID ของ documentId ที่เฉพาะเจาะจงที่จะแทรก ต้องไม่ตั้งค่านี้หากมีการตั้งค่า frameIds

  • frameIds

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

    รหัสของเฟรมที่เฉพาะเจาะจงที่จะแทรก

  • tabId

    ตัวเลข

    รหัสของแท็บที่จะแทรก

RegisteredContentScript

Chrome 96 ขึ้นไป

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

  • allFrames

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

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

  • css

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

    รายการไฟล์ CSS ที่จะแทรกในหน้าที่ตรงกัน แทรกพารามิเตอร์เหล่านี้ตามลำดับที่ปรากฏในอาร์เรย์นี้ ก่อนที่จะมีการสร้างหรือแสดง DOM สำหรับหน้าเว็บ

  • excludeMatches

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

    ยกเว้นหน้าที่ระบบอาจแทรกสคริปต์เนื้อหานี้เข้าไป ดูรายละเอียดเพิ่มเติมเกี่ยวกับไวยากรณ์ของสตริงเหล่านี้ที่การจับคู่รูปแบบ

  • id

    string

    รหัสของสคริปต์เนื้อหาที่ระบุในการเรียก API ต้องไม่ขึ้นต้นด้วย '_' เนื่องจากระบบสงวนไว้เป็นคำนำหน้าสำหรับรหัสสคริปต์ที่สร้างขึ้น

  • js

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

    รายการไฟล์ JavaScript ที่จะแทรกในหน้าที่ตรงกัน ระบบจะแทรกแท็กเหล่านี้ตามลำดับที่ปรากฏในอาร์เรย์นี้

  • matchOriginAsFallback

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

    Chrome 119 ขึ้นไป

    ระบุว่าสามารถแทรกสคริปต์ลงในเฟรมที่ URL มีรูปแบบที่ไม่รองรับได้หรือไม่ โดยเฉพาะ: about:, data:, blob: หรือ filesystem: ในกรณีเช่นนี้ ระบบจะตรวจสอบต้นทางของ URL เพื่อพิจารณาว่าควรแทรกสคริปต์หรือไม่ หากต้นทางคือ null (ตามกรณีของข้อมูล: URL) ต้นทางที่ใช้จะเป็นเฟรมที่สร้างเฟรมปัจจุบันหรือเฟรมที่เริ่มการนำทางมายังเฟรมนี้ โปรดทราบว่านี่อาจไม่ใช่เฟรมระดับบนสุด

  • ตรงกัน

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

    ระบุหน้าที่จะแทรกสคริปต์เนื้อหานี้ ดูรายละเอียดเพิ่มเติมเกี่ยวกับไวยากรณ์ของสตริงเหล่านี้ที่การจับคู่รูปแบบ ต้องระบุสำหรับ registerContentScripts

  • persistAcrossSessions

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

    ระบุว่าสคริปต์เนื้อหานี้จะยังคงอยู่ในเซสชันในอนาคตหรือไม่ ค่าเริ่มต้นคือ True

  • runAt

    RunAt ไม่บังคับ

    ระบุเวลาที่แทรกไฟล์ JavaScript ลงในหน้าเว็บ ค่าที่ต้องการและค่าเริ่มต้นคือ document_idle

  • ต่างประเทศ

    ExecutionWorld ไม่บังคับ

    Chrome 102 ขึ้นไป

    JavaScript "world" ที่จะเรียกใช้สคริปต์ ค่าเริ่มต้นคือ ISOLATED

ScriptInjection

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

  • args

    ทั้งหมด[] ไม่บังคับ

    Chrome 92 ขึ้นไป

    อาร์กิวเมนต์ที่จะส่งผ่านไปยังฟังก์ชันที่ระบุ โดยจะใช้ได้เมื่อมีการระบุพารามิเตอร์ func เท่านั้น อาร์กิวเมนต์เหล่านี้ต้องเป็นอนุกรม JSON

  • files

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

    เส้นทางของไฟล์ JS หรือ CSS ที่จะแทรก ซึ่งเกี่ยวข้องกับไดเรกทอรีรากของส่วนขยาย ต้องระบุ files หรือ func อย่างใดอย่างหนึ่ง

  • injectImmediately

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

    Chrome 102 ขึ้นไป

    พิจารณาว่าควรทริกเกอร์การแทรกในเป้าหมายโดยเร็วที่สุดหรือไม่ โปรดทราบว่านี่ไม่ใช่การรับประกันว่าการแทรกจะเกิดขึ้นก่อนการโหลดหน้าเว็บ เนื่องจากหน้าเว็บอาจโหลดแล้วในขณะที่สคริปต์ไปถึงเป้าหมาย

  • เป้าหมาย

    รายละเอียดที่ระบุเป้าหมายที่จะแทรกสคริปต์

  • ต่างประเทศ

    ExecutionWorld ไม่บังคับ

    Chrome 95 ขึ้นไป

    JavaScript "world" ที่จะเรียกใช้สคริปต์ ค่าเริ่มต้นคือ ISOLATED

  • func

    เป็นโมฆะ ไม่บังคับ

    Chrome 92 ขึ้นไป

    ฟังก์ชัน JavaScript ที่จะแทรก ฟังก์ชันนี้จะมีการทำให้เป็นอนุกรม จากนั้นทำการดีซีเรียลไลซ์สำหรับการแทรก ซึ่งหมายความว่าพารามิเตอร์ที่ผูกไว้และบริบทการดำเนินการจะสูญหายไป ต้องระบุ files หรือ func อย่างใดอย่างหนึ่ง

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

    ()=> {...}

StyleOrigin

ต้นทางของการเปลี่ยนแปลงรูปแบบ ดูข้อมูลเพิ่มเติมได้ที่ต้นทางของสไตล์

ค่าแจกแจง

"AUTHOR"

วิธีการ

executeScript()

สัญญา
chrome.scripting.executeScript(
  injection: ScriptInjection,
  callback?: function,
)

แทรกสคริปต์ลงในบริบทเป้าหมาย โดยค่าเริ่มต้น สคริปต์จะทํางานที่ document_idle หรือทันทีหากโหลดหน้าเว็บแล้ว หากตั้งค่าพร็อพเพอร์ตี้ injectImmediately ไว้ สคริปต์จะแทรกโค้ดโดยไม่ต้องรอ แม้ว่าหน้าเว็บยังโหลดไม่เสร็จก็ตาม หากสคริปต์ประเมินได้ตามที่ต้องการ เบราว์เซอร์จะรอให้คำสัญญาคงที่และแสดงผลค่าที่ได้กลับมา

พารามิเตอร์

  • ฉีด

    รายละเอียดของสคริปต์ที่จะแทรก

  • Callback

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

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

    (results: InjectionResult[])=>void

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

  • Promise<InjectionResult[]>

    Chrome 90 ขึ้นไป

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

getRegisteredContentScripts()

คำมั่นสัญญา Chrome 96 ขึ้นไป
chrome.scripting.getRegisteredContentScripts(
  filter?: ContentScriptFilter,
  callback?: function,
)

แสดงสคริปต์เนื้อหาที่จดทะเบียนแบบไดนามิกทั้งหมดสำหรับส่วนขยายนี้ที่ตรงกับตัวกรองที่ระบุ

พารามิเตอร์

  • ฟิลเตอร์

    ContentScriptFilter ไม่บังคับ

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

  • Callback

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

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

    (scripts: RegisteredContentScript[])=>void

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

  • Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

insertCSS()

สัญญา
chrome.scripting.insertCSS(
  injection: CSSInjection,
  callback?: function,
)

แทรกสไตล์ชีต CSS ลงในบริบทเป้าหมาย หากระบุหลายเฟรม ระบบจะละเว้นการแทรกที่ไม่สำเร็จ

พารามิเตอร์

  • ฉีด

    รายละเอียดของรูปแบบที่จะแทรก

  • Callback

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

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

    ()=>void

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

  • Promise<void>

    Chrome 90 ขึ้นไป

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

registerContentScripts()

คำมั่นสัญญา Chrome 96 ขึ้นไป
chrome.scripting.registerContentScripts(
  scripts: RegisteredContentScript[],
  callback?: function,
)

ลงทะเบียนสคริปต์เนื้อหาอย่างน้อยหนึ่งสคริปต์สำหรับส่วนขยายนี้

พารามิเตอร์

  • สคริปต์

    มีรายการสคริปต์ที่จะลงทะเบียน หากเกิดข้อผิดพลาดระหว่างการแยกวิเคราะห์สคริปต์/การตรวจสอบไฟล์ หรือหากรหัสที่ระบุมีอยู่แล้ว ก็จะไม่มีการบันทึกสคริปต์ใดๆ

  • Callback

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

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

    ()=>void

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

  • Promise<void>

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

removeCSS()

คำมั่นสัญญา Chrome 90 ขึ้นไป
chrome.scripting.removeCSS(
  injection: CSSInjection,
  callback?: function,
)

นำสไตล์ชีต CSS ที่ส่วนขยายนี้แทรกก่อนหน้านี้ออกจากบริบทเป้าหมาย

พารามิเตอร์

  • ฉีด

    รายละเอียดของรูปแบบที่จะนำออก โปรดทราบว่าพร็อพเพอร์ตี้ css, files และ origin ต้องตรงกับสไตล์ชีตที่แทรกผ่าน insertCSS ทุกประการ การพยายามลบสไตล์ชีตที่ไม่มีอยู่ไม่ใช่การดำเนินการ

  • Callback

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

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

    ()=>void

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

  • Promise<void>

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

unregisterContentScripts()

คำมั่นสัญญา Chrome 96 ขึ้นไป
chrome.scripting.unregisterContentScripts(
  filter?: ContentScriptFilter,
  callback?: function,
)

ยกเลิกการลงทะเบียนสคริปต์เนื้อหาสำหรับส่วนขยายนี้

พารามิเตอร์

  • ฟิลเตอร์

    ContentScriptFilter ไม่บังคับ

    หากระบุไว้ ให้ยกเลิกการลงทะเบียนสคริปต์เนื้อหาแบบไดนามิกที่ตรงกับตัวกรองเท่านั้น มิฉะนั้น สคริปต์เนื้อหาแบบไดนามิกของส่วนขยายทั้งหมดจะถูกยกเลิกการลงทะเบียน

  • Callback

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

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

    ()=>void

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

  • Promise<void>

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

updateContentScripts()

คำมั่นสัญญา Chrome 96 ขึ้นไป
chrome.scripting.updateContentScripts(
  scripts: RegisteredContentScript[],
  callback?: function,
)

อัปเดตสคริปต์เนื้อหาอย่างน้อย 1 รายการสำหรับส่วนขยายนี้

พารามิเตอร์

  • สคริปต์

    มีรายการสคริปต์ที่ต้องอัปเดต พร็อพเพอร์ตี้จะได้รับการอัปเดตสำหรับสคริปต์ที่มีอยู่เฉพาะเมื่อระบุไว้ในออบเจ็กต์นี้เท่านั้น หากมีข้อผิดพลาดระหว่างการแยกวิเคราะห์สคริปต์/การตรวจสอบไฟล์ หรือหากรหัสที่ระบุไม่ตรงกับสคริปต์ที่ลงทะเบียนโดยสมบูรณ์ แสดงว่าไม่มีการอัปเดตสคริปต์

  • Callback

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

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

    ()=>void

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

  • Promise<void>

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ