javascript — вызов метода для объекта плагина NPAPI повторно вызывает плагин.

У меня есть плагин NPAPI, встроенный в HTML-страницу. Когда я вызываю метод для него из консоли разработчика браузера, все в порядке — вызов методов попадает в правильный экземпляр плагина и выполняется правильно. В любом случае, когда я вызываю тот же метод из обратного вызова JS, как, например, нажатие кнопки, плагин уничтожается и воссоздается заново, а NPP.pdata установлено в ноль.

Может ли это быть как-то связано с моделью многопоточности JS и как ее можно решить?

0

Решение

Я понял. Проблема не была связана с NPAPI или многопоточностью JS вообще.

Я вызывал метод для объекта плагина NPAPI в форме HTML.

<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();,

1

Другие решения

Других решений пока нет …