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

107

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

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

Мухд
источник
1
вы всегда можете выполнить код в window.frames[x]моде. Просто добавьте любую команду, которую хотите. IEwindow.frames[0].runFunction()
LoveAndCoding 01
1
@Ktash, не могли бы вы дать ответ?
Muhd 01
Как я могу сделать то же самое в IE? Мне крайне сложно выбрать элемент в окне консоли с помощью $, если элемент расположен во внутреннем IFRAME. Пожалуйста помоги.
tarekahf

Ответы:

149

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

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

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

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


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

var frame = document.getElementById("frame1").contentWindow;
cd(frame);
Деннис
источник
6
Могу ли я выполнить код в консоли, чтобы выполнить то же самое, или мне нужно щелкнуть селектор фреймов?
bodine
@bodine - вы нашли способ сделать это с помощью консольной команды?
arty
1
Обратите внимание, что это раскрывающееся меню теперь находится вверху консоли, а не внизу.
Мухд
1
Я не вижу этого в Chrome 38. Не могу быстро понять, как это сделать в Chrome; вместо этого использовал cd (frames [<index number>]) в Firefox.
Акрикос
1
Какая жалость. Он не сохранит выбранный фрейм, если его содержимое будет изменено. Он снова переключается на "верхний фрейм"
bryc 01
22

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

window.frames[0].runFunction()
LoveAndCoding
источник
Хорошая альтернатива, если вы предпочитаете FireBug. Спасибо.
Surreal Dreams
1
Как бы вы выполняли код вне функций, таких как команды jQuery? Или если вы хотите получить ссылку на элемент DOM в каком-то фрейме, затем выполнить код для этого элемента?
Дэвид
В качестве примера можно привести:window.frames[0].alert()
Шаян
6

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

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

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

dpercy
источник
4

Для решения firebug см. Этот ответ на другой вопрос SO. Однако не работает междоменный, как решение Денниса Chrome.

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

Мухд
источник
4

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

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

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

Больше информации здесь

Себастьян
источник
Это именно то, что я искал. (работает в Firefox) Спасибо.
user2410595 08
4
cd(document.getElementsByTagName('iframe')[0]);
Андрейка Бонарт
источник
2
Добро пожаловать в Stack Overflow! Пожалуйста, подумайте о редактировании вашего сообщения, чтобы добавить больше объяснений о том, что делает ваш код и почему он решает проблему. Ответ, который в основном содержит просто код (даже если он работает), обычно не помогает OP понять их проблему.
SuperBiasedMan 02
Спасибо! Это странный способ для Firefox сделать это, но я полагаю, что «cd (iframe)» - это то, что вы вводите в консоли для переключения контекста. Я поставил вам +1 b / c, вы избавили меня от головокружения, но вам действительно стоит доработать этот пост и объяснить его!
Скотт Смит