firefox插件的nsIContentPolicy示例?

firefox插件的nsIContentPolicy示例?,firefox,firefox-addon,Firefox,Firefox Addon,我已经阅读并搜索了整个Stackoverflow,寻找实现NsIContentPolicy的适当教程,但都是徒劳的。我知道Adblock使用NsIContentPolicy作为他们的主要武器。逆向工程Adblock并没有帮助我理解如何实施策略。有没有使用NsIContentPolicy进行学习的简单插件,或者有没有关于NsIContentPolicy的好教程?我不知道有什么好教程,但我可以给你一些简单的示例代码: Cu.import(“resource://gre/modules/XPCOMUt

我已经阅读并搜索了整个Stackoverflow,寻找实现NsIContentPolicy的适当教程,但都是徒劳的。我知道Adblock使用NsIContentPolicy作为他们的主要武器。逆向工程Adblock并没有帮助我理解如何实施策略。有没有使用NsIContentPolicy进行学习的简单插件,或者有没有关于NsIContentPolicy的好教程?

我不知道有什么好教程,但我可以给你一些简单的示例代码:

Cu.import(“resource://gre/modules/XPCOMUtils.jsm");
特写:进口resource://gre/modules/Services.jsm");
出租政策=
{
classDescription:“测试内容策略”,
classID:Components.ID(“{12345678-1234-1234-1234-123456789abc}”),
缩写:“@adblockplus.org/testpolicy;1”,
xpcom_类别:[“内容策略”],
init:function()
{
让register=Components.manager.QueryInterface(Ci.nsicomponentregister);
register.registerFactory(this.classID,this.classDescription,this.construcd,this);
让catMan=Cc[“@mozilla.org/categorymanager;1”].getService(Ci.nsicegorymanager);
对于每个(让category在此.xpcom\u categories中)
catMan.addCategoryEntry(类别,this.construcd,this.construcd,false,true);
添加((函数()
{
对于每个(让category在此.xpcom\u categories中)
catMan.deleteCategoryEntry(类别,this.contracted,false);
//这需要异步运行,请参见错误753687
Services.tm.currentThread.dispatch(function()函数)
{
注册人。未注册工厂(this.classID,this);
}.bind(this),Ci.nsIEventTarget.DISPATCH(正常);
}).约束(这个);
},
//nsIContentPolicy接口实现
shouldLoad:函数(contentType、contentLocation、requestOrigin、node、mimeTypeGuess、extra)
{
转储(“shoulload:+contentType+”+
(contentLocation?contentLocation.spec:“null”)+“”+
(requestOrigin?requestOrigin.spec:“null”)+“”+
节点+“”+
mimeTypeGuess+“\n”);
返回Ci.nsicontpolicy.ACCEPT;
},
shouldProcess:函数(contentType、contentLocation、requestOrigin、node、mimeTypeGuess、extra)
{
转储(“shouldProcess:+contentType+”+
(contentLocation?contentLocation.spec:“null”)+“”+
(requestOrigin?requestOrigin.spec:“null”)+“”+
节点+“”+
mimeTypeGuess+“\n”);
返回Ci.nsicontpolicy.ACCEPT;
},
//NSI工厂接口实现
createInstance:函数(外部,iid)
{
如果(外部)
抛出Cr.NS\u ERROR\u NO\u聚合;
返回此.QueryInterface(iid);
},
//NSI支持接口实现
QueryInterface:XPCOMUtils.generateQI([Ci.nsIContentPolicy,Ci.nsIFactory])
};
policy.init();
这来自于我用来研究内容策略实现问题的最小内容策略实现—它除了将所有内容策略调用转储到控制台()之外,什么都不做。显然,在实际实现中,
classDescription
classID
construct
字段应该更改为适当的字段
onShutdown
属于我正在使用的私有框架:此扩展是无重启的,这就是它需要“手动”注册组件的原因,如果在浏览器会话期间关闭组件,它还将运行此代码以将其删除


您还可以下载完整的扩展名:。

Wladimir,testpolicy.xpi正是我要找的:)非常感谢:)示例链接已断开,导入需要更新,但仍然只阻止网络内容,如何更改dom树?@msangel:我更新了链接。这里的代码仅仅是一个简单的自举扩展的示例-如果您的扩展是基于SDK的,那么您可以自由调整它,使其适合您,但请不要编辑文章。问题在于内容策略只对阻止网络请求有用,DOM修改必须通过其他方式进行。