问题标签 [xpcom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3619 浏览

firefox - 在 XPCOM 组件(Firefox 扩展)中使用套接字(nsIServerSocket)(套接字 + 新窗口 = 段错误)

如果您对此问题感兴趣,请阅读下面的更新 #2 ;)

假设我将此代码放入我的扩展程序的 JS 中。

然后我运行 Firefox 并通过 telnet 连接到套接字

我发送了 5 条消息,它们被打印出来,但是当我尝试发送第 6 条消息时,我得到了

更糟糕的是,当我尝试将相同的代码放入 XPCOM 组件中时(因为那是我真正需要它的地方),在我尝试通过 telnet 发送消息后,我得到

或者有时

打印到我启动 Firefox 的终端。

这真的很奇怪。你能发现我粘贴的代码有问题吗?或者我的 Firefox/系统有问题,或者 nsIServerSocket 接口是否已弃用?

我正在使用 Firefox 3.6.6 进行测试。

我真的很感激一些答案。也许你可以给我指出一个在 XPCOM 组件中使用 Sockets 的好例子。我周围很多人都没见过。

更新

我刚刚意识到它曾经可以工作,所以现在我认为我的控制台组件破坏了它。我不知道这有什么关系。但是,如果我不使用此组件,则套接字工作正常。

这是我的控制台组件的代码。我将尝试找出问题所在以及它为什么会干扰,稍后我会发布我的发现。很可能我在这里做了一些非常错误的事情,导致我的 javascript 出现分段错误 =)

巫毒教..

组件/Console.js:

我正在使用这样的组件:

这打破了套接字:-S =)

更新 #2 好的,如果有人有兴趣检查这件事,我将不胜感激 + 我认为这可能是某种错误(不应该发生来自 javascript 的 Seg 错误)我已经制作了一个最小版本的扩展导致问题,您可以从这里安装它:

http://dl.dropbox.com/u/645579/segfault.xpi

重要的部分是 chrome/content/main.js:

http://pastebin.com/zV0e73Na

我和朋友重现错误的方法是启动 Firefox,然后应该会出现一个新窗口,上面写着“Opened socket on 9999”。使用“telnet localhost 9999”连接并发送一些消息。在 2-6 条消息之后,您会在启动 Firefox 的终端中打印出以下内容之一:

1(最常见)

分段故障

2(多次看到)

firefox-bin:X 服务器:0.0 上的致命 IO 错误 11(资源暂时不可用)。

3(看过几次)

GLib-ERROR **: /build/buildd/glib2.0-2.24.1/glib/gmem.c:137: 分配 32 字节失败正在中止...中止

4(看过一次)

