我正在阅读有关XPCOM组件的开发.我遇到了这些称为白名单数据和黑名单数据的术语,我试图在谷歌上找到但不能......我不知道它与编程有什么关系,所以请原谅我,如果我把问题放在错误的地方..
我正在使用Execute JS在Firefox中编写和测试Javascript代码.我想打开一个新的标签/窗口并写一些东西,我试过了
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
var win = wm.getMostRecentWindow("navigator:browser");
printWindow = win.open("about:blank");
printWindow = wm.getMostRecentWindow("navigator:browser");
printWindow.gBrowser.selectedBrowser.contentDocument.write('hello');
Run Code Online (Sandbox Code Playgroud)
和
myWindow=window.open('','','width=200,height=100')
myWindow.document.write("<p>This is 'myWindow'</p>")
myWindow.focus()
Run Code Online (Sandbox Code Playgroud)
但是我总是得到这个错误
[例外......"手术不安全." 代码:"18"nsresult:"0x80530012(SecurityError)"
有没有办法解决这个异常?
为了告知用户可能存在的冲突,我想让我的附加组件检查是否已安装并启用了另一个加载项.如果是这样,我可以在用户的遗赠中禁用它或我自己:
function disableExtension(id) {
var man = Components.classes["@mozilla.org/extensions/manager;1"];
if (man) {
man = man.getService(Components.interfaces.nsIExtensionManager);
}
if (man) {
man.disableItem(id);
} else {
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID(id, function(addon) {
addon.userDisabled = true;
});
}
}
Run Code Online (Sandbox Code Playgroud)
但我首先要检查是否安装了某个其他附加组件.目前,我这样做如下:
if (Application.extensions) {
// Gecko 1.9.2 and older
ext = Application.extensions.get(id);
if (ext) {
// TODO check if extension is also enabled
disableExtension(id);
}
} else {
// Gecko 2.0.0 and newer
Application.getExtensions(function(extensions) {
ext = extensions.get(id);
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID(id, function(addon) {
if (!addon.userDisabled) {
disableExtension(id); …Run Code Online (Sandbox Code Playgroud) 我打算为专有系统设计一个应用程序XUL和XPCOM.所以我决定使用C/C++但是如何在这个领域作为初学者开始开发我找不到一个好的指南来开始.如果你能提供一些链接和书籍,那将是件好事.我还想知道如何防止用户在视图部分中特别修改代码,因为逻辑可以在XPCOM中完成.
使用python virtualbox API而不是使用XPCOM有什么好处?
我一直在寻找不同的教程,我知道我很接近,但我在实现细节上迷失了,因为其中一些有点过时了,自Firefox 3以来有些事情发生了变化.我已经编写了javascript for firefox扩展,现在我需要将它变成一个XPCOM组件.
这是我需要的功能:我的Javascript文件很简单,我有两个功能startServer()和stopServer.我需要startServer()在浏览器启动时和stopServer()firefox退出时运行.
我用一个有效的解决方案更新了我的代码(感谢Neil).以下是MyExtension/components/myextension.js.
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
const CI = Components.interfaces, CC = Components.classes, CR = Components.results;
// class declaration
function MyExtension() {}
MyExtension.prototype = {
classDescription: "My Firefox Extension",
classID: Components.ID("{xxxx-xxxx-xxx-xxxxx}"),
contractID: "@example.com/MyExtension;1",
QueryInterface: XPCOMUtils.generateQI([CI.nsIObserver]),
// add to category manager
_xpcom_categories: [{
category: "profile-after-change"
}],
// start socket server
startServer: function () { /* socket initialization code */ },
// stop socket server
stopServer: function () …Run Code Online (Sandbox Code Playgroud) 我想为与我的模式匹配的URL添加前缀.当我在Firefox中打开一个新选项卡并输入匹配的URL时,不应该正常加载页面,首先应该修改URL,然后开始加载页面.
是否可以在页面开始加载之前通过Mozilla Firefox Addon修改URL?
我正在尝试开发一个Firefox扩展,将每个HTTP请求丢弃到某个站点并返回一个假响应.没有请求应该通过原始Web服务器,但我希望能够创建自定义响应.我试图拦截"http-on-modify-request"消息,但是取消请求似乎不起作用,因为我之后无法模拟真实的响应.同样,使用nsITraceableStream实例,我似乎无法真正取消请求.我没有想法,有人可以帮忙吗?
我正在开发一个Firefox插件,它需要拦截HTTP请求进程并返回某些URL的虚假响应.这是我正在使用的代码:
function TracingListener() {
this.originalListener = null;
}
TracingListener.prototype = {
onDataAvailable: function(request, context, inputStream, offset, count) {
LOG("onDataAvailable");
this.originalListener.onDataAvailable(request, context, inputStream, offset, count);
},
onStartRequest: function(request, context) {
LOG("onStartRequest");
this.originalListener.onStartRequest(request, context);
},
onStopRequest: function(request, context, statusCode) {
LOG("onStopRequest");
this.originalListener.onStopRequest(request, context, statusCode);
var stream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(Ci.nsIStringInputStream);
stream.setData("Test", -1);
this.originalListener.onStopRequest(request, context, Components.results.NS_OK);
},
QueryInterface: function (aIID) {
if (aIID.equals(Ci.nsIStreamListener) ||
aIID.equals(Ci.nsISupports)) {
return this;
}
throw Components.results.NS_NOINTERFACE;
}
};
var observer = {
observe: function(subject, topic, data) {
LOG(topic);
var httpChannel …Run Code Online (Sandbox Code Playgroud) 我过去曾从事过Mozilla附加开发(初学者级别).但在遇到XPCOM时,我真的很害怕,把它留在中间.
最近我才遇到Add-on SDK并发现它非常酷,看到之前几个月的工作与SDK的工作时间不超过2天真的很吸引人.现在我再次陷入XPCOM模块.
现在我真的想利用XPCOM的强大功能但是至少需要一周时间才能在SDK环境中熟悉XPCOM.我需要什么代码才能获得我想要的功能?
对于每个用户会话,我想记录一些东西.我能够区分会话.我现在想的是建立在用户的计算机文件,从附加打开它,并写些东西到它的代码.
用于访问书签和下载并阅读它们的代码.
如果我不得不从SDK切换回来,那将是一个令人心碎的时刻.