chrome.events

Mô tả

Không gian tên chrome.events chứa các loại phổ biến mà các API gửi sự kiện sử dụng để thông báo cho bạn khi có điều thú vị xảy ra.

Khái niệm và cách sử dụng

Event là một đối tượng cho phép bạn nhận được thông báo khi có một điều gì đó thú vị xảy ra. Sau đây là một ví dụ về cách sử dụng sự kiện chrome.alarms.onAlarm để nhận thông báo mỗi khi một chuông báo trôi qua:

chrome.alarms.onAlarm.addListener((alarm) => {
  appendToLog(`alarms.onAlarm -- name: ${alarm.name}, scheduledTime: ${alarm.scheduledTime}`);
});

Trong ví dụ này, bạn đăng ký thông báo bằng addListener(). Đối số với addListener() luôn là một hàm bạn xác định để xử lý sự kiện, nhưng các tham số đến giá trị phụ thuộc vào sự kiện bạn đang xử lý. Đang kiểm tra tài liệu về alarms.onAlarm, bạn có thể thấy rằng hàm có một tham số duy nhất: đối tượng alarms.Alarm có các thông tin chi tiết về chuông báo đã trôi qua.

Các API mẫu sử dụng Sự kiện: báo thức, i18n, identity, thời gian chạy. Hầu hết Chrome API thì có.

Trình xử lý sự kiện khai báo

Trình xử lý sự kiện khai báo cung cấp một phương tiện để xác định các quy tắc bao gồm các điều kiện khai báo và hành động. Các điều kiện được đánh giá trong trình duyệt thay vì công cụ JavaScript, công cụ này giúp giảm độ trễ trọn vòng và cho phép hiệu quả rất cao.

Trình xử lý sự kiện khai báo được dùng, chẳng hạn như trong Khai báo Content API. Trang này mô tả các khái niệm cơ bản của tất cả sự kiện khai báo trình xử lý.

Quy tắc

Quy tắc đơn giản nhất có thể bao gồm một hoặc nhiều điều kiện và một hoặc nhiều hành động:

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

Nếu bất kỳ điều kiện nào được đáp ứng, thì tất cả các hành động sẽ được thực thi.

Ngoài các điều kiện và hành động, bạn có thể cung cấp cho mỗi quy tắc một mã nhận dạng để đơn giản hoá huỷ đăng ký các quy tắc đã đăng ký trước đó và mức độ ưu tiên để xác định mức độ ưu tiên giữa các quy tắc. Các mức độ ưu tiên chỉ được xem xét nếu các quy tắc xung đột với nhau hoặc cần được thực thi theo một cách cụ thể đơn đặt hàng. Các thao tác được thực thi theo thứ tự giảm dần của mức độ ưu tiên của các quy tắc.

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

Đối tượng sự kiện

Các đối tượng sự kiện có thể hỗ trợ quy tắc. Những đối tượng sự kiện này không gọi một hàm callback khi sự kiện xảy ra nhưng kiểm tra xem có bất kỳ quy tắc đã đăng ký nào có ít nhất một điều kiện được thực hiện hay không và thực thi các hành động liên quan đến quy tắc này. Các đối tượng sự kiện hỗ trợ API khai báo có 3 các phương thức phù hợp: events.Event.addRules(), events.Event.removeRules()events.Event.getRules().

Thêm quy tắc

Để thêm quy tắc, hãy gọi hàm addRules() của đối tượng sự kiện. Phải lấy một mảng các thực thể quy tắc làm tham số đầu tiên và hàm callback được gọi khi hoàn tất.

const rule_list = [rule1, rule2, ...];
addRules(rule_list, (details) => {...});

Nếu các quy tắc đã được chèn thành công, thì tham số details sẽ chứa một mảng các quy tắc được chèn xuất hiện theo thứ tự như trong rule_list đã chuyển, trong đó các tham số không bắt buộc idpriority đã được điền các giá trị đã tạo. Nếu có bất kỳ quy tắc nào không hợp lệ, ví dụ: do quy tắc đó chứa điều kiện hoặc hành động không hợp lệ, không có quy tắc nào được thêm và biến runtime.lastError được đặt khi hàm callback được gọi. Mỗi quy tắc trong rule_list phải chứa một quy tắc duy nhất giá trị nhận dạng chưa được quy tắc khác sử dụng hoặc giá trị nhận dạng trống.

Xoá quy tắc

Để xoá quy tắc, hãy gọi hàm removeRules(). Hàm này chấp nhận một loạt các giá trị nhận dạng quy tắc (không bắt buộc) làm tham số đầu tiên và hàm callback làm tham số thứ hai.

const rule_ids = ["id1", "id2", ...];
removeRules(rule_ids, () => {...});

