2012-04-01 2 views
5

В моем коде у меня есть строка, которая сбрасывает текущее окно (которое случается быть страница видео):JavaScript видны в FireBug, недоступные в коде

Firebug.Console.log(myWindow); 

Это можно увидеть, что объект окна содержит "уг" свойство, которое является другой объект, который может быть легко проверено в отладчике:

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

К сожалению, вызов

Firebug.Console.log(myWindow.yt); 

журналы "undefined" - почему это так, и как я могу получить доступ к этому свойству "yt"?

Редактировать: одно добавление, которое может быть важно: код, который я пишу, является частью расширения Firefox, поэтому он не работает внутри pgae, но в chrome - я начинаю думать, что это может быть причина. Могут ли хром-скрипты быть как-то ограниченными в том, что они могут видеть/acces, в отличие от кода в тегах скриптов?

+0

Я думаю, что это связано с Firebug, так как я могу получить доступ к нему с консоли Chrome. – Griffin

+0

Просто убедитесь, что вы вызываете 'Firebug.Console.log (myWindow.yt);' точно в той же строке, что и Firebug.Console.log (myWindow); '? –

+0

@Griffin: это не тот случай, я могу получить его через Chrome или другие инструменты для разработчиков тоже, но он все еще невидим для кода, запущенного в браузере - не только я не могу зарегистрировать его через Firebug, я не могу назвать его методов и ничего. –

ответ

2

По соображениям безопасности расширения Firefox не имеют доступа к объектам веб-страницы напрямую, а через wrapper. Эта оболочка позволяет использовать все свойства, определенные объектами DOM, но все, что добавлено по странице JavaScript, будет невидимым. Вы можете access the original object:

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

Однако, если вы хотите, чтобы взаимодействовать с веб-страницы с расширением, вы должны рассмотреть альтернативные варианты, где веб-страница не может играть трюки на вас (например, при запущенном непривилегированных кода в окне содержимого: myWindow.location.href = "javascript:...") ,

0

Расширения Firefox и Chrome не могут получить доступ к JavaScript на странице по соображениям безопасности.

0

Я видел замешательство, как это, используя асинхронные API.

console.log(obj); показывает содержимое всего объекта, но при доступе к свойствам объекта в коде они пока еще не заполнены из-за того, что вызов является асинхронным.

Почему Chrome и Firefox показывают, что все они заполнены, вероятно, это всего лишь проблема синхронизации, поскольку они, вероятно, также обрабатывают асинхронно console.log().