问题标签 [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.
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 实现同样的事情?如果是这样,怎么做?并且是否存在任何关于如何执行此操作的概述文档(不仅仅是界面成员列表)?
c++ - WebKit 或 Gecko - 哪个更适合嵌入 C++ 应用程序?
你会选择哪一个,为什么?
我想听听有在 C++ 应用程序中嵌入 Web 浏览器引擎经验的人的意见。
我应该强调我需要 Web 浏览器引擎的所有功能,除了渲染,即 HTTP 客户端、cookie 处理、DOM 样式 HTTP 解析器、JavaScript 引擎。如何剥离WebKit 或 Gecko 的渲染代码以避免编码和运行时开销?
这是对 C++ 项目的嵌入式浏览器的跟进?
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 和类似的东西,但似乎没有任何效果。
或者有没有可能我不能把东西放到加载的页面中?
谢谢
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 源代码。
xpcom - 从 nsIBinaryInputStream 创建图像
我使用一些包含压缩图像数据(如 jpeg 或 gif)的 js 技巧创建了一个二进制输入流。我想使用 imgITools::decodeImageData 或其他方式解码和显示这些数据,但还没有找到方法。我应该从哪里开始?
firefox - 非 IE 浏览器的浏览器缓存 API
IE 具有 WinInet API,例如 GetUrlCacheEntryInfo,用于读取和操作 IE 浏览器缓存。
Firefox 或 Chrome 等非 IE 浏览器是否有类似的 API?如果是这样,我在哪里可以获得更多信息?
谢谢
更新:
根据以下(从 XPCOM 组件访问 Firefox 缓存)WinInet 函数 GetUrlCacheEntryInfo() 可以通过 nsICacheSession.openCacheEntry() 来获取 nsICacheEntryDescriptor。是否有一个等效的 WinInet 函数 CreateUrlCacheEntry() 将创建一个缓存条目?
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,并从nsHttpChannel和nsBaseChannel 窥视我不确定是早点还是晚点(在 OnStartRequest 或 OnStopRequest 之前或之后)调用 RemoveRequest 更好?
更新:检查了全新的 Firefox 3.5,还是一样
更新:为了进一步隔离问题,我尝试使用“file://test/a1.html”,<img src="xxm://test/a.png" />
但仍然只能得到以上发生的事件序列。如果我应该将此辅助请求添加到负载组以调用 AsyncOpen,我不知道从哪里获得对它的引用。
还有更多:我发现只有一个“Accept”字符串实例被添加到请求标头中,它在创建新通道后立即查询 nsIHttpChannelInternal,但我什至没有通过这个 QueryInterface 调用......(我发布了它在这里)
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 引擎是否安装了某种可能导致这些副作用的键盘挂钩?或者更好的是,我们如何解决这个问题?
python - 是否有用于在 Windows、Mac、Linux 上以透明背景呈现现代 HTML 和 Flash 的 LGPL/Apache/BSD Python 库?
我正在寻找一个合适的 Python 库,也可以访问 DOM。我不介意闪光透明度是否没有延续。PyQT 的许可证与项目不兼容,PySide 还没有跨平台编译。有什么想法吗?
webkit - 如何创建网站的缩略图?
是否会猜测已经有一个基于 webkit/gecko 的命令行应用程序(甚至可以作为服务器加速渲染多个页面)已经在执行此操作?