2012-01-20 22 views
34

Ho un video flash sulla mia pagina come segue:errore non rilevato: Errore metodo chiamante sul 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> 

È possibile che questo ottiene allegato in #VideoMain

Poi ho il seguente:

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

questo viene a mancare con l'errore console:

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

Tutte le idee che cosa potrebbe essere sbagliato? Grazie

risposta

73

NPObject è un "interfaccia" a qualsiasi codice "straniero" a vista attraverso il browser (stranieri, come in valuta estera a JavaScript, altrimenti potrebbe essere propri oggetti del browser, come l'oggetto della finestra globale, per esempio). Il plugin Flash incorporato implementerebbe certamente questa "interfaccia" (quindi il browser la vede come un altro NPObject).

Quando si chiama un metodo su tale oggetto, ci sono diverse funzioni che avvolgono che chiamano serializzare i dati passati per l'oggetto e di nuovo a tempo di esecuzione del browser. E 'difficile dire con certezza che cosa esattamente non ha funzionato, ma alcuni motivi comuni dovrebbe includere:

  1. Il plugin non espone (o non si è registrato ancora) un metodo con il nome che si sta tentando di chiamare.
  2. Il plugin è stato incorporato in un modo che crosscripting non è consentito (le limitazioni possono essere su entrambi i lati, Flash richiede che la chiamata proviene da un dominio trusted e si possono limitare il plugin di comunicare con l'ambiente attraverso le impostazioni nell'oggetto tag
  3. un errore gettato nel codice del plugin invocato tramite JavaScript -... non sono sicuro che sarebbe stato lo stesso errore, ma è molto probabile che
+2

Il terzo era quello che stava andando male per me - se si sta utilizzando Flash, poi c'è un errore essere gettato nella funzione chiamata da JS - utilizzando 'blocchi try..catch' possono sia contenerla, o aiutarvi restringere il punto in cui è presente il problema in modo da poterlo risolvere – divillysausages

+5

Ho ricevuto questo errore quando JS stava tentando di richiamare il metodo Flash esposto ma System.security.allowDomain()/System.security.allowinsecureDomain() non è stato chiamato. Se chiami allowDomain() assicurati che il tuo HTML sia caricato sullo stesso protocollo del SWF (HTTPS o HTTP). –

+2

4) il metodo si aggiunge come un callback deve essere ambito a: pubblico 5) il superamento di un valore indefinito a questo metodo può creare questo messaggio (se vi aspettate una stringa in flash) – YopSolo

1

mi è stato sempre lo stesso messaggio di errore il il problema si è verificato solo quando Flash ha effettuato una chiamata ExternalInterface che è stata restituita dopo che Flash si è bloccato (per quale motivo). La correzione che ho implementato era: Controlla se l'oggetto Flash è ancora attivo e in esecuzione se il callback è ancora una funzione di quell'oggetto.

Problemi correlati