问题标签 [gecko]

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 回答
1350 浏览

firefox - 编写带有原生窗口界面的 Firefox XPCOM 插件?(如 ActiveX 控件)

我有一个在 Internet Explorer 和 ActiveX 控件测试容器程序中运行良好的 ActiveX 控件。控件的实际行为分为两部分,其中一部分是与 OLE 主机接口的 ATL gunk,另一部分是真正的肉,它只接收窗口附加、调整大小、绘图和鼠标/键盘的回调事件。

现在,我想为 Firefox 插件编写 ATL gunk 的等价物(理想情况下在同一个二进制文件中,因此我不需要链接两个二进制文件,但我可以在这里灵活)。我已经下载并使用 Gecko SDK 构建了一个 XPCOM 组件,这似乎可行,但我不知道要实现哪些接口以使该组件可用作 Firefox 中的嵌入式本机 UI 组件。这与 Flash 播放器插件、PDF 查看器插件、QuickTime 播放器插件等的需求类似——javascript 和 XUL 还不够。

我在网上找了一些例子,但我能找到的唯一例子是基于看似古老的 NS_PluginInitialize() / NS_NewPluginInstance() 接口,它不是 XPCOM(但有其他名称?)。

有没有办法通过 XPCOM 实现同样的事情?如果是这样,怎么做?并且是否存在任何关于如何执行此操作的概述文档(不仅仅是界面成员列表)?

0 投票
3 回答
6115 浏览

c++ - WebKit 或 Gecko - 哪个更适合嵌入 C++ 应用程序?

你会选择哪一个,为什么
我想听听有在 C++ 应用程序中嵌入 Web 浏览器引擎经验的人的意见。
我应该强调我需要 Web 浏览器引擎的所有功能,除了渲染,即 HTTP 客户端、cookie 处理、DOM 样式 HTTP 解析器、JavaScript 引擎。如何剥离WebKit 或 Gecko 的渲染代码以避免编码和运行时开销?

这是对 C++ 项目的嵌入式浏览器的跟进

0 投票
1 回答
2267 浏览

firefox - 如何从 Firefox 扩展向网页添加元素

我将开发一个 Firefox 扩展,当<input type="file" ... >找到标签并选择一个文件时,它应该在加载的页面中放置一个按钮。

同样,我认为 Skype 工具栏做了类似的事情:当网站包含电话号码时,Skype 扩展程序会自动将其转换为可以单击以呼叫 Skype 联系人的按钮。

我在 GNU/Linux 系统上,不幸的是,Skype 扩展在 Linux 版本的 Firefox/Skype 上不起作用,所以我什至无法尝试对任何东西进行逆向工程......

firefox 扩展包含文件 overlay.js:该文件包含扩展的主要逻辑。在这里,我可以<input type="file" ... >使用以下代码简单地找到节点:

So, when a file has been chosen, an alert window appears and shows the file name.

但是,选择文件后,如何在页面中添加按钮?

我一直在尝试各种 document.parentNode 和类似的东西,但似乎没有任何效果。

或者有没有可能我不能把东西放到加载的页面中?

谢谢

0 投票
1 回答
980 浏览

delphi - 用 Delphi 实现 nsIProtocolHandler

我正在尝试在 Delphi 中构建一个 nsIProtocolHandler 实现。(我之前成功地完成了一个 IInternetProtocol,并希望在 FireFox 中拥有我在 Internet Explorer 中所拥有的东西。)感谢d-gecko项目,它以某种方式将 TInterfacedObject 魔法与 nsISupports 魔法联系起来,我能够制作一个在被询问时提供 nsIModule 的 DLL,在被询问时提供 nsIFactory,在被询问时提供我的 nsIProtocolHandler 之一,在被询问时提供我的 nsIChannel/nsIHttpChannel 之一。

当使用 firefox.exe 作为主机进程进行调试时,我可以看到我的库被加载,NewURI 被调用了 3 次,NewChannel 被调用,并且我传递了一个实现 nsIChannel 和nsIHttpChannel的对象。

这就是我困扰的地方。在我从 AsyncOpen 返回控制权之前,我不应该在我得到的 nsIStreamListener 上调用 OnStartRequest 和 OnDataAvailable,但我似乎没有在调用 AsyncOpen 的线程中重新获得控制权。