Nếu rule_ids là một mảng giá trị nhận dạng thì tất cả quy tắc có giá trị nhận dạng được liệt kê trong mảng đó đều đã bị xóa. Nếu rule_ids liệt kê một giá trị nhận dạng mà không xác định, thì giá trị nhận dạng này sẽ tự động bị bỏ qua. Nếu rule_idsundefined, tất cả quy tắc đã đăng ký của tiện ích này đều bị xoá. callback() được gọi khi các quy tắc đã bị xoá.

Truy xuất quy tắc

Để truy xuất danh sách quy tắc đã đăng ký, hãy gọi hàm getRules(). Ứng dụng này chấp nhận một mảng không bắt buộc gồm các giá trị nhận dạng quy tắc có cùng ngữ nghĩa như removeRules() và một hàm callback.

const rule_ids = ["id1", "id2", ...];
getRules(rule_ids, (details) => {...});

Tham số details được truyền đến hàm callback() tham chiếu đến một mảng các quy tắc bao gồm tham số không bắt buộc.

Hiệu suất

Để đạt được hiệu suất tối đa, bạn nên lưu ý các nguyên tắc sau.

Đăng ký và huỷ đăng ký nhiều quy tắc cùng một lúc. Sau mỗi lần đăng ký hoặc huỷ đăng ký, Chrome cần cập nhật cấu trúc dữ liệu nội bộ. Cập nhật này là một thao tác tốn kém.

Thay vì
const rule1 = {...};
const rule2 = {...};
chrome.declarativeWebRequest.onRequest.addRules([rule1]);
chrome.declarativeWebRequest.onRequest.addRules([rule2]);
Ưu tiên
const rule1 = {...};
const rule2 = {...};
chrome.declarativeWebRequest.onRequest.addRules([rule1, rule2]);

Ưu tiên so khớp chuỗi con thay vì biểu thức chính quy trong events.UrlFilter. Quá trình so khớp dựa trên chuỗi con cực kỳ nhanh.

Thay vì
const match = new chrome.declarativeWebRequest.RequestMatcher({
  url: {urlMatches: "example.com/[^?]*foo" }
});
Ưu tiên
const match = new chrome.declarativeWebRequest.RequestMatcher({
  url: {hostSuffix: "example.com", pathContains: "foo"}
});

Nếu có nhiều quy tắc có cùng hành động, hãy hợp nhất các quy tắc thành một. Quy tắc sẽ kích hoạt hành động ngay khi một điều kiện duy nhất được đáp ứng. Việc này giúp đẩy nhanh khớp và giảm mức sử dụng bộ nhớ cho các nhóm hành động trùng lặp.

Thay vì
const condition1 = new chrome.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'example.com' }
});
const condition2 = new chrome.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'foobar.com' }
});
const rule1 = { conditions: [condition1],
                actions: [new chrome.declarativeWebRequest.CancelRequest()]
              };
const rule2 = { conditions: [condition2],
                actions: [new chrome.declarativeWebRequest.CancelRequest()]
              };
chrome.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
Ưu tiên
const condition1 = new chrome.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'example.com' }
});
const condition2 = new chrome.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'foobar.com' }
});
const rule = { conditions: [condition1, condition2],
              actions: [new chrome.declarativeWebRequest.CancelRequest()]
             };
chrome.declarativeWebRequest.onRequest.addRules([rule]);

Sự kiện đã lọc

Sự kiện được lọc là cơ chế cho phép người nghe chỉ định một nhóm nhỏ sự kiện quan tâm. Trình nghe sử dụng bộ lọc sẽ không được gọi cho các sự kiện không vượt qua giúp mã nghe rõ ràng và hiệu quả hơn. service worker cần không thức để xử lý các sự kiện mà nó không quan tâm.

Mục đích của sự kiện được lọc là cho phép chuyển đổi từ mã lọc thủ công.

Thay vì
chrome.webNavigation.onCommitted.addListener((event) => {
  if (hasHostSuffix(event.url, 'google.com') ||
      hasHostSuffix(event.url, 'google.com.au')) {
    // ...
  }
});
Ưu tiên
chrome.webNavigation.onCommitted.addListener((event) => {
  // ...
}, {url: [{hostSuffix: 'google.com'},
          {hostSuffix: 'google.com.au'}]});

Sự kiện hỗ trợ các bộ lọc cụ thể có ý nghĩa đối với sự kiện đó. Danh sách bộ lọc mà một sự kiện hỗ trợ sẽ được liệt kê trong tài liệu cho sự kiện đó trong "bộ lọc" .

Khi so khớp các URL (như trong ví dụ ở trên), bộ lọc sự kiện hỗ trợ so khớp cùng một URL các chức năng có thể biểu thị bằng events.UrlFilter, ngoại trừ việc so khớp giao thức và cổng.

