chrome.events

คำอธิบาย

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

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

chrome.alarms.onAlarm.addListener(function(alarm) {
  appendToLog('alarms.onAlarm --'
              + ' name: '          + alarm.name
              + ' scheduledTime: ' + alarm.scheduledTime);
});

ตามตัวอย่างนี้ คุณลงทะเบียนรับการแจ้งเตือนโดยใช้ addListener() อาร์กิวเมนต์ของ addListener() จะเป็นฟังก์ชันที่คุณกำหนดให้จัดการเหตุการณ์เสมอ แต่จะใช้พารามิเตอร์ จะขึ้นอยู่กับเหตุการณ์ที่คุณกำลังจัดการ กำลังตรวจสอบเอกสารสำหรับ alarms.onAlarm คุณจะเห็นว่าฟังก์ชันมีพารามิเตอร์เดียว คือออบเจ็กต์ alarms.Alarm ที่มีรายละเอียด เกี่ยวกับการตั้งปลุกที่ผ่านไป

ตัวอย่าง API ที่ใช้เหตุการณ์ ได้แก่ การปลุก, i18n, identity, runtime Chrome ส่วนใหญ่ API

เครื่องจัดการกิจกรรมการประกาศ

เครื่องจัดการเหตุการณ์แบบประกาศเป็นวิธีกำหนดกฎที่ประกอบด้วยเงื่อนไขการประกาศ และการทำงาน เงื่อนไขจะได้รับการประเมินในเบราว์เซอร์ ไม่ใช่เครื่องมือ JavaScript ซึ่งลด เวลาในการตอบสนองไป-กลับ และทำให้มีประสิทธิภาพสูงมาก

ตัวอย่างเช่น ตัวแฮนเดิลเหตุการณ์การประกาศใช้ใน API คำขอเว็บการประกาศ และ The Declarative Content API หน้านี้อธิบายแนวคิดสําคัญของเหตุการณ์ที่มีการประกาศทั้งหมด เครื่องจัดการ

กฎ

กฎที่ง่ายที่สุดประกอบด้วยเงื่อนไขอย่างน้อย 1 ข้อและการกระทำอย่างน้อย 1 รายการดังนี้

var rule = {
  conditions: [ /* my conditions */ ],
  actions: [ /* my actions */ ]
};

หากเป็นไปตามเงื่อนไขข้อใดข้อหนึ่ง ระบบจะดำเนินการทั้งหมด

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

var rule = {
  id: "my rule",  // optional, will be generated if not set.
  priority: 100,  // optional, defaults to 100.
  conditions: [ /* my conditions */ ],
  actions: [ /* my actions */ ]
};

ออบเจ็กต์เหตุการณ์

ออบเจ็กต์เหตุการณ์อาจรองรับกฎ ออบเจ็กต์เหตุการณ์เหล่านี้จะไม่เรียกใช้ฟังก์ชัน Callback เมื่อ เหตุการณ์จะเกิดขึ้น แต่ทดสอบว่ากฎที่ลงทะเบียนไว้มีเงื่อนไขที่บรรลุอย่างน้อย 1 รายการหรือไม่ และดำเนินการ การดำเนินการที่เชื่อมโยงกับกฎนี้ ออบเจ็กต์เหตุการณ์ที่รองรับ API การประกาศมี 3 รายการ เมธอดที่เกี่ยวข้อง: events.Event.addRules, events.Event.removeRules และ events.Event.getRules

การเพิ่มกฎ

หากต้องการเพิ่มกฎ ให้เรียกใช้ฟังก์ชัน addRules() ของออบเจ็กต์เหตุการณ์ ใช้อาร์เรย์ของอินสแตนซ์กฎ เป็นพารามิเตอร์แรกและฟังก์ชัน Callback ที่จะเรียกใช้เมื่อเสร็จสมบูรณ์

var rule_list = [rule1, rule2, ...];
function addRules(rule_list, function callback(details) {...});

หากแทรกกฎสำเร็จ พารามิเตอร์ details จะมีอาร์เรย์ของกฎที่แทรก ปรากฏในลำดับเดียวกับใน rule_list ที่ส่งผ่าน ซึ่งพารามิเตอร์ที่ไม่บังคับ id และ มีการเติม priority ด้วยค่าที่สร้างขึ้น หากมีกฎที่ไม่ถูกต้อง เช่น เนื่องจากมีกฎ เงื่อนไขหรือการดำเนินการที่ไม่ถูกต้อง ไม่มีการเพิ่มกฎใดๆ และตัวแปร runtime.lastError จะถูกตั้งค่าเมื่อมีการเรียกใช้ฟังก์ชัน Callback แต่ละกฎใน rule_list จะต้องประกอบด้วย ตัวระบุที่กฎอื่นไม่ได้ใช้อยู่ในขณะนี้ หรือตัวระบุว่างเปล่า