我尝试使用围绕默认http处理程序的自制包装器进行调试(使用CreateInstanceByContractID('@mozilla.org/network/protocol;1?name=http',...)。我也把监听器包裹过去了。奇怪的是,我看到 OnStartRequest 和 OnDataAvailable 在我的通道包装器死后在同一个线程中被调用。但谁在打电话?如果它是我试图包装的 http 通道,它如何生存(在同一个线程中)以及它如何控制调用侦听器?我很困惑。并且卡住了。

我曾尝试联系 d-gecko 项目的主要开发人员,但没有得到回应。

(另外,有人注意到我在 nsIProtocolHandler 上 MDC 讨论页底部的简介吗?)

(哦,还有一件事,是的,我知道“生活会更简单”,如果我只是从 C++ 中的 nsBaseChannel 继承。但重点是在现有的 Delphi 项目核心中添加一个 FireFox 协议处理程序。)

更新:我已经阅读了更多内容,这里也提到了:“流侦听器的方法在调用 asyncOpen [...] 的线程上被调用”,但是如果不先从“托管应用程序”调用,这怎么可能? ,我不清楚。这是XPCOM的把戏吗?我想在我得到它之前我必须阅读(很多)更多的 Firefox 源代码。

0 投票
1 回答
358 浏览

xpcom - 从 nsIBinaryInputStream 创建图像

我使用一些包含压缩图像数据(如 jpeg 或 gif)的 js 技巧创建了一个二进制输入流。我想使用 imgITools::decodeImageData 或其他方式解码和显示这些数据,但还没有找到方法。我应该从哪里开始?

0 投票
4 回答
1041 浏览

firefox - 非 IE 浏览器的浏览器缓存 API

IE 具有 WinInet API,例如 GetUrlCacheEntryInfo,用于读取和操作 IE 浏览器缓存。

Firefox 或 Chrome 等非 IE 浏览器是否有类似的 API?如果是这样,我在哪里可以获得更多信息?

谢谢

更新:

根据以下(从 XPCOM 组件访问 Firefox 缓存)WinInet 函数 GetUrlCacheEntryInfo() 可以通过 nsICacheSession.openCacheEntry() 来获取 nsICacheEntryDescriptor。是否有一个等效的 WinInet 函数 CreateUrlCacheEntry() 将创建一个缓存条目?

0 投票
2 回答
429 浏览

delphi - nsIProtocolHandler:为 html 页面加载图像时遇到问题

我正在 Delphi 中构建一个 nsIProtocolHandler 实现。(更多在这里)而且它已经在工作了。模块构建的数据通过 nsIInputStream 流式传输。我已经让所有 nsIRequest、nsIChannel 和 nsIHttpChannel 方法和属性都在工作。

我已经开始测试,但遇到了一些奇怪的事情。我有一个带有这个简单 HTML 的页面“a.html”:

<img src="a.png">

"xxm://test/a.html" 和 "xxm://test/a.png" 都可以在 Firefox 中使用,并提供上面的 HTML 或 PNG 图像数据。问题在于显示 HTML 页面时,图像未加载。当我调试时,我看到:

  • 为 a.png 调用 NewChannel,(当 Firefox 在 a.html 上处理 OnDataAvailable 通知时),
  • NotificationCallbacks 已设置(我只需要保留一个引用,对吗?)
  • RequestHeader " Accept" 设置为 " image/png,image/*;q=0.8,*/*;q=0.5"
  • 但是随后,通道对象被释放(很可能是由于引用计数为零)

查看其他请求,我希望设置其他一些属性(例如 LoadFlags 或 OriginalURI)并调用AsyncOpen,从那里我可以开始响应请求。

有人认识这个吗?难道我做错了什么?也许使用 LoadFlags 或 LoadGroup?我不确定何时在 LoadGroup 上调用 AddRequest 和 RemoveRequest,并从nsHttpChannelnsBaseChannel 窥视我不确定是早点还是晚点(在 OnStartRequest 或 OnStopRequest 之前或之后)调用 RemoveRequest 更好?

更新:检查了全新的 Firefox 3.5,还是一样

更新:为了进一步隔离问题,我尝试使用“file://test/a1.html”,<img src="xxm://test/a.png" />但仍然只能得到以上发生的事件序列。如果我应该将此辅助请求添加到负载组以调用 AsyncOpen,我不知道从哪里获得对它的引用。

还有更多:我发现只有一个“Accept”字符串实例被添加到请求标头中,它在创建新通道后立即查询 nsIHttpChannelInternal,但我什至没有通过这个 QueryInterface 调用......(我发布了它在这里

0 投票
4 回答
2711 浏览

winforms - Firefox/Gecko 控件干扰 Windows 窗体按键

编辑:除了赏金,我们愿意支付 250 美元在 Firefox/Gecko 代码库中修复这个错误。这是一个重现问题的简单测试项目(Visual Studio 2008 C#)。

编辑 #2我们愿意支付 600 美元来修复这个错误。有关重现问题的示例项目,请参见上文。

我们的 C# Windows 窗体上有一个 Firefox (Gecko) ActiveX 控件来显示 HTML。

当这个 Firefox ActiveX 控件出现在我们的表单上时,大约 2-3% 的按键无法通过。或者更确切地说,发送不同的 Windows 消息:

我们按住 TAB 键在 3 个常规 WinForms 文本框之间切换。它将在 97% 的时间内正确运行。Spy++ 告诉我们 WM_KEYDOWN 消息已正确发送:

正常行为 http://judahhimango.com/images/normaltab.jpg

但是随机,可能有 2-3% 的时间,tab 键(或其他键)没有被正确处理。Spy++ 告诉我们正在发送 WM_CHAR:

奇怪的行为 http://judahhimango.com/images/screwytab.png

当出现奇怪的行为时,要么根本没有处理密钥,要么处理不正确(例如将 '\t' 字符插入不支持制表符的文本框中。

仅当 Firefox ActiveX 控件在我们的表单上时才会发生这种情况。

我们的问题是:Firefox/Gecko 引擎是否安装了某种可能导致这些副作用的键盘挂钩?或者更好的是,我们如何解决这个问题?

0 投票
1 回答
297 浏览

python - 是否有用于在 Windows、Mac、Linux 上以透明背景呈现现代 HTML 和 Flash 的 LGPL/Apache/BSD Python 库?

我正在寻找一个合适的 Python 库,也可以访问 DOM。我不介意闪光透明度是否没有延续。PyQT 的许可证与项目不兼容,PySide 还没有跨平台编译。有什么想法吗?

0 投票
1 回答
1449 浏览

webkit - 如何创建网站的缩略图?

是否会猜测已经有一个基于 webkit/gecko 的命令行应用程序(甚至可以作为服务器加速渲染多个页面)已经在执行此操作?