问题标签 [firebreath]

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 投票
0 回答
350 浏览

google-chrome-extension - 外部页面可以调用 npapi 插件(通过 Firebreath),但不能由 chrome 扩展页面调用

npapi 插件是对 FBTestPlugin 的轻微修改。

该插件当前在清单中定义为 public。现在,可以从外部页面调用插件方法。但不是在扩展程序的任何页面中,我已经尝试过背景页面和选项页面。选项页面中有一个方法runProxy(),它和外部页面做同样的事情,但是插件对象找不到方法。

您可以在此处下载 chrome 扩展程序,并尝试一下。

我在 Linux 中使用命令行进行调试

并发现这可能是问题所在。

但是,出于安全原因,我希望可以将插件定义为私有(仅称为扩展页面)。怎么修?

0 投票
1 回答
669 浏览

c++ - C++:使用 Firebreath 在多个实例中绘制位图

我正在为此苦苦挣扎,

我想使用 GDI+ 将位图绘制到 PluginWindowWin (Firebreath) 中;为此我有一个计时器,现在模拟 wm_paint 消息,里面的代码是:

image是一个Gdiplus::Image,它工作正常,但是如果我创建插件的 2 个实例(两个不同的 HWND),它只会绘制其中一个。

这是预期的行为吗?我的意思是,GDI+ 只会在从 HWND 创建的一个上下文中绘制?

谢谢!

0 投票
2 回答
1418 浏览

c# - C++ 和 C# 之间的并行依赖关系

我正在使用 FireBreath 框架制作浏览器插件。大多数逻辑都是用 C# 编写的,为了从浏览器中调用它,我制作了一个 C++ 包装器。浏览器调用 C++ 本机代码,该代码调用“代理”托管 C++ 代码,该代码调用 C# 项目中的实际逻辑。

所以我有3个dll:

  • 依赖于托管 C++ 的原生 C++ dll;
  • 托管 C++,它依赖于 C#;
  • 包含主要逻辑的 C# dll。

所有 3 个 dll 都安装到用户目录 (c:\Users\\AppData\Roaming\MyCompany\MyApp\1.0.0.0)

问题是浏览器不加载 C# dll。我使用 Side by Side 清单来声明依赖项。

我试图制作一个单独的清单文件来声明一个程序集:

并将此依赖项的链接添加到头 dll(本机 C++):

我还尝试直接在头 dll(Native C++)中声明依赖项:

尝试使用 #pragma 指令链接依赖的 dll:

我使用 Dependency Walker 检查了依赖关系,它确认了托管 C++ 和 C# 之间的依赖关系不存在。

插件可以访问头 dll(本机 C++)并且它也加载托管 C++ 但是当托管 C++ 调用 C# dll 时 - 插件失败,找不到 C# 程序集。

如果我将 C# dll 与浏览器应用程序(firefox.exe 或 chrome.exe)放在同一目录中 - 它可以工作。

看起来并排依赖在托管 C++ 和 C# 之间不起作用。

如何为我的插件加载依赖的 dll?

0 投票
1 回答
228 浏览

npapi - FireBreath 查找系统路径

我是 firebreath 的新手,我正在开发一个 NPAPI 插件,以打包到 Google Chrome 扩展程序中。我在创建一个检索 DLL 当前所在位置的方法时遇到了麻烦。有什么想法吗?

0 投票
1 回答
288 浏览

javascript - 在浏览器窗口中有效滚动管道输出

我有一个自定义浏览器插件(使用 FireBreath 构建),它将调用用户机器上的本地进程并将标准输出通过管道传回浏览器,为此我正在通过 popen() 调用运行该进程,并且当我从中读取数据时我触发一个 JSAPI 事件并将其发送回浏览器的管道。

在浏览器中,我将输出作为预先格式化的文本附加到 div 并告诉 div 滚动到底部。

浏览器插件中的代码:

HTML & Javascript/jQuery:

这种方法适用于我需要它的浏览器(这是一个有限使用的内部工具),但它令人沮丧地滞后。我的过程通常在输出窗口完成滚动前大约 30-60 秒完成。那么,我该如何提高效率呢?有没有更好的方法将此文本传送回浏览器?

0 投票
1 回答
593 浏览

c++ - 在 FireBreath 框架中使用 Win32 API CreateProcess

我正在尝试使用 Firebreath 框架开发浏览器插件。我想要实现的第一件事是使插件能够进行跟踪路由。现在我在 Windows7 上做。目前我选择使用 Win32API CreateProcess 来调用命令 shell。通过设置 dwFlags = STARTF_USESHOWWINDOW ,我可以在执行期间隐藏命令 shell 窗口。

问题: createProcess 是在一个名为 run() 的方法中实现的,我使用 JS 调用它进行测试。当我调用 plugin().run() 时,traceroute 运行良好,并且输出成功地写入了我想要的文本文件。然而,在执行过程中,浏览器变得无响应,最后插件在 traceroute 完成几秒钟后崩溃。由于我是插件开发的新手,对 c++ 了解不多,我想知道为什么会出现这个问题。仅供参考,如果我没有隐藏命令外壳窗口,插件会产生奇迹——在执行 traceroute 时浏览器会响应。

0 投票
1 回答
1403 浏览

javascript - Firebreath JavaScript 错误:不支持:类型函数中没有 toString() 函数

