Javascript Firefox SDK |块加载图像w.r.t.域
我即将推出的Firefox插件的一个功能是基于以下两个标准阻止图像加载:Javascript Firefox SDK |块加载图像w.r.t.域,javascript,firefox-addon-sdk,Javascript,Firefox Addon Sdk,我即将推出的Firefox插件的一个功能是基于以下两个标准阻止图像加载: IMG来自一个特定的(子)域(例如*.example.com) IMG的url或路径包含特定单词(RegEx) 我在一个基于WebRequest的Google Chrome扩展中开发了这个特性(见下面的代码) background.js[浏览器扩展] 我现在正试图在Firefox中复制这一点,并将其放在SDK上。基于和 ,似乎我必须注册一个观察家并使用XPCOM。但是,我很难找到更多关于如何使用FirefoxAPI访问请
我最终实现的,以防其他人对它感兴趣
var{Cc,Ci,Cr}=require('chrome'),
正则表达式='/example | example2/gi';
var applyblock={
观察:功能(主题、主题){
如果(主题===“修改请求时的http”){
var channel=subject.QueryInterface(Ci.nsIHttpChannel);
if(channel.originalURI.spec.match('example.com/')和&channel.originalURI.spec.split('://').pop().match(regex)){
频道取消(Cr.NS\u绑定\u中止);
}
}
},
获取observer服务(){
返回Cc['@mozilla.org/observer service;1'].getService(Ci.nsIObserverService);
},
寄存器:函数(){
this.observerService.addObserver(this'http on modify request',false);
},
取消注册:函数(){
this.observerService.removeObserver(这是“修改请求时的http”);
}
};
//挡块
功能块跟踪(a){
如果(a){
尝试{applyblock.register();}catch(e){}
}否则{
请尝试{applyblock.unregister();}catch(e){}
}
}
感谢您继续提供答案!
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);
}
}
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();
}
}