web-dev-qa-db-fra.com

Erreur non interceptée: erreur lors de l'appel de la méthode sur NPObject

J'ai une vidéo flash sur ma page comme suit:

<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>

Ce qui précède est ajouté à #VideoMain

Alors j'ai ce qui suit:

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

Cela échoue avec l'erreur de console:

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

Des idées qui pourraient mal se passer ici? Merci

34
AnApprentice

NPObject est une "interface" pour tout code "étranger" exposé via le navigateur (étranger, comme étranger à JavaScript, sinon il peut s'agir des propres objets du navigateur, comme l'objet fenêtre global par exemple). Le plugin Flash intégré implémenterait certainement cette "interface" (donc le navigateur le voit comme un autre NPObject).

Lorsque vous appelez une méthode sur cet objet, il existe plusieurs fonctions qui encapsulent qui appellent la sérialisation des données transmises à l'objet et de retour à l'exécution du navigateur. Il est difficile de dire avec certitude ce qui n'a pas fonctionné exactement, mais certaines raisons courantes incluent:

  1. Le plugin n'expose pas (ou ne s'est pas encore enregistré) une méthode avec le nom que vous essayez d'appeler.
  2. Le plug-in a été intégré de manière à ce que les transcriptions ne soient pas autorisées (les limitations peuvent être des deux côtés, Flash nécessite que l'appel provienne d'un domaine approuvé et vous pouvez empêcher le plug-in de communiquer avec l'environnement via les paramètres de la balise d'objet.
  3. Une erreur lancée dans le code du plugin invoqué via JavaScript - je ne suis pas sûr que ce serait la même erreur, mais c'est très probable.
73
user797257

J'obtenais le même message d'erreur. Le problème ne s'est produit que lorsque Flash a effectué un appel ExternalInterface qui est retourné après le plantage de Flash (pour quelle raison que ce soit). Le correctif que j'ai implémenté était: Vérifiez si l'objet Flash est toujours opérationnel et si le rappel est toujours une fonction de cet objet.

1
stephanlindauer