Есть ли способ изменить контекст на iframe в javascript-консоли?

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

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

Ответ 1

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

enter image description here

В Firefox есть аналогичная функция, находящаяся в разработке:

enter image description here


Вы также можете перемещаться по рамкам с помощью командной строки:

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

Ответ 2

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

window.frames[0].runFunction()

Ответ 3

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

Например, здесь я выбрал iframe, и когда я набираю document.location.pathname в консоли, он возвращает атрибут src iframe, а не URL-адрес из адресной строки:

введите описание изображения здесь

Ответ 4

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

Изменить: с более новыми версиями firebug у них может быть проблема с междоменным доступом.

Ответ 5

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

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

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

Дополнительная информация, здесь

Ответ 6

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