2012-03-26 48 views
0

Ich habe eine Seite mit mehreren eingebetteten YouTube-Playern, auf die ich auf Ereignisse warten muss. Ich versuche, die Lösung als Antwort auf Using Youtube's javascript API with jQuery geschrieben zu verwenden, aber ich bin eine seltsame Störung zu erhalten: (in Chrome 18.0.1025.137 beta-m)Uncaught SyntaxError: Unerwartetes Token%

Uncaught SyntaxError: Unexpected token % 

, dass das Ausmaß des Fehlers ist, einschließlich Stacktrace. Mein Code ist wie folgt:

var onYouTubePlayerReady = function (id) { 
var evt = '(function(){})'; 

alert(eval(evt)); //just to verify that the snippet is syntactically correct 

var ytplayer = document.getElementById(id); 
ytplayer.addEventListener("onStateChange", evt); 
}; 

(die andere Frage für mehr Kontext sehen)

Der Fehler wird ausgelöst, wenn die onStateChange Ereignis ausgelöst wird. Wenn ich evt"" oder einen Funktionsnamen mache, dann wirft es den Fehler nicht (ich bekomme aber auch keine Zustandsinformationen).

Offensichtlich ist die Fehlermeldung gefälscht, aber jemand weiß, wenn was ich versuche zu tun ist möglich?

+0

Stellen Sie sicher, dass Sie Antwort erhalten, indem Sie so etwas tun - 'var evt = '(Funktion (Zustand) {Alarm (Zustand);}) '; ' – Diode

+0

@Diode: Ich habe das versucht, aber sehe meine Antwort, um das wirkliche Problem herauszufinden –

Antwort

0

Eigentlich stellt sich heraus, es ist unglaublich dumm. Laufen lieferte den Code in Firefox eine echte Fehlermeldung:

syntax error 


try { __flash__toXML(%28function%28%29%7B%7D%29(5)) ; } catch (e) { "<undefined/... 
---------------------^ 

Also, es scheint, muss es serialisierbar XML sein, um als Rückruf verwendet zu werden. Was wirklich nervig ist.

Meine Lösung war so etwas wie diese:

var ytCallbackID = 1; 

var makeYTCallback = function (func) { 
    var ret = "ytCallback" + (ytCallbackID++); 
    window[ret] = func; 

    return ret; 
} 

var onYouTubePlayerReady = function (id) { 
    var evt = makeYTCallback(function(state) { 
     onYouTubePlayerStateChange(id, state); 
    }); 

    var ytplayer = document.getElementById(id); 
    ytplayer.addEventListener("onStateChange", evt); 
}; 

Ich habe nicht vollständig getestet (da ich dieses Recht am Ende des Tages gestern), aber ich denke, es wird funktionieren.

Getting um es zu testen, und es funktioniert wie ein Charme! Es ist ein wenig fug, sowohl in der Idee und Umsetzung, aber es funktioniert und das ist was wichtig ist

Verwandte Themen