2011-11-01 2 views
89

Я хотел бы изменить контекст javascript, выполненный в инструменте разработчика webkit/firebug, чтобы выполнить его код, например, он запускается изнутри iframe на странице.Есть ли способ изменить контекст на iframe в javascript-консоли?

Я знаю, что могу это сделать, открыв страницу в iframe на отдельной странице, но я хочу запустить код, где он взаимодействует с родительским фреймом.

+1

вам всегда может выполнять код в режиме 'window.frames [x]'. Просто добавьте любую команду, которую вы хотите. И.Е. 'window.frames [0] .runFunction()' – Ktash

+1

@Ktash, не могли бы вы ответить на этот вопрос? – Muhd

+0

Как я могу сделать то же самое в IE?Мне очень сложно выбрать элемент в окне консоли, используя $, если элемент находится во внутреннем IFRAME. Пожалуйста помоги. – tarekahf

ответ

123

Хром 15 позволяет изменить область действия консоли. В нижней части консоли, рядом с кнопкой ясной консоли, есть меню, которое говорит <top frame> что даст список доступных кадров:

enter image description here

Firefox имеет similar feature в настоящее время в разработке:

enter image description here


Вы также можете перемещаться по рамах using the command line:

var frame = document.getElementById("frame1").contentWindow; 
cd(frame); 
+2

Очень красивый и даже работает кросс-домен. Только то, что я хотел. – Muhd

+5

Могу ли я выполнить код в консоли, чтобы выполнить эту же задачу, или мне нужно щелкнуть селектор кадров? – bodine

+0

@bodine - вы нашли способ выполнить его из команды консоли? – arty

20

Вы можете выполнить код в с помощью функции window.frames[x]. Например,

window.frames[0].runFunction() 
+0

Хорошая альтернатива, если FireBug - ваше оружие выбора. Благодарю. –

+0

Как вы выполняете код вне функций, таких как команды jQuery? Или, если вы хотите получить ссылку на элемент DOM под некоторым фреймом, выполните код с этим элементом? – David

4

Для решения проблемы с огнем см. this answer по другому вопросу. Однако не работает кросс-домен, например, решение Chrome от Dennis.

Редактировать: При использовании новых версий firebug они могут иметь фиксированную междоменную проблему.

3

Выполнение операторов сценария и команд по умолчанию выполняется в контексте окна верхнего уровня. Если вы используете фреймы, используйте консольную команду «cd()».

cd() Вызов cd() без параметров возвращается в окно верхнего уровня.

кд (окно) Позволяет изменить оценку выражений командной строки из окна по умолчанию верхнего уровня веб-страницы в окне кадра.

Более подробную информацию, here

+1

похоже, что это относится только к IE, но не к webkit .. – Cherniv

+0

Это именно то, что я искал. (он работает в Firefox) Спасибо. – user2410595

3
cd(document.getElementsByTagName('iframe')[0]); 
+1

Добро пожаловать в переполнение стека! Пожалуйста, рассмотрите возможность редактирования сообщения, чтобы добавить больше объяснений о том, что делает ваш код, и почему он решит проблему. Ответ, который в основном содержит только код (даже если он работает), обычно не помогает OP понять их проблему. – SuperBiasedMan

+0

Спасибо! Это необычный способ для Firefox, но я думаю, что «cd (iframe)» - это то, что вы вводите в консоль для переключения контекста. Я дал вам +1 б/с, что ты спас меня от головокружительных головок, но вы должны действительно отполировать этот пост и объяснять это! –

5

В современном Chrome (версия 52), все, что вам нужно сделать, это выбрать IFRAME на вкладке «Элементы» из Дев инструментов. Все, что вы запускаете в консоли JS, будет автоматически запускаться в контексте выбранного iframe.

Например, здесь я выбрал IFRAME, и когда я печатаю document.location.pathname в консоль возвращает атрибут ГКЗ фрейма, вместо URL из адресной строки:

enter image description here

Смежные вопросы