调用NPAPI插件对象上的方法会重新生成插件
Calling a method on NPAPI plugin object respawns the plugin
我有一个嵌入在HTML页面的NPAPI插件。当我从浏览器的开发控制台调用它的方法时,一切都很好-方法调用落在正确的插件实例上并正确执行。无论如何,当我从JS回调调用相同的方法时,例如,像按钮单击,插件被销毁并重新创建,而NPP.pdata
被设置为null。
它是否与JS多线程模型有关,如何解决?
我明白了。该问题与NPAPI或JS多线程无关。
我在HTML表单中调用NPAPI插件对象的方法。
<form>
<input id="whatever-button" type="submit" value="Whatever"></input>
</form>
<script type="text/javascript">
$('#whatever-button').click(function(e) {
var plugin = document.getElementById('plugin');
plugin.whatever();
});
</script>
我没有考虑的是页面重新加载-这是单击按钮后的默认操作。页面重新加载然后触发插件对象重建,它是足够快,所以我没有注意到它。只需将e.preventDefault();
添加到回调函数中即可解决此问题。这就是工作代码的样子。
<embed id="plugin" type="application/my-npapi-plugin" width="640" height="480">
<form>
<input id="whatever-button" type="submit" value="Whatever"></input>
</form>
<script type="text/javascript">
$('#whatever-button').click(function(e) {
e.preventDefault();
var plugin = document.getElementById('plugin');
plugin.whatever();
});
</script>
UPD:实际上,将输入类型设置为button
,而不是submit
,更容易解决问题。它也不需要e.preventDefault();
.
相关文章:
- 从C++本机插件更新Vector3数组
- 使用CMake创建QML插件
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- clang 插件:在编译过程中修改 AST
- 实现动态插件管理器
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- Agora.io 虚幻引擎插件构建错误
- 使用带有C++对象和标准库容器的插件系统
- 运行命令 "rosbag play example.bag" 时出错。找不到与插件 rosbag/NoEncryptor 对应的库
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 通过 Gazebo 世界插件将静态对象附加到机器人链接
- 如何为模块化应用程序实现C++插件系统
- 'string'文件在带有C++文件的iOS插件上找不到
- 在 Android 上安装 GStreamer 插件
- 如何使用MSVC 2019创建和使用Qt 5.14.0自定义小工具插件
- 如何在 Windows 操作系统中在 geany 中安装插件
- 节点插件 API 将数组作为函数参数传递
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 通过 Flutter 从C++插件访问资产