firefox-bin: ../../src/xcb_io.c:249: process_responses: Assertion `(((long) (dpy->last_request_read) - (long) (dpy->request)) <= 0)' 失败. 中止

如果您需要更多信息或可以指出我在哪里发布错误报告:-/ 我很乐意这样做。

我知道这只是众多错误之一......但也许你知道我应该做些什么来避免这种情况?我想以这种方式使用我的那个“控制台”。

我会按照人们的建议尝试使用 buffer/flushing/try/catch 来做,但我想知道 try/catch 是否会捕获 Seg 错误......

0 投票
1 回答
109 浏览

firefox - 创建 JS XPCOM 服务时,classID 可以是随机的吗?

当我创建一个 JS XPCOM 服务时,用于 classID 的 guid 可以只是一个随机生成的字符串,对吗?遵循这里的指示?

我问是因为我正在分叉另一个项目并将其更改为另一个随机生成的值,我相信我也正确更改了 classDescription 和 contractID,但我没有任何成功。所以我只是想检查一下我的理解是否正确。

0 投票
1 回答
1046 浏览

javascript - 在 firefox XPCOM 组件中使用 eval.call()

我正在制作一个扩展,在加载每个页面时都会专门为该页面创建我的 xpcom 组件的实例。

我这样做:

我的问题是,在 XPCOM 组件中,如何在该文档的全局上下文中使用 eval() 。如果您只是在 html 中的常规 javascript 中执行此操作,您可以执行以下操作:

问题是我的 xpcom 组件中没有窗口变量(或者我没有),我只有对文档的引用。我也可以在创建时将窗口传递给我的 XPCOM 组件,但是如果我打开了几个页面,我看不出它是如何工作的。

0 投票
1 回答
295 浏览

c++ - 在 Firefox 中注册 XPCOM。未知 CID

我在此示例中将示例 XPCOM 组件注册到 firefox 时遇到困难:http: //www.iosart.com/firefox/xpcom/ 我正在 Firefox 3.6 上尝试此操作。在成功构建 XPT 和库并将其传输到 Firefox 中的组件文件夹后,并按照适用的说明进行操作,我无法成功注册组件。

0 投票
3 回答
368 浏览

xul - 包括 XPCOM inFirefox 扩展

我在 Firefox 扩展开发方面的经验非常有限(阅读XUL School,编写了几个非常简单的扩展)。

我现在需要一些 Firefox XPCOM 对象不具备的功能,即运行外部进程并读取其标准输出。似乎这可以使用Protozilla来完成。所以我的问题现在变成了在我的 XPI 中包含这个外部 XPCOM 对象,以便我的扩展可以使用它。

我应该明确我的问题不是如何构建 XPCOM 对象,因为我已经有了他们的构建,如果我需要更改某些东西,我已经有了他们的 makefile。我的问题是:我现在该怎么办?我的扩展树看起来像

/
-->chrome/
-->-->content
-->-->-->browserOverlay.js
-->-->-->...
-->-->locale
-->--> -->zh-CN
-->-->-->-->browserOverlay.dtd
-->-->-->-->browserOverlay.properties
-->-->-->...
-- >-->skin
-->-->-->...
-->defaults/
-->-->preferences/
-->-->-->my_extension.js
-->modules/
--> -->common.js
-->chrome.manifest
-->install.rdf

我应该在哪里包含 XPCOM 文件?我需要做些什么来告诉 Firefox 有一个新的 XPCOM 对象可用吗?

0 投票
1 回答
1085 浏览

cross-platform - 如何使用 Firefox 的 xpcom 从串口读取数据?

我想使用 xpcom 将 Mozilla Firefox 连接到串行端口。最终的结果应该是一个可以安装在各种环境(带有 Firefox 3.* 的跨平台 Windows/Linux)上的 xpi 插件。我应该从哪里开始?

我在这里找到了一个示例:http: //forums.mozillazine.org/viewtopic.php?f=19& t=1083965 &start=0 ,但我认为该代码只能在 Linux 上运行......我可以在 Windows 中做类似的事情吗?

0 投票
1 回答
213 浏览

c++ - Firefox 插件域限制 - 类似于 IE 的 SiteLock

我想知道 Gecko SDK/NPAPI 中是否有任何功能可以让我将插件的使用限制在受限域中。就像 IE 的 SiteLock 对 ActiveX 组件所做的一样。

例如,NPAPI 中是否有类似的实现?

0 投票
2 回答
5286 浏览

javascript - 如何签署需要 UniversalXPConnect 权限的脚本或网页

我有一个网站,它使用了我开发的 Firefox 扩展中实现的一些功能。我的一个网页上的 JavaScript 脚本需要 UniversalXPConnect 权限才能与我的 Firefox 扩展中实现的 XPCOM 组件进行通信。

默认情况下,当我的脚本尝试启用此权限以访问 XPCOM 组件时:

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

...发生以下错误:

错误:来自“ http://example.com ”的脚本被拒绝 UniversalXPConnect 权限。

要启用此权限,当前用户需要在“about:config”Firefox 页面中手动编辑“signed.applets.codebase_principal_support”设置。

从这个页面:http ://www.mozilla.org/projects/security/components/signed-scripts.html我了解到可以显式签署包含需要此权限的脚本的网页。在我签署我的脚本后,用户将不需要手动编辑上述设置。

网站托管在 Drupal CMS 下的 Linux 平台上。

如果您能给我详细的分步说明,我将非常感激我如何签署我的脚本(我应该下载哪些工具,如何创建证书等),以便在按照您的说明编辑 about:config设置将不是必需的。

0 投票
2 回答
7697 浏览

javascript - 用于 XML 文档、Mozilla 扩展的 getElementById

是否document.getElementById支持使用 Mozilla 中的 DOMParser 方法从 XML 字符串解析的 DOM 方法?我正在制作一个 Mozilla 扩展,它读取 XML 文件并使用 DOM Parser 将 XML 转换为 DOM 元素并尝试通过 Id 获取元素。getElementsByTagName 方法有效,但 getElementById 无效。它总是返回 null。

我试过上面的代码。alert(id) 返回正确的 id,而 alert(resultNode) 每次都返回 null。

0 投票
1 回答
149 浏览

javascript - 这个对象的类型是什么?它记录在哪里?

我没有找到这个“xpcomInterface”的类型,并且没有任何具有此名称的类的文档。任何的想法?

此片段来自 Mozilla 的网站:

- 更新

我找到了导致 nslBoxObject 的boxObject 但它没有引用QueryInterface上面使用的任何内容。还有对 xulplanet.com 的引用,现在已经不存在了。