Uncaught Error: Ошибка вызова метода в NPObject - PullRequest
34 голосов
/ 20 января 2012

У меня есть флэш-видео на моей странице следующим образом:

<script type="text/javascript">
var flashvars = {
};
var params = {
    movie: "VideoMain.swf",
    quality: "high",
    bgcolor: "#000000",
    allowScriptAccess: "always",
    wmode: "transparent"
};
var attributes = {
  id: "VideoMain",
  name: "VideoMain",
  classid: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
  width: "100%",
  height: "100%"
};
swfobject.embedSWF("./video/VideoMain.swf", "myVideoContent", "100%", "100%", "11.0.0","", flashvars, params, attributes);
</script>

<div id="myVideoContent">
    <h1>Oooppsss....you need flash or a newer version of flash</h1>
    <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
</div>

Вышеуказанное добавляется в # VideoMain

Затем у меня есть:

$('#X.click').click(function(e) {
    var flash = document.getElementById("VideoMain");
    flash.sendToActionScriptPublishVideo(true);
});

Это не с консольной ошибкой:

Uncaught Error: Error calling method on NPObject.
(anonymous function)
jQuery.event.dispatchjquery.js:3256
jQuery.event.add.elemData.handle.eventHandlejquery.js:2875

Есть идеи, что здесь может быть не так?Спасибо

Ответы [ 2 ]

73 голосов
/ 20 января 2012

NPObject - это «интерфейс» к любому «чужому» коду, предоставляемому через браузер (внешний, как в иностранном для JavaScript, в противном случае это могут быть собственные объекты браузера, например, объект глобального окна) , Встроенный плагин Flash наверняка реализует этот «интерфейс» (поэтому браузер воспринимает его как еще один NPObject).

Когда вы вызываете метод для этого объекта, есть несколько функций для переноса, которые вызывают сериализацию данных, передаваемых объекту и обратно во время выполнения браузера. Трудно сказать наверняка, что именно не сработало, но некоторые общие причины включают в себя:

  1. Плагин не предоставляет (или еще не зарегистрировал) метод с именем, которое вы пытаетесь вызвать.
  2. Плагин был встроен таким образом, что не допускается перекрестное копирование (ограничения могут быть с обеих сторон, Flash требует, чтобы вызов исходил из доверенного домена, и вы можете ограничить плагин от взаимодействия со средой через настройки в объекте тег.
  3. Ошибка, возникшая в коде плагина, вызванного через JavaScript - я не уверен, что это будет та же самая ошибка, но очень вероятно.
1 голос
/ 24 октября 2013

Я получаю то же сообщение об ошибке. Проблема возникла только тогда, когда Flash сделал вызов ExternalInterface, который вернулся после сбоя Flash (по какой причине). Исправление, которое я реализовал, было следующим: проверьте, работает ли объект Flash и работает ли обратный вызов по-прежнему является функцией этого объекта.

...