Javascript Firefox SDK |块加载图像w.r.t.域

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访问请

我即将推出的Firefox插件的一个功能是基于以下两个标准阻止图像加载:

  • IMG来自一个特定的(子)域(例如*.example.com)
  • IMG的url或路径包含特定单词(RegEx) 我在一个基于WebRequest的Google Chrome扩展中开发了这个特性(见下面的代码)

    background.js[浏览器扩展]

    我现在正试图在Firefox中复制这一点,并将其放在SDK上。基于和 ,似乎我必须注册一个观察家并使用XPCOM。但是,我很难找到更多关于如何使用FirefoxAPI访问请求的文件类型和URL的文档。感谢您的帮助

    main.js[Firefox扩展]


    我最终实现的,以防其他人对它感兴趣

    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();
        }
    }