2012-04-01 2 views
5

In meinem Code ich eine Linie, die die aktuellen Fenster-Dumps (die eine YouTube-Video Seite passiert sein):JavaScript-Objekte sichtbar in FireBug, unzugänglich im Code

Firebug.Console.log(myWindow); 

Es kann das Fenster-Objekt zu sehen enthält "yt" Eigenschaft, die ein anderes Objekt, das leicht in Debugger eingesehen werden kann:

http://i.imgur.com/lHHns.png

Leider ruft

Firebug.Console.log(myWindow.yt); 

Protokolle "undefined" - warum ist das, und wie kann ich auf diese "Yt" -Eigenschaft zugreifen?

Edit: eine Ergänzung, die wichtig sein könnte: der Code, den ich schreibe, ist Teil einer Firefox-Erweiterung, so dass es nicht wirklich in einem PGE läuft, aber in Chrom - ich fange an zu denken, dass es das sein kann Ursache. Können Chrome-Skripts irgendwie eingeschränkt sein, was sie im Gegensatz zu Code in Script-Tags sehen/sehen können?

+0

Meine Vermutung ist etwas mit Firebug zu tun, da ich von der Chrome-Konsole aus zugreifen kann. – Griffin

+0

Nur stellen Sie sicher, rufen Sie 'Firebug.Console.log (myWindow.yt);' in genau der gleichen Zeile wie 'Firebug.Console.log (myWindow);'? –

+0

@Griffin: das ist nicht der Fall, ich kann es auch über Chrome oder andere Entwickler-Tools zugreifen, aber es ist immer noch unsichtbar für den Code im Browser ausgeführt - nicht nur ich kann es nicht über Firebug protokollieren, ich kann es nicht aufrufen Methoden oder irgendetwas. –

Antwort

2

Aus Sicherheitsgründen greifen Firefox-Erweiterungen nicht direkt auf Webseitenobjekte zu, sondern über eine wrapper. Dieser Wrapper ermöglicht es Ihnen, alle Eigenschaften zu verwenden, die von den DOM-Objekten definiert werden, aber alles, was von Seite-JavaScript hinzugefügt wird, ist unsichtbar. Sie können access the original object:

Firebug.Console.log(XPCNativeWrapper.wrappedJSObject.yt); 

Wenn Sie jedoch wollen mit der Web-Seite von einer Erweiterung zu interagieren sollten Sie Alternativen in Betracht ziehen, wo die Web-Seite nicht Tricks auf Sie (zB Laufe unprivileged Code in dem Inhaltsfenster: myWindow.location.href = "javascript:...") spielen kann, .

0

Firefox- und Chrome-Erweiterungen können aus Sicherheitsgründen nicht auf JavaScript innerhalb der Seite zugreifen.

0

Ich habe Verwirrung wie diese mit asynchronen APIs gesehen.

console.log(obj); zeigt den Inhalt eines Objekts alle ausgefüllt, aber beim Zugriff auf die Objekteigenschaften im Code sind sie noch nicht richtig ausgefüllt, da der Aufruf asynchron ist.

Warum Chrome und Firefox zeigt sie alle ausgefüllt ist wahrscheinlich nur ein Timing-Problem, da sie wahrscheinlich auch die console.log() asynchron verarbeiten.

Verwandte Themen