Loại

Event

Đối tượng cho phép thêm và xoá trình nghe cho một sự kiện trên Chrome.

Thuộc tính

  • addListener

    void

    Đăng ký lệnh gọi lại trình nghe sự kiện cho một sự kiện.

    Hàm addListener có dạng như sau:

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

    • số gọi lại

      Số lần bị đánh trúng bóng

      Được gọi khi một sự kiện xảy ra. Các thông số của hàm này phụ thuộc vào loại sự kiện.

  • addRules

    void

    Đăng ký các quy tắc để xử lý các sự kiện.

    Hàm addRules có dạng như sau:

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

    • quy tắc

      Quy tắc<bất kỳ>[]

      Quy tắc cần đăng ký. Những quy tắc này không thay thế những quy tắc đã đăng ký trước đó.

    • số gọi lại

      hàm không bắt buộc

      Tham số callback sẽ có dạng như sau:

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

      • quy tắc

        Quy tắc<bất kỳ>[]

        Các quy tắc đã được đăng ký, các thông số không bắt buộc sẽ được điền giá trị.

  • getRules

    void

    Trả về các quy tắc hiện đã đăng ký.

    Hàm getRules có dạng như sau:

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

    • ruleIdentifiers

      string[] không bắt buộc

      Nếu một mảng được truyền, thì chỉ những quy tắc có giá trị nhận dạng nằm trong mảng này mới được trả về.

    • số gọi lại

      hàm

      Tham số callback sẽ có dạng như sau:

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

      • quy tắc

        Quy tắc<bất kỳ>[]

        Các quy tắc đã được đăng ký, các thông số không bắt buộc sẽ được điền giá trị.

  • hasListener

    void

    Hàm hasListener có dạng như sau:

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

    • số gọi lại

      Số lần bị đánh trúng bóng

      Trình nghe có trạng thái đăng ký sẽ được kiểm tra.

    • returns

      boolean

      Đúng nếu callback được đăng ký cho sự kiện.

  • hasListeners

    void

    Hàm hasListeners có dạng như sau:

    () => {...}

    • returns

      boolean

      Đúng nếu có bất kỳ trình nghe sự kiện nào được đăng ký cho sự kiện.

  • removeListener

    void

    Huỷ đăng ký lệnh gọi lại trình nghe sự kiện khỏi một sự kiện.

    Hàm removeListener có dạng như sau:

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

    • số gọi lại

      Số lần bị đánh trúng bóng

      Trình nghe sẽ bị huỷ đăng ký.

  • removeRules

    void

    Huỷ đăng ký các quy tắc hiện đã đăng ký.

    Hàm removeRules có dạng như sau:

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

    • ruleIdentifiers

      string[] không bắt buộc

      Nếu một mảng được truyền, thì chỉ những quy tắc có giá trị nhận dạng nằm trong mảng này mới bị huỷ đăng ký.

    • số gọi lại

      hàm không bắt buộc

      Tham số callback sẽ có dạng như sau:

      () => void

Rule

Nội dung mô tả về quy tắc khai báo để xử lý sự kiện.

Thuộc tính

  • hành động

    bất kỳ[]

    Danh sách các hành động được kích hoạt nếu một trong các điều kiện được đáp ứng.

  • các điều kiện

    bất kỳ[]

    Danh sách các điều kiện có thể kích hoạt hành động.

  • id

    chuỗi không bắt buộc

    Giá trị nhận dạng (không bắt buộc) cho phép tham chiếu quy tắc này.

  • của chiến dịch

    số không bắt buộc

    Mức độ ưu tiên không bắt buộc đối với quy tắc này. Giá trị mặc định là 100.

  • thẻ

    string[] không bắt buộc

    Thẻ có thể được dùng để chú thích cho các quy tắc và thực hiện các thao tác theo bộ quy tắc.

UrlFilter

Lọc URL theo nhiều tiêu chí. Hãy xem bài viết lọc sự kiện. Tất cả các tiêu chí đều phân biệt chữ hoa chữ thường.

