我有一個引導的Firefox擴展。 現在我想實現nsIContentPolicy XPCOM組件。 我寫了一個組件模塊代碼。 現在我想註冊這個組件。 我想註冊組件的原因是我想用「content-policy」類別將我的組件添加到nsICategoryManager.addCategoryEntry
。如何在自舉的Firefox擴展中實現XPCOM組件(nsIContentPolicy)
var {Cc, Ci, Cu} = require("chrome");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
//console.error("Running interceptor");
function Interceptor()
}
Interceptor.prototype = {
classDescription: "DeferredTo HTTP requests Interceptor",
classID: "{B5B3D9A0-08FC-11E3-8253-5EF06188709B}",
contractID: "@deferredto.com/Interceptor;1",
QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPolicy]),
shouldLoad : function dt_shouldLoad(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aExtra) {
console.log("dt_shouldLoad");
if (contentLocation.scheme != "http" && contentLocation.scheme != "https")
return Ci.nsIContentPolicy.ACCEPT;
let result = Ci.nsIContentPolicy.ACCEPT;
// we should check for TYPE_SUBDOCUMENT as well if we want frames.
if ((Ci.nsIContentPolicy.TYPE_DOCUMENT == aContentType) &&
SOME_REGULAR_EXPRESSION.test(aContentLocation.spec)) {
// do stuff here, possibly changing result.
}
return result;
},
shouldProcess: function ILO_shouldProcess() Ci.nsIContentPolicy.ACCEPT,
_xpcom_categories: [
{ category: "content-policy", service: true }
],
classInfo: XPCOMUtils.generateCI(
{classID: Components.ID("{B5B3D9A0-08FC-11E3-8253-5EF06188709B}"),
contractID: "@deferredto.com/Interceptor;1",
classDescription: "Interceptor implements nsIContentPolicy to block images that are not yet at screen @DeferredTo",
interfaces: [
Ci.nsIContentPolicy,
],
flags: Ci.nsIClassInfo.SINGLETON})
}
var components = [Interceptor];
var NSGetFactory = XPCOMUtils.generateNSGetFactory([Interceptor]);
問題:
- 是否可以註冊從自舉擴展組件?
- 是否可以從重新啓動擴展註冊組件?
- 是否可以在不使用 組件的情況下使用nsICategoryManager.addCategoryEntry「content-policy」?
- 如何在自舉擴展中註冊組件或以某種方式添加新的「content-policy」類別條目 ?
我已經加入到線束options.js
"requirements": {
"sdk/page-mod": "sdk/page-mod",
"sdk/self": "sdk/self",
"chrome": "chrome"},
這就是我嘗試導入模塊:
var {Cc, Ci, Cu} = require("chrome");
Cu.import("resource://deferredto/lib/interceptor.js");
我已經試過許多路徑)))但沒有作品。 chrome.manifest文件中的資源項不允許引導擴展名。組件模塊文件的路徑如下: resources/deferredto/lib/interceptor.js
最後我發現這個Firefox附加組件SDK解決方案: [平臺/ XPCOM組件(https://開頭的插件。 mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/platform/xpcom.html)。 –
不知道這一點。很高興知道。關於類別的評論,特別是卸載部分,仍然存在。 ;) – nmaier
可能是這個新模塊。我之前調查過這個問題,並且Add-on SDK是第一個要檢查的地方。 –