调用NPAPI插件对象上的方法会重新生成插件

Calling a method on NPAPI plugin object respawns the plugin

本文关键字:插件 新生 方法 NPAPI 对象 调用      更新时间:2023-09-26

我有一个嵌入在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(); .