Thuộc tính

  • cidrBlocks

    string[] không bắt buộc

    Chrome 123 trở lên

    So khớp nếu phần máy chủ lưu trữ của URL là địa chỉ IP và nằm trong bất kỳ khối CIDR nào được chỉ định trong mảng.

  • hostContains

    chuỗi không bắt buộc

    So khớp nếu tên máy chủ lưu trữ của URL có chứa chuỗi đã chỉ định. Để kiểm tra xem thành phần tên máy chủ lưu trữ có tiền tố "foo" hay không, hãy sử dụng broadcast receiver: ".foo". Tên này khớp với "www.foobar.com" và "foo.com", vì một dấu chấm ngầm ẩn được thêm vào đầu tên máy chủ lưu trữ. Tương tự, hostcontains có thể được dùng để so khớp với hậu tố thành phần ("foo.") và để so khớp chính xác với các thành phần (".foo."). Việc so khớp hậu tố và so khớp chính xác cho các thành phần cuối cùng cần được thực hiện riêng biệt bằng cách sử dụng hostSuffix, vì không có dấu chấm ngầm ẩn nào được thêm vào cuối tên máy chủ.

  • hostEquals

    chuỗi không bắt buộc

    So khớp nếu tên máy chủ lưu trữ của URL bằng một chuỗi đã chỉ định.

  • hostPrefix

    chuỗi không bắt buộc

    So khớp nếu tên máy chủ lưu trữ của URL bắt đầu bằng một chuỗi đã chỉ định.

  • hostSuffix

    chuỗi không bắt buộc

    So khớp nếu tên máy chủ lưu trữ của URL kết thúc bằng một chuỗi đã chỉ định.

  • originAndPathMatches

    chuỗi không bắt buộc

    So khớp nếu URL không có phân đoạn truy vấn và giá trị nhận dạng mảnh khớp với một biểu thức chính quy đã chỉ định. Số cổng sẽ bị xoá khỏi URL nếu số cổng đó khớp với số cổng mặc định. Biểu thức chính quy sử dụng cú pháp RE2.

  • pathContains

    chuỗi không bắt buộc

    So khớp nếu phân đoạn đường dẫn của URL có chứa một chuỗi đã chỉ định.

  • pathEquals

    chuỗi không bắt buộc

    So khớp nếu phân đoạn đường dẫn của URL bằng một chuỗi đã chỉ định.

  • pathPrefix

    chuỗi không bắt buộc

    So khớp nếu phân đoạn đường dẫn của URL bắt đầu bằng một chuỗi đã chỉ định.

  • pathSuffix

    chuỗi không bắt buộc

    So khớp nếu phân đoạn đường dẫn của URL kết thúc bằng một chuỗi đã chỉ định.

  • ports

    (số | số[8] không bắt buộc

    So khớp xem cổng của URL có nằm trong bất kỳ danh sách cổng nào được chỉ định hay không. Ví dụ: [80, 443, [1000, 1200]] khớp với mọi yêu cầu trên cổng 80, 443 và trong phạm vi 1000-1200.

  • queryContains

    chuỗi không bắt buộc

    So khớp nếu phân đoạn truy vấn của URL có chứa một chuỗi đã chỉ định.

  • queryEquals

    chuỗi không bắt buộc

    So khớp nếu phân đoạn truy vấn của URL bằng một chuỗi đã chỉ định.

  • queryPrefix

    chuỗi không bắt buộc

    So khớp nếu phân đoạn truy vấn của URL bắt đầu bằng một chuỗi đã chỉ định.

  • querySuffix

    chuỗi không bắt buộc

    So khớp nếu phân đoạn truy vấn của URL kết thúc bằng một chuỗi đã chỉ định.

  • kế hoạch

    string[] không bắt buộc

    So khớp xem giao thức của URL có bằng với bất kỳ giao thức nào được chỉ định trong mảng hay không.

  • urlContains

    chuỗi không bắt buộc

    So khớp xem URL (không có giá trị nhận dạng phân đoạn) có chứa chuỗi đã chỉ định hay không. Số cổng sẽ bị xoá khỏi URL nếu số cổng đó khớp với số cổng mặc định.

  • urlEquals

    chuỗi không bắt buộc

    So khớp nếu URL (không có giá trị nhận dạng phân đoạn) bằng một chuỗi đã chỉ định. Số cổng sẽ bị xoá khỏi URL nếu số cổng đó khớp với số cổng mặc định.

  • urlMatches

    chuỗi không bắt buộc

    So khớp xem URL (không có giá trị nhận dạng phân đoạn) có khớp với một biểu thức chính quy đã chỉ định hay không. Số cổng sẽ bị xoá khỏi URL nếu số cổng đó khớp với số cổng mặc định. Biểu thức chính quy sử dụng cú pháp RE2.

  • urlPrefix

    chuỗi không bắt buộc

    So khớp nếu URL (không có giá trị nhận dạng phân đoạn) bắt đầu bằng một chuỗi đã chỉ định. Số cổng sẽ bị xoá khỏi URL nếu số cổng đó khớp với số cổng mặc định.

  • urlSuffix

    chuỗi không bắt buộc

    So khớp nếu URL (không có giá trị nhận dạng phân đoạn) kết thúc bằng một chuỗi đã chỉ định. Số cổng sẽ bị xoá khỏi URL nếu số cổng đó khớp với số cổng mặc định.