2013-08-10 29 views
8

Tôi đang cố chặn một số yêu cầu trong ứng dụng Chrome.Yêu cầu chặn trong Chrome

Tôi tạo ra một người biết lắng nghe Javascript mà không xác nhận điều này:

chrome.webRequest.onBeforeRequest.addListener(
    { 
     urls: ["*://site.com/test/*"] 
    }, 
    ["blocking"] 
); 

Nhưng các yêu cầu không được ngăn chặn. Tôi đã bỏ lỡ điều gì đó trong mã này?

manifest của tôi:

"background": { 
     "scripts": ["listener.js"], 
     "persistent": true 
    }, 
"permissions": ["tabs", "http://*/*"], 
    "manifest_version": 2, 
+1

Nếu bạn [đã mở giao diện điều khiển cho trang nền] (http://stackoverflow.com/questions/10257301/where-to-read-console-messages-from-background-js-in -a-chrome-extension/10258029 # 10258029), bạn sẽ thấy thông báo lỗi về quyền không chính xác. Sau khi sửa các quyền, bạn sẽ thấy một thông báo lỗi khác chỉ ra rằng định dạng của lệnh gọi 'webRequest' API của bạn không hợp lệ. –

+0

Sử dụng liên kết này: [chặn yêu cầu trong google chrome với đối sánh mẫu] (https://stackoverflow.com/a/45784247/7487135) –

Trả lời

14

Dường như bạn hiểu lầm ý nghĩa của "chặn" ở đây.

https://developer.chrome.com/extensions/webRequest.html#subscription

Nếu mảng opt_extraInfoSpec tùy chọn chứa chuỗi 'chặn' (chỉ được phép cho các sự kiện cụ thể), chức năng gọi lại được xử lý cách đồng bộ. Điều đó có nghĩa là yêu cầu bị chặn cho đến khi hàm trả về trả về. Trong trường hợp này, cuộc gọi lại có thể trả lại BlockingResponse xác định vòng đời tiếp theo của yêu cầu .

Để chặn yêu cầu (hủy), hãy trả lại {cancel: true} trong trình xử lý sự kiện của bạn.

Ví dụ:

chrome.webRequest.onBeforeRequest.addListener(
    function() { 
     return {cancel: true}; 
    }, 
    { 
     urls: ["*://site.com/test/*"] 
    }, 
    ["blocking"] 
); 

này sẽ chặn tất cả các URL khớp *://site.com/test/*.

Cũng nhớ kê khai cả hai quyền webRequestwebRequestBlocking trong tệp kê khai của bạn.

3

Bạn có thể làm như sau:

  1. Create a new directory.
  2. Tạo các tệp bên dưới.
  3. Tải phần mở rộng giải nén ở chế độ nhà phát triển thông qua chrome://extensions/

background.js

chrome.webRequest.onBeforeRequest.addListener(
    function(){ return {cancel: true}; }, 
    { 
    urls: ["<all_urls>"], // Change this to a more specific pattern 
    types: ["script"] 
    }, 
    ["blocking"] 
); 

manifest.json

{ 
    "name": "Block request", 
    "version": "1.0", 
    "manifest_version": 2, 
    "background": { 
     "scripts": ["background.html"] 
    }, 
    "permissions": [ 
     "webRequest", 
     "webRequestBlocking", 
     "<all_urls>" 
    ] 
} 
Các vấn đề liên quan