gpt4 book ai didi

javascript - 火狐SDK |阻止加载图像 w.r.t.领域

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:21 25 4
gpt4 key购买 nike

我即将成为 Firefox 插件的一个功能是根据这 2 个标准阻止图像加载:

  1. IMG 来自特定(子)域(例如 *.example.com);
  2. IMG 的 url 或路径包含特定的词 (RegEx);

我在基于 WebRequest 的 Google Chrome 扩展中开发了这个功能(见下面的代码)。

background.js [Chrome 扩展]

var regex = '/example|example2/gi';

// -- Block request
function blockRequest(details) {
if( details.type === 'image' && details.url.split('://').pop().match(regex) ) {
return {cancel: true};
}
}
// -- Apply blocking
function applyBlocking(type) {
if(chrome.webRequest.onBeforeRequest.hasListener(type))
chrome.webRequest.onBeforeRequest.removeListener(type);
chrome.webRequest.onBeforeRequest.addListener(type, {
urls: [
'https://*.example.com/proxy/*'
]}, ['blocking']);
}

// Block
function blockTracking(a) {
if(a) {
applyBlocking(blockRequest);
}
}

我现在正尝试在 Firefox 中复制它,基于 SDK。基于this postthis one ,看来我将不得不注册一个观察者并使用XPCOM。但是,我很难找到更多关于如何访问使用 Firefox API 请求的文件类型和 url 的文档。任何帮助表示赞赏...

ma​​in.js [Firefox 扩展]

var { Cc, Ci } = require('chrome'),
regex = '/example|example2/gi';

var ApplyBlocking = {

observe: function(subject, topic) {
if (topic === 'http-on-modify-request') {

/* ??? */

}
},
get observerService() {
return Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
},

register: function() {
this.observerService.addObserver(this, 'http-on-modify-request', false);
},

unregister: function() {
this.observerService.removeObserver(this, 'http-on-modify-request');
}
};

// Block
function blockTracking(a) {
if(a) {
ApplyBlocking.register();
}
}

最佳答案

我最终实现的,以防其他人可能感兴趣...

var { Cc, Ci, Cr } = require('chrome'),
regex = '/example|example2/gi';

var ApplyBlocking = {

observe: function(subject, topic) {
if (topic === 'http-on-modify-request') {

var channel = subject.QueryInterface(Ci.nsIHttpChannel);

if ( channel.originalURI.spec.match('example.com/') && channel.originalURI.spec.split('://').pop().match(regex) ) {
channel.cancel(Cr.NS_BINDING_ABORTED);
}

}
},
get observerService() {
return Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
},

register: function() {
this.observerService.addObserver(this, 'http-on-modify-request', false);
},

unregister: function() {
this.observerService.removeObserver(this, 'http-on-modify-request');
}
};

// Block
function blockTracking(a) {
if(a) {
try { ApplyBlocking.register(); } catch(e) {}
} else {
try { ApplyBlocking.unregister(); } catch(e) {}
}
}

关于javascript - 火狐SDK |阻止加载图像 w.r.t.领域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23341782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com