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