我正在使用 firebreath 框架编写浏览器插件。当我将插件与 javascript 一起使用时,我收到一个奇怪的错误:

当我尝试在我的 Dropbox_pluginAPI 类上多次调用返回 JSAPIPtr 的方法时,我收到此错误。

这是代码:

我希望有人使用firebreath并可以帮助我!


我更新了firefox版本并将片段分成不同的行,但错误仍然存​​在。我做了以下事情:

永远不会调用警报!一些电话后仍然存在错误:

排队:

0 投票
1 回答
355 浏览

c++ - 如何使用 boost 和 Firebreath 从 python 中正确触发浏览器事件

首先我必须说,作为一名 Python 程序员,我可能从错误的角度看待这个问题,自从我在大学写最后一个 c++ 代码以来已经过去了很多年。

我遇到了一些问题,尝试使用 firebreath 创建一个混合 python/c++ 插件。到目前为止,我已经成功地使用 boost/python.h 集成了所有部分,但是当我尝试从 python 中触发事件时出现了问题。我偶然发现了必须将 python 函数与 c++ 函数绑定在一起的问题(使用 BOOST_PYTHON_MODULE)。首先,我尝试直接将 python 与我的 JSAPI 派生类 fbtestconpythonAPI 绑定,这种方法的问题似乎是缺少对浏览器实例化的 JSAPI 对象的引用,这给了我在 python 函数和 c++ 等效项之间的各种签名不匹配问题执行时间处理时间。

我唯一要解决这个问题(我同意,这是一个丑陋的肮脏解决方案),是使用我用 set_pluginPointer 手动初始化的全局指针。到目前为止,这实际上效果很好,但我知道这不是正确的方法。我读到我不应该使用带有 JSAPI 对象的“原始”指针,但我不确定如何用 shared_ptr 替换它来实现这个特定的实现。另一个问题是全局变量,它在所有实例之间共享,例如,导致所有事件在最后打开的选项卡/窗口上触发。解决后者的一种方法是创建某种数组,其索引为当前窗口/线程 ID,这是我应该能够从我的 JSAPI 对象和 python/c++ 函数访问的东西。

当然,我很开放,并且会非常感谢任何建议,关于如何改进/修复这个特定的解决方法,或者更好地,在没有黑客攻击的情况下交流 boost::python 和 firebreath 的正确方法。

下面是插件代码的相关部分

0 投票
1 回答
805 浏览

google-chrome - 更改可见区域时,OpenGL 插件会导致 Chrome 崩溃

我正在开发一个在 Windows 上使用 FireBreath 的插件(目前),其中包括使用 OpenGL 显示网络摄像头提要。我正在使用一个窗口插件,我正在从一个单独的线程中绘图。代码可以在这里查看:

头文件

https://github.com/EvilTengil/kinect-at-home-plugin/blob/0007beecf136ff2e5e1aa50be94d4906447a8f43/Win/KinectAtHomeWin.h

源文件

https://github.com/EvilTengil/kinect-at-home-plugin/blob/0007beecf136ff2e5e1aa50be94d4906447a8f43/Win/KinectAtHomeWin.cpp

(忽略 onWindowResized 中的奇怪代码,这只是提交中保留的一些测试。)

问题是,只要调整浏览器窗口的大小以更改插件的可见区域或扩展以某种方式滚动到滚动框的可见区域之外,插件就会在 Chrome 中崩溃。我没有安装 Firefox,但我猜这是 NpApi 的东西,因为它在 Internet Explorer 中工作。

我相信发生的事情是,只要插件的可见尺寸发生变化,Chrome 就会发布并创建一个新的 HDC。这可能导致渲染上下文无效,但它仍在插件中使用并导致崩溃。

我注意到发生这种情况时会调用 NPP_SetWindow,但是在 NpapiPluginModule_NPP.cpp 中会忽略这些调用,因此我无法连接到此事件。

我已经谷歌了几个小时,但没有找到任何帮助。有没有人有这方面的经验?

我有一个想法,如果我创建我自己的子窗口到我可以处理我自己的 DC 的插件窗口,它可以工作。我做了一些失败的快速测试,这可能是因为我蹩脚的 Win32 技能。但这可以与更多的工作一起工作吗?我的另一个想法是以某种方式跟踪可见区域,但我还没有研究过。

0 投票
2 回答
444 浏览

c++ - 使用 Visual Studio 将静态构建的库链接到共享库的潜在内存风险

我正在开发一个在 Windows 上崩溃的跨平台 Firebreath 插件。我使用包含引用 boost.asio 的类的静态库。当我将此库与插件 dll 链接时,我观察到在与 io_service 子系统交互时(即在套接字构造期间)发生崩溃。当我将静态库链接到普通可执行文件时,不会出现问题。当我将静态库的内容直接编译到插件dll项目中时,crash并没有发生。我已经竭尽全力确保我在 Windows 上构建环境的所有方面都是一致的(构建模式、Visual Studio 版本等)。此外,我对 boost.asio 标头进行了防火墙保护,因此插件 dll 代码无法看到 boost.asio 子系统(不幸的是,vs2008 和 vs2010 无效)。据我所知,我已尽一切可能确保构建环境运行良好,但问题仍然存在。

社区能否就可能暴露或解决问题的潜在风险或方法提供任何建议?