标签: xpcom

XPCOM C++多线程和javascript回调

背景

在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)

javascript c++ multithreading xul xpcom

7
推荐指数
1
解决办法
464
查看次数

如何在Firefox中为所有页面元素实现内容转换器?

我正在尝试将Internet Explorer插件移植到Firefox,但我不确定在哪里寻找我需要的东西.

基本上我需要能够使用某个Content-Type标头过滤浏览器收到的所有内容.我尝试实现流转换器,这是有效的,但仅适用于页面,框架或iframe中的顶级文档.我遇到了与IE相同的问题,并且绕过它真的很hacky,因为我理想这样做是跨平台的,我真的希望能够在Firefox中做到这一点而不诉诸vtable hacks.

内容以专有压缩格式压缩.因此,我需要接收数据,对其进行解压缩,然后将Content-Type更改回原始未压缩文件应具有的内容.

如果有一种方法可以过滤所有收到的数据,那可能是可以接受的,我可以自己处理解析标题.

谢谢

firefox xpcom mime-filter

6
推荐指数
1
解决办法
793
查看次数

创建Firefox Addon以观察和修改XHR请求和响应

更新:我想主题给出了一个错误的观念,即我正在寻找一个现有的插件.这是一个自定义问题,我不想要现有的解决方案.
我想写(或更恰当地,修改和现有)插件.

这是我的要求:

  • 我希望我的插件只能用于特定网站
  • 页面上的数据使用双向散列进行编码
  • XHR请求会加载大量信息,有时会显示在动画气泡等中.
  • 我的插件的当前版本通过XPath表达式解析页面,解码数据并替换它们

  • 问题出现在鼠标悬停事件中显示的那些冒泡的盒子

  • 因此,我意识到创建一个可以监听所有数据并在运行中解码/编码的XHR桥可能是一个好主意.
  • 经过几次搜索,我遇到了nsITraceableInterface [1] [2] [3]

只是想知道我是否走在正确的道路上.如果"是",那么请提供任何可能适当的额外指示和建议; 如果"不",那么..好吧,请帮助正确的指针:)

谢谢,比
宾.

[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/

javascript xpcom xmlhttprequest firefox-addon

6
推荐指数
1
解决办法
4755
查看次数

XPCOM Socket正在关闭.如何保持活力?

我目前正在开发一个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构建附加组件.

关于如何保持套接字存活的任何想法,以获得进一步的读数?

谢谢

sockets firefox xpcom firefox-addon firefox-addon-sdk

6
推荐指数
1
解决办法
711
查看次数

从Delphi访问Mozilla证书

我想从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,但我真的不喜欢这种方式.

delphi mozilla xpcom pkcs#11 x509certificate

6
推荐指数
1
解决办法
795
查看次数

什么是XPCOM?XPCOM与COM?

我无法理解XPCOM.它与COM有什么不同?是什么让它跨平台?

它是一个带有一组库的框架,可以用来做一些工作吗?

此外,组件对象模型是否意味着每个功能都在组件中实现,因此我们可以在不知道详细实现的情况下使用它?

你能帮助我理解这个吗?谢谢,陈.

com xpcom

5
推荐指数
1
解决办法
1054
查看次数

Greasemonkey 和 http-on-modify-request

我正在研究编写一些篡改 HTTP POST 请求和响应的 JavaScript 代码。由于我想要编写的代码主要是概念验证,因此我认为 Firefox 扩展太多了(而且我宁愿不处理所有包装和 over SSL 限制)。当时我想知道是否可以将其编写为 Greasemonkey 脚本。因此我的问题是这样的:

您可以在 Greasemonkey 下使用 Mozilla 的事件观察器(http-on-modify-request 等)吗?

请记住,我 10 分钟前就了解了 JavaScript 是什么,但我在该领域没有任何经验。然而,我相信这在我的能力范围内,只要进行一点研究和顽固,我就可以实现它。尽管我担心尝试以不可能的方式完成某些事情。

谢谢!

乔治。

javascript greasemonkey xpcom httprequest

5
推荐指数
1
解决办法
2220
查看次数

如何在本地保存网页,包括图片等

我正在为应用程序构建一个附件。客户需要付费查看一些网页并从中下载一些文件。他们希望通过加载项自动执行此下载过程。因此,他们不必单击“另存为”并等待下载完成,而是可以单击加载项而忽略该过程。问题是,网页正在向浏览器提供一些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示例。

javascript firefox webpage xpcom firefox-addon

5
推荐指数
1
解决办法
1万
查看次数

如何使用xpidl(header.py,typelib.py)

我正在编写一个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)

xul xulrunner xpcom firefox-addon

5
推荐指数
1
解决办法
1231
查看次数

拦截/处理 MIME 类型/文件

如何禁用 .torrent 文件/内容类型应用程序/x-bittorrent 的默认操作(例如用对话框打开或运行程序),而是在扩展中处理数据?

xpcom firefox-addon firefox-addon-sdk

5
推荐指数
1
解决办法
2762
查看次数