2013-09-08 23 views
7

Tôi đang đăng lại câu hỏi của mình từ nhóm Google Chrome mở rộng ở đây.Cách hủy bỏ webRequest một cách im lặng trong tiện ích mở rộng chrome

Trong tiện ích mở rộng của mình, tôi muốn hủy một số yêu cầu web dựa trên mẫu url. Vấn đề của tôi là, nếu tôi trả lại {cancel: true} trong số onBeforeRequest trình xử lý sự kiện, trình duyệt sẽ chuyển hướng đến một trang cho biết rằng yêu cầu bị chặn bởi một số tiện ích mở rộng. Nhưng tôi chỉ muốn hủy bỏ yêu cầu âm thầm (như không có gì xảy ra).

Tôi cũng đã cố gắng để trở {redirectUrl: ""} trong onBeforeRequest nghe sự kiện, giao diện điều khiển sẽ đăng nhập một lỗi nói rằng "" không phải là một URL hợp lệ và quầy bar xuất hiện ở dưới cùng của trình duyệt, nói "Đang chờ gia hạn". Để loại bỏ thanh đó, sau đó tôi chạy tập lệnh nội dung "window.stop()" trong trang web đó. Điều đó đôi khi hoạt động, nhưng không phải lúc nào. Vì vậy, tôi tự hỏi nếu ai đó có bất kỳ giải pháp tốt hơn. Cảm ơn!!

+1

không '{redirectUrl: "javascript:"} 'giúp? – OneOfOne

+0

Cảm ơn bạn đã trả lời nhanh. Tôi đã thử điều đó, và nó hoạt động !! Không bao giờ nghĩ rằng nó có thể đơn giản như vậy. – Jun

+0

@Jun Làm thế nào để thay đổi câu trả lời được chấp nhận? – aaaaaaaaaaaa

Trả lời

15

Bạn nên sử dụng "javascript:" url thay vì:

{ 
    redirectUrl:"javascript:" 
} 
+1

Hoạt động hoàn hảo .. Cảm ơn câu trả lời ngắn và hoàn hảo này. Tôi đã sử dụng tính năng này trong tiện ích chrome của mình (Yêu cầu) để chặn các yêu cầu. https://chrome.google.com/webstore/detail/requestly/mdnleldcmiljblolnjhpnblkcekpdkpa – sachinjain024

6

Chuyển hướng đến trang trả lời bằng mã trạng thái HTTP 204, ví dụ: https://robwu.nl/204Đây là trang web của tôi và tôi không ghi lại bất kỳ lưu lượng truy cập nào đến URL này.

The specification đòi hỏi các hành vi sau đây cho một phản ứng với trạng thái HTTP 204:

Nếu khách hàng là một tác nhân người dùng, nó KHÔNG NÊN thay đổi quan điểm tài liệu của mình từ đó mà gây ra các yêu cầu được gửi đi. Phản hồi này chủ yếu nhằm cho phép đầu vào cho các hành động diễn ra mà không gây ra thay đổi đối với chế độ xem tài liệu đang hoạt động của tác nhân người dùng, mặc dù bất kỳ biến thể mới hoặc cập nhật nào NÊN được áp dụng cho tài liệu hiện có trong chế độ xem đang kích hoạt của tác nhân người dùng.

Đây là một ví dụ đơn giản, tiện ích mà âm thầm ngăn chặn tất cả các yêu cầu lên YouTube:

chrome.webRequest.onBeforeRequest.addListener(function(details) { 
    var scheme = /^https/.test(details.url) ? 'https' : 'http'; 
    return { redirectUrl: scheme + '://robwu.nl/204' }; 
}, { 
    urls: ['*://www.youtube.com/*'] // Example: Block all requests to YouTube 
}, ['blocking']); 

Ví dụ này chuyển hướng đến http://robwu.nl/204 hoặc https://robwu.nl/204 tùy thuộc vào kế hoạch của các yêu cầu, để tránh cảnh báo nội dung hỗn hợp.

Để ví dụ này hoạt động, bạn cần khai báo quyền truy cập webRequest, webRequestBlocking và máy chủ lưu trữ cho trang web trong tệp kê khai.

+0

Cảm ơn bạn đã trả lời nhanh. Tôi đã thử phương pháp này, nó hoạt động chính xác như tôi muốn. Điều này thực sự sạch sẽ và thông minh. – Jun

+0

@ rob-w đây là một câu trả lời tuyệt vời, bạn có thể vui lòng xuất bản một ý kiến ​​về cách bạn xử lý nó trên máy chủ, không phải là tôi không tin tưởng bằng cách sử dụng máy của bạn, nhưng tôi sẽ thử -máy chủ http nền tảng, nó nên có độ trễ bậc cao hơn độ trễ (thấp hơn) và tôi vẫn sử dụng một ứng dụng khách và nhắn tin gốc. – wesam

3
return {redirectUrl: 'javascript:void(0)'}; 
Các vấn đề liên quan