การนำกฎออก

หากต้องการนำกฎออก ให้เรียกใช้ฟังก์ชัน removeRules() ยอมรับอาร์เรย์ของตัวระบุกฎที่ไม่บังคับ เป็นพารามิเตอร์แรกและมีฟังก์ชัน Callback เป็นพารามิเตอร์ที่ 2

var rule_ids = ["id1", "id2", ...];
function removeRules(rule_ids, function callback() {...});

หาก rule_ids เป็นอาร์เรย์ของตัวระบุ กฎทั้งหมดที่มีตัวระบุอยู่ในอาร์เรย์ ลบแล้ว หาก rule_ids แสดงตัวระบุซึ่งไม่ทราบที่มา ระบบจะละเว้นตัวระบุนี้โดยไม่มีการแจ้งเตือน ถ้า rule_ids คือ undefined ระบบจะนำกฎที่ลงทะเบียนทั้งหมดของส่วนขยายนี้ออก callback() จะถูกเรียกเมื่อกฎถูกนำออก

กำลังเรียกกฎ

หากต้องการเรียกดูรายการกฎที่ลงทะเบียนในปัจจุบัน ให้เรียกใช้ฟังก์ชัน getRules() ยอมรับ อาร์เรย์ที่ไม่บังคับของตัวระบุกฎซึ่งมีความหมายเหมือนกับ removeRules และฟังก์ชัน Callback

var rule_ids = ["id1", "id2", ...];
function getRules(rule_ids, function callback(details) {...});

พารามิเตอร์ details ที่ส่งไปยังฟังก์ชัน callback() หมายถึงอาร์เรย์ของกฎ ซึ่งรวมถึง พารามิเตอร์ที่ไม่บังคับที่เติมโฆษณา

ประสิทธิภาพ

เพื่อให้ได้รับประสิทธิภาพสูงสุด คุณควรคํานึงถึงหลักเกณฑ์ต่อไปนี้

ลงทะเบียนและยกเลิกการลงทะเบียนกฎหลายรายการพร้อมกัน หลังจากการลงทะเบียนหรือยกเลิกการลงทะเบียนแต่ละครั้ง Chrome จะต้อง อัปเดตโครงสร้างข้อมูลภายในของ การอัปเดตนี้เป็นการดำเนินการที่มีค่าใช้จ่ายสูง

แทนที่จะเป็น:

var rule1 = {...};
var rule2 = {...};
chrome.declarativeWebRequest.onRequest.addRules([rule1]);
chrome.declarativeWebRequest.onRequest.addRules([rule2]);

ต้องการ:

var rule1 = {...};
var rule2 = {...};
chrome.declarativeWebRequest.onRequest.addRules([rule1, rule2]);

ต้องการการจับคู่สตริงย่อยแทนนิพจน์ทั่วไปใน events.UrlFilter การจับคู่ตามสตริงย่อยนั้นรวดเร็วมาก

แทนที่จะเป็น:

var match = new chrome.declarativeWebRequest.RequestMatcher({
    url: {urlMatches: "example.com/[^?]*foo" } });

ต้องการ:

var match = new chrome.declarativeWebRequest.RequestMatcher({
    url: {hostSuffix: "example.com", pathContains: "foo"} });

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

แทนที่จะเป็น:

var condition1 = new chrome.declarativeWebRequest.RequestMatcher({
    url: { hostSuffix: 'example.com' } });
var condition2 = new chrome.declarativeWebRequest.RequestMatcher({
    url: { hostSuffix: 'foobar.com' } });
var rule1 = { conditions: [condition1],
              actions: [new chrome.declarativeWebRequest.CancelRequest()]};
var rule2 = { conditions: [condition2],
              actions: [new chrome.declarativeWebRequest.CancelRequest()]};
chrome.declarativeWebRequest.onRequest.addRules([rule1, rule2]);

ต้องการ:

  var rule = { conditions: [condition1, condition2],
                actions: [new chrome.declarativeWebRequest.CancelRequest()]};
  chrome.declarativeWebRequest.onRequest.addRules([rule]);

เหตุการณ์ที่กรอง

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

เหตุการณ์ที่กรองมีไว้เพื่ออนุญาตให้เปลี่ยนจากโค้ดการกรองด้วยตนเองดังนี้

chrome.webNavigation.onCommitted.addListener(function(e) {
  if (hasHostSuffix(e.url, 'google.com') ||
      hasHostSuffix(e.url, 'google.com.au')) {
    // ...
  }
});

มาพูดถึงกัน:

chrome.webNavigation.onCommitted.addListener(function(e) {
  // ...
}, {url: [{hostSuffix: 'google.com'},
          {hostSuffix: 'google.com.au'}]});

เหตุการณ์รองรับตัวกรองเฉพาะที่มีความสำคัญต่อเหตุการณ์นั้น รายการตัวกรองที่เหตุการณ์ รองรับจะแสดงอยู่ในเอกสารสำหรับเหตุการณ์นั้นใน "ตัวกรอง"

เมื่อจับคู่ URL (ตามตัวอย่างด้านบน) ตัวกรองเหตุการณ์จะรองรับการจับคู่ URL เดียวกัน ความสามารถที่แสดงได้ด้วย events.UrlFilter ยกเว้นการจับคู่รูปแบบและพอร์ต

ประเภท

Event

ออบเจ็กต์ที่อนุญาตให้เพิ่มและนำ Listener ออกสำหรับเหตุการณ์ Chrome

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

  • addListener

    เป็นโมฆะ

    ลงทะเบียน Listener เหตุการณ์ callback ไปยังเหตุการณ์

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

    (callback: H) => {...}

    • Callback

      H

      เรียกใช้เมื่อเกิดเหตุการณ์ พารามิเตอร์ของฟังก์ชันนี้ขึ้นอยู่กับประเภทของเหตุการณ์

  • addRules

    เป็นโมฆะ

    กฎการลงทะเบียนเพื่อจัดการเหตุการณ์ต่างๆ

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

    (rules: Rule<anyany>[], callback?: function) => {...}

    • กฎ

      กฎ<anyany>[]

      กฎที่ต้องลงทะเบียน กฎเหล่านี้ไม่ได้แทนที่กฎที่ลงทะเบียนไว้ก่อนหน้านี้

    • Callback

      ไม่บังคับ

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

      (rules: Rule<anyany>[]) => void

      • กฎ

        กฎ<anyany>[]

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

  • getRules

    เป็นโมฆะ

    แสดงกฎที่ลงทะเบียนในปัจจุบัน

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

    (ruleIdentifiers?: string[], callback: function) => {...}

    • ruleIdentifiers

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

      หากมีการส่งผ่านอาร์เรย์ ระบบจะส่งเฉพาะกฎที่มีตัวระบุที่อยู่ในอาร์เรย์นี้เท่านั้น

    • Callback

      ฟังก์ชัน

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

      (rules: Rule<anyany>[]) => void

      • กฎ

        กฎ<anyany>[]

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

  • hasListener

    เป็นโมฆะ

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

    (callback: H) => {...}

    • Callback

      H

      ผู้ฟังที่จะมีการทดสอบสถานะการลงทะเบียน

    • returns

      boolean

      เป็นจริงหากมีการบันทึกการติดต่อกลับไปยังเหตุการณ์

  • hasListeners

    เป็นโมฆะ

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

    () => {...}

    • returns

      boolean

      เป็นจริงหากมีการลงทะเบียน Listener เหตุการณ์กับเหตุการณ์

  • removeListener

    เป็นโมฆะ

    ยกเลิกการลงทะเบียน Listener เหตุการณ์ callback จากเหตุการณ์

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

    (callback: H) => {...}

    • Callback

      H

      ผู้ฟังที่จะยกเลิกการลงทะเบียน

  • removeRules

    เป็นโมฆะ

    ยกเลิกการลงทะเบียนกฎที่ลงทะเบียนในปัจจุบัน

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

    (ruleIdentifiers?: string[], callback?: function) => {...}

    • ruleIdentifiers

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

      หากมีการส่งผ่านอาร์เรย์ ระบบจะยกเลิกการลงทะเบียนกฎที่มีตัวระบุที่อยู่ในอาร์เรย์นี้เท่านั้น

    • Callback

      ไม่บังคับ

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

      () => void

Rule

คำอธิบายของกฎการประกาศสำหรับการจัดการเหตุการณ์

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

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

    ทั้งหมด[]

    รายการการดำเนินการที่จะทริกเกอร์หากเป็นไปตามเงื่อนไขข้อใดข้อหนึ่ง

  • เงื่อนไข

    ทั้งหมด[]

    รายการเงื่อนไขที่ทริกเกอร์การดำเนินการได้

  • id

    string ไม่บังคับ

    ตัวระบุที่ไม่บังคับซึ่งอนุญาตให้อ้างอิงกฎนี้

  • ลำดับความสำคัญ

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

    ลำดับความสำคัญที่ไม่บังคับของกฎนี้ ค่าเริ่มต้นคือ 100

  • แท็ก

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

    แท็กสามารถใช้คำอธิบายประกอบกฎและดำเนินการกับชุดของกฎได้

UrlFilter

กรอง URL ตามเกณฑ์ต่างๆ ดูการกรองเหตุการณ์ เกณฑ์ทั้งหมดคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

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

  • cidrBlocks

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

    Chrome 123 ขึ้นไป

    จับคู่หากส่วนโฮสต์ของ URL เป็นที่อยู่ IP และอยู่ในบล็อก CIDR ที่ระบุในอาร์เรย์

  • hostContains

    string ไม่บังคับ

    จับคู่ถ้าชื่อโฮสต์ของ URL มีสตริงที่ระบุ หากต้องการทดสอบว่าคอมโพเนนต์ของชื่อโฮสต์มีคํานําหน้า "foo" หรือไม่ ให้ใช้ hostContains: ".foo" ส่วนนี้ตรงกับ "www.foobar.com" และ "foo.com" เนื่องจากมีการเพิ่มจุดโดยนัยที่ตอนต้นของชื่อโฮสต์ ในทำนองเดียวกัน hostContains เพื่อจับคู่กับส่วนต่อท้ายคอมโพเนนต์ ("foo.") และจับคู่กับคอมโพเนนต์ (".foo.") ให้ตรงทุกประการ การจับคู่ส่วนต่อท้ายและการจับคู่ที่ตรงกันทั้งหมดสำหรับคอมโพเนนต์สุดท้ายต้องทำแยกกันโดยใช้ hostSuffix เพราะจะไม่มีการเพิ่มจุดโดยนัยที่ส่วนท้ายของชื่อโฮสต์

  • hostEquals

    string ไม่บังคับ

    จับคู่ถ้าชื่อโฮสต์ของ URL เท่ากับสตริงที่ระบุ

  • hostPrefix

    string ไม่บังคับ

    จับคู่หากชื่อโฮสต์ของ URL เริ่มต้นด้วยสตริงที่ระบุ

  • hostSuffix

    string ไม่บังคับ

    จับคู่ถ้าชื่อโฮสต์ของ URL ลงท้ายด้วยสตริงที่ระบุ

  • originAndPathMatches

    string ไม่บังคับ

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

  • pathContains

    string ไม่บังคับ

    จับคู่หากกลุ่มเส้นทางของ URL มีสตริงที่ระบุ

  • pathEquals

    string ไม่บังคับ

    จับคู่หากกลุ่มเส้นทางของ URL เท่ากับสตริงที่ระบุ

  • pathPrefix

    string ไม่บังคับ

    จับคู่หากกลุ่มเส้นทางของ URL ขึ้นต้นด้วยสตริงที่ระบุ

  • pathSuffix

    string ไม่บังคับ

    จับคู่หากกลุ่มเส้นทางของ URL ลงท้ายด้วยสตริงที่ระบุ

  • ports

    (number | number[])[] ไม่บังคับ

    จับคู่ในกรณีที่พอร์ตของ URL อยู่ในรายการพอร์ตที่ระบุ ตัวอย่างเช่น [80, 443, [1000, 1200]] จะจับคู่คำขอทั้งหมดในพอร์ต 80, 443 และในช่วง 1000-1200

  • queryContains

    string ไม่บังคับ

    จับคู่หากกลุ่มคำค้นหาของ URL มีสตริงที่ระบุ

  • queryEquals

    string ไม่บังคับ

    จับคู่หากกลุ่มคำค้นหาของ URL เท่ากับสตริงที่ระบุ

  • queryPrefix

    string ไม่บังคับ

    จับคู่หากกลุ่มการค้นหาของ URL เริ่มต้นด้วยสตริงที่ระบุ

  • querySuffix

    string ไม่บังคับ

    จับคู่หากกลุ่มการค้นหาของ URL ลงท้ายด้วยสตริงที่ระบุ

  • แผนการ

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

    จับคู่หากรูปแบบของ URL เท่ากับรูปแบบที่ระบุไว้ในอาร์เรย์

  • urlContains

    string ไม่บังคับ

    จับคู่หาก URL (ไม่มีตัวระบุส่วนย่อย) มีสตริงที่ระบุ หมายเลขพอร์ตจะถูกนำออกจาก URL หากตรงกับหมายเลขพอร์ตเริ่มต้น

  • urlEquals

    string ไม่บังคับ

    จับคู่หาก URL (ไม่มีตัวระบุส่วนย่อย) เท่ากับสตริงที่ระบุ หมายเลขพอร์ตจะถูกนำออกจาก URL หากตรงกับหมายเลขพอร์ตเริ่มต้น

  • urlMatches

    string ไม่บังคับ

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

  • urlPrefix

    string ไม่บังคับ

    จับคู่หาก URL (ไม่มีตัวระบุส่วนย่อย) เริ่มต้นด้วยสตริงที่ระบุ หมายเลขพอร์ตจะถูกนำออกจาก URL หากตรงกับหมายเลขพอร์ตเริ่มต้น

  • urlSuffix

    string ไม่บังคับ

    จับคู่หาก URL (ไม่มีตัวระบุส่วนย่อย) ลงท้ายด้วยสตริงที่ระบุ หมายเลขพอร์ตจะถูกนำออกจาก URL หากตรงกับหมายเลขพอร์ตเริ่มต้น