2012-01-20 14 views
34

Mam flash video na mojej stronie w następujący sposób:Uncaught Error: Błąd sposób wywołujący na 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> 

Powyższy zostanie dołączony do #VideoMain

Następnie Mam następujący:

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

ta kończy się niepowodzeniem z błędem konsoli:

Jakieś pomysły, co może być nie tak? Dzięki

Odpowiedz

73

NPObject jest "interfejsem" do dowolnego "obcego" kodu odsłoniętego przez przeglądarkę (obcą, jak w obcym do JavaScript, w przeciwnym razie może to być własne obiekty przeglądarki, np. Obiekt globalnego okna). Wbudowana wtyczka Flash z pewnością zaimplementuje ten "interfejs" (więc przeglądarka widzi go jako kolejny NPObject).

Kiedy wywołujesz metodę na tym obiekcie, istnieje kilka funkcji, które owijają to połączenie, serializując dane przekazane do obiektu i z powrotem do środowiska wykonawczego przeglądarki. Trudno powiedzieć na pewno, co dokładnie nie działało, ale niektóre typowe powody to:

  1. Wtyczka nie wystawia (lub jeszcze się nie rejestrowała) metody o nazwie, którą próbujesz połączyć.
  2. Wtyczka została osadzona w taki sposób, że krzyżowanie nie jest dozwolone (ograniczenia mogą być po obu stronach, Flash wymaga, aby wywołanie pochodziło z zaufanej domeny i możesz ograniczyć wtyczkę do komunikowania się ze środowiskiem poprzez ustawienia w obiekcie tag
  3. błąd rzucony w kodzie wtyczki jest wywoływana przez JavaScript -... nie jestem pewien, że będzie taki sam błąd, ale jest bardzo prawdopodobne,
+2

Trzeci był tym, co działo się nie tak - jeśli używasz Flasha, wystąpił błąd w funkcji wywoływanej przez JS - użycie bloków "try..catch" może go zawierać lub pomóc zawęzić, gdzie jest problem, aby go naprawić – divillysausages

+5

Mam ten błąd, gdy JS próbował wywołać metodę Flash, ale właściwość System.security.allowDomain()/System.security.allowinsecureDomain() nie została wywołana. Jeśli wywołasz metodę allowDomain(), upewnij się, że kod HTML jest załadowany za pomocą tego samego protokołu, co plik SWF (HTTPS lub HTTP). –

+2

4) metoda, którą dodajesz jako wywołanie zwrotne, musi mieć zasięg do: publiczny 5) przekazanie niezdefiniowanej wartości do tej metody może utworzyć ten komunikat (jeśli oczekujesz Flasha w postaci ciągu) – YopSolo

1

I był już ten sam komunikat o błędach problem wystąpił tylko wtedy, gdy Flash wykonał wywołanie ExternalInterface, które powróciło po awarii Flasha (z jakiejkolwiek przyczyny). Poprawka, którą zaimplementowałem: Sprawdź, czy obiekt Flash jest nadal uruchomiony i jeśli wywołanie zwrotne nadal jest funkcją tego obiektu.

Powiązane problemy