在12.0以下的XULRunner版本中,它可以工作,但是当我尝试将其移植到12.0或更高版本时,它会使应用程序崩溃.主要原因是在sdk v12或更新的开发人员中删除代理对象到xpcom组件并建议通过使用nsRunnable/nsIRunnable包装对象来替换它,并通过函数NS_DispatchToMainThread将调用路由到主线程(单击此处)
我创建了db连接器,它通过回调与主线程异步和通信.使用:XULRunner v6,移植到XULRunner v17或更高版本
//nsIDBCallback.idl
[scriptable, function, uuid(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)]
interface nsIDBCallback : nsISupports {
void onInfo(in long phase, in long status, in string info);
}
Run Code Online (Sandbox Code Playgroud)
//nsDBService.h, it is XPCOM component
class nsDBService : public nsIDBService, nsIRunnable
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIRUNNABLE
NS_DECL_NSIDBSERVICE
private:
std::vector<nsIThread*> threads;
std::vector<nsIDBCallback*> callbacks;
std::vector<const char*> sqls;
nsIThread* makeNewThread();
void runOperationIfNotBussy();
public:
NS_IMETHODIMP Query(const char *sql, nsIDBCallback *callback);
}
Run Code Online (Sandbox Code Playgroud)
//nsDBService.cpp
// adding query and other data to buffers,
// it's thread safe, there are …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Internet Explorer插件移植到Firefox,但我不确定在哪里寻找我需要的东西.
基本上我需要能够使用某个Content-Type标头过滤浏览器收到的所有内容.我尝试实现流转换器,这是有效的,但仅适用于页面,框架或iframe中的顶级文档.我遇到了与IE相同的问题,并且绕过它真的很hacky,因为我理想这样做是跨平台的,我真的希望能够在Firefox中做到这一点而不诉诸vtable hacks.
内容以专有压缩格式压缩.因此,我需要接收数据,对其进行解压缩,然后将Content-Type更改回原始未压缩文件应具有的内容.
如果有一种方法可以过滤所有收到的数据,那可能是可以接受的,我可以自己处理解析标题.
谢谢
更新:我想主题给出了一个错误的观念,即我正在寻找一个现有的插件.这是一个自定义问题,我不想要现有的解决方案.
我想写(或更恰当地,修改和现有)插件.
这是我的要求:
我的插件的当前版本通过XPath表达式解析页面,解码数据并替换它们
问题出现在鼠标悬停事件中显示的那些冒泡的盒子
只是想知道我是否走在正确的道路上.如果"是",那么请提供任何可能适当的额外指示和建议; 如果"不",那么..好吧,请帮助正确的指针:)
谢谢,比
宾.
[1].https://developer.mozilla.org/en/NsITraceableChannel
[2].http://www.softwarehardhard.com/blog/firebug/nsitraceablechannel-intercept-http-traffic/
[3].http://www.ashita.org/howto-xhr-listening-by-a-firefox-addon/
我目前正在开发一个firefox附加组件,它是一个使用TCP套接字连接到服务器的客户端.
在我的小测试中一切正常,客户端(ff附加组件)连接到服务器(在java中设计)并发送消息,但之后firefox正在关闭套接字.
我知道我的代码在服务器端不是问题,因为我可以与其他客户端(用java和C++设计)连接,并且它们永远不会关闭连接.
我认为问题是firefox在没有引用它之后销毁套接字对象,因此关闭连接.
无论如何这里是我的代码:
const {Cc,Ci} = require("chrome");
var host="192.168.1.100";
var port=9001;
var transport = Components.classes["@mozilla.org/network/socket-transport-service;1"]
.getService(Components.interfaces.nsISocketTransportService)
.createTransport(null, 0, host, port, null);
var inputStream = transport.openInputStream(0, 0, 0);
var inputInterface = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
inputInterface.setInputStream(inputStream);
var outputStream = transport.openOutputStream(0, 0, 0);
var outputInterface = Components.classes["@mozilla.org/binaryoutputstream;1"].createInstance(Components.interfaces.nsIBinaryOutputStream);
outputInterface.setOutputStream(outputStream);
var msg="some message";
outputInterface.writeUtf8Z(msg);
Run Code Online (Sandbox Code Playgroud)
我正在使用firefox 7,我正在使用firefox附加组件SDK构建附加组件.
关于如何保持套接字存活的任何想法,以获得进一步的读数?
谢谢
我想从Delphi(XE)应用程序访问存储在Mozilla产品(Firefox和Thunderbird)中的证书.首先,我想列出它们,接下来能够管理它们(导入,导出,删除)并使用它们(符号)会很好.尽管使用mozilla支持的所有令牌,软件令牌就足够了.
到目前为止,我尝试使用XPCOM与http://d-gecko.svn.sourceforge.net/viewvc/d-gecko/trunk/ delphi绑定.然而,周围没有太多的文档,我有点混淆所有的术语和概念.我能管理的最好的是:
var ns:nsIX509CertDB;
servMgr:nsIServiceManager;
p:Pchar;
begin
GRE_Startup;
NS_GetServiceManager(servmgr);
servMgr.GetServiceByContractID('@mozilla.org/security/x509certdb;1',NS_IX509CERTDB_IID,ns);
ns.FindCertNicknames(nil,1,count,p);
GRE_Shutdown;
end;
Run Code Online (Sandbox Code Playgroud)
使用此代码,我确实获得了certdb对象的实例,并且我可以向它请求证书.但是它似乎是完全空的(来自FindCertNicknames的计数为0)并且它也不会对更改OCSP做出反应(IsOcspOn总是返回true).我想我创建了新的certstore,或者我需要以某种方式激活默认用户配置文件.
我也尝试访问softokn.dll作为PKCS#11库.由于这似乎有某种PKCS#11 API,因此响应不佳.即C_Inititialize上的CKR_BAD_ARGUMENTS.
最后也是非常糟糕的方式是直接访问证书文件,因为它应该是"标准"NSS,但我真的不喜欢这种方式.
我无法理解XPCOM.它与COM有什么不同?是什么让它跨平台?
它是一个带有一组库的框架,可以用来做一些工作吗?
此外,组件对象模型是否意味着每个功能都在组件中实现,因此我们可以在不知道详细实现的情况下使用它?
你能帮助我理解这个吗?谢谢,陈.
我正在研究编写一些篡改 HTTP POST 请求和响应的 JavaScript 代码。由于我想要编写的代码主要是概念验证,因此我认为 Firefox 扩展太多了(而且我宁愿不处理所有包装和 over SSL 限制)。当时我想知道是否可以将其编写为 Greasemonkey 脚本。因此我的问题是这样的:
您可以在 Greasemonkey 下使用 Mozilla 的事件观察器(http-on-modify-request 等)吗?
请记住,我 10 分钟前就了解了 JavaScript 是什么,但我在该领域没有任何经验。然而,我相信这在我的能力范围内,只要进行一点研究和顽固,我就可以实现它。尽管我担心尝试以不可能的方式完成某些事情。
谢谢!
乔治。
我正在为应用程序构建一个附件。客户需要付费查看一些网页并从中下载一些文件。他们希望通过加载项自动执行此下载过程。因此,他们不必单击“另存为”并等待下载完成,而是可以单击加载项而忽略该过程。问题是,网页正在向浏览器提供一些cookie。因此,最好的方法是File->“另存页面为”。我想通过附加组件来完成。是否有任何使用firefox-javascript的方法?我使用了nsiDownloader。但是它只保存html,而不保存图片等。有人可以指导我解决这个问题吗?
编辑: 嗨,这是完成欺骗的代码,这要归功于sai prasad
var dir =Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
dir.initWithPath("C:\\filename");
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("C:\\filename.html");
var wbp = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1']
.createInstance(Components.interfaces.nsIWebBrowserPersist);
alert("going to save");
wbp.saveDocument(content.document, file,dir, null, null, null);
alert("saved");
Run Code Online (Sandbox Code Playgroud)
编辑: 但是,仍然有些网页没有完全保存为“另存为”。那些保存的页面不像原始页面那样呈现,它们看起来像一些html示例。
我正在编写一个XPCOM组件.我有我的idl文件,它非常简单,只包含以下内容:
#include "nsISupports.idl"
[scriptable, uuid(4ead-ba5c-49c9-beb2=64209c7699a)]
interface nsIPageSummary : nsISupports
{
boolean saveSummary(in nsIDOMDocument document,
out unsigned long numLinks,
out unsigned long numImages);
};
Run Code Online (Sandbox Code Playgroud)
我下载了xulrunner sdk,并尝试通过以下命令从包含上述文件的目录(nsIPageSummary.idl)生成我的标头:
〜/ xulrunner-sdk/sdk/bin/header.py --cachedir =〜/ xulrunner-sdk/idl/-o nsIPageSummary.h nsIPageSummary.idl
运行时,我收到以下消息:
$ ~/xulrunner-sdk/sdk/bin/header.py --cachedir=~/xulrunner-sdk/idl -o nsIPageSummary.h nsIPageSummary.idl
Traceback (most recent call last):
File "~/xulrunner/xulrunner-sdk/sdk/bin/header.py", line 497, in <module>
idl.resolve(options.incdirs, p)
File "~/xulrunner/xulrunner-sdk/sdk/bin/xpidl.py", line 285, in resolve
p.resolve(self)
File "~/xulrunner-sdk/sdk/bin/xpidl.py", line 255, in resolve
raise IDLError("File '%s' not found" % self.filename, self.location)
xpidl.IDLError: error: File 'nsISupports.idl' not found, nsIPageSummary.idl …Run Code Online (Sandbox Code Playgroud) 如何禁用 .torrent 文件/内容类型应用程序/x-bittorrent 的默认操作(例如用对话框打开或运行程序),而是在扩展中处理数据?
xpcom ×10
javascript ×4
firefox ×3
xul ×2
c++ ×1
com ×1
delphi ×1
greasemonkey ×1
httprequest ×1
mime-filter ×1
mozilla ×1
pkcs#11 ×1
sockets ×1
webpage ×1
xulrunner ×1