2012-01-20 16 views
34

tengo un video flash en mi página de la siguiente manera:error no detectada: método de llamada de error en NPObject

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

Lo anterior consigue adjunta en #VideoMain

entonces tengo el siguiente:

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

Esta falla con el error de la consola:

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

¿Alguna idea de lo que podría estar mal aquí? Gracias

Respuesta

73

NPObject es una "interfaz" a cualquier código "extranjero" expuesto a través del navegador (extranjero, como en el extranjero a JavaScript, de lo contrario pueden ser objetos propios del navegador, como el objeto ventana global, por ejemplo). El complemento de Flash incrustado ciertamente implementaría esta "interfaz" (por lo que el navegador lo ve como simplemente otro NPObject).

Cuando llama a un método en ese objeto, hay varias funciones que envuelven esa llamada serializando los datos pasados ​​al objeto y de regreso al tiempo de ejecución del navegador. Es difícil decir con certeza qué es exactamente lo que no funcionaba, pero algunas de las razones comunes incluiría:

  1. El plugin no expone (o no se hayan registrado aún) un método con el nombre que está intentando llamar.
  2. El complemento se incrustó de una manera que no permite las secuencias de comandos (las limitaciones pueden estar en ambos lados, Flash requiere que la llamada provenga de un dominio confiable y puede restringir el complemento para que no se comunique con el entorno a través de la configuración del objeto etiqueta
  3. un error arrojado en el código del complemento invocado a través de JavaScript -... no estoy seguro de que sería el mismo error, pero es muy probable
+2

El tercero era lo que estaba pasando mal para mí: si está utilizando Flash, se produce un error en la función llamada por JS, el uso de bloques 'try..catch' puede contenerlo o ayudarlo Acotar dónde está el problema para que pueda arreglarlo – divillysausages

+5

Recibí este error cuando JS intentaba llamar al método Flash expuesto pero no se llamaba a System.security.allowDomain()/System.security.allowinsecureDomain() adecuado. Si llama a allowDomain(), asegúrese de que su HTML se cargue sobre el mismo protocolo que el SWF (HTTPS o HTTP). –

+2

4) el método que agrega como devolución de llamada debe tener el ámbito de: público 5) pasar un valor indefinido a este método puede crear este mensaje (si espera una cadena en flash) – YopSolo

1

que estaba recibiendo el mismo mensaje de error el el problema solo se produjo cuando Flash realizó una llamada a ExternalInterface que se devolvió después de que se bloqueó Flash (por cualquier razón). La solución que implementé fue: Compruebe si el objeto Flash aún está activo y en funcionamiento. si la devolución de llamada sigue siendo una función de ese objeto.

Cuestiones relacionadas