Tôi có một phần mở rộng bootstrapped cho Firefox. Và bây giờ tôi muốn thực hiện thành phần nsIContentPolicy XPCOM. Tôi đã viết mã mô-đun thành phần. Và bây giờ tôi muốn đăng ký thành phần này. Lý do tôi muốn đăng ký thành phần là tôi muốn thêm thành phần của mình vào nsICategoryManager.addCategoryEntry
với danh mục "chính sách nội dung".Cách triển khai thành phần XPCOM (nsIContentPolicy) trong phần mở rộng Firefox được khởi động trước
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]);
Câu hỏi:
- Có thể đăng ký các thành phần từ phần mở rộng bootstrapped?
- Có thể đăng ký thành phần từ tiện ích mở rộng không khởi động lại không?
- Có thể sử dụng nsICategoryManager.addCategoryEntry "content-policy" nếu không có thành phần không?
- Cách đăng ký thành phần trong phần mở rộng được khởi động hoặc bằng cách nào đó thêm mục nhập danh mục "chính sách nội dung" mới?
tôi đã thêm vào khai thác-options.js
"requirements": {
"sdk/page-mod": "sdk/page-mod",
"sdk/self": "sdk/self",
"chrome": "chrome"},
Đó là cách tôi cố gắng nhập mô-đun:
var {Cc, Ci, Cu} = require("chrome");
Cu.import("resource://deferredto/lib/interceptor.js");
Tôi đã thử nhiều con đường))) Nhưng không ai công trinh. mục nhập tài nguyên trong tệp chrome.manifest không được phép cho tiện ích mở rộng được khởi động. Đường dẫn đến tệp mô-đun thành phần là: resources/deferredto/lib/interceptor.js
Cuối cùng tôi tìm thấy giải pháp Firefox Addon SDK cho việc này: [nền tảng/XPCOM mô-đun] (https: // addons. mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/platform/xpcom.html). –
Không nhận thức được điều đó. Tốt để biết. Các ý kiến về các loại, đặc biệt là phần dỡ hàng, vẫn đứng. ;) – nmaier
Có thể là mô-đun mới này. Tôi đã điều tra vấn đề trước và SDK bổ sung là nơi đầu tiên để kiểm tra. –