Чи є спосіб змінити контекст на iframe в консолі javascript?


107

Я хотів би змінити контекст javascript, виконаний у консолі розробника webkit / консолі firebug, щоб виконати його код, як він працює з внутрішньої рамки сторінки.

Я знаю, що міг би це зробити, відкривши сторінку в iframe на окремій сторінці, але хочу запустити код там, де він взаємодіє з батьківським фреймом.


1
ви завжди можете виконати код у window.frames[x]моді. Просто додайте будь-яку команду, яку ви хочете. IEwindow.frames[0].runFunction()
LoveAndCoding

1
@Ktash, ви, можливо, хотіли б відповісти на це?
Muhd

Як я можу зробити те саме в IE? Мені надзвичайно важко вибрати елемент у вікні консолі за допомогою $, якщо елемент знаходиться у внутрішній IFRAME. Будь ласка, допоможіть.
tarekahf

Відповіді:


149

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

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

Firefox має подібну особливість, яка наразі розробляється:

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


Ви також можете переміщатися по кадрах, використовуючи командний рядок :

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

6
Чи можу я виконати код у консолі, щоб виконати те саме, чи потрібно натиснути на селектор кадру?
боді

@bodine - ти знайшов спосіб виконати це за допомогою команди консолі?
arty

1
Зауважте, що це спадне меню знаходиться вгорі консолі, а не внизу.
Мухд

1
Я не бачу цього в Chrome 38. Не вдалося швидко зрозуміти, як це зробити в Chrome; використовували натомість cd (фрейми [<індексний номер>]) у Firefox.
Акрикос

1
Який сором. Він не збереже вибраний кадр, якщо зміст вмісту кадру буде змінено. Він перемикається на "верхній кадр"
bryc

22

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

window.frames[0].runFunction()

Гарна альтернатива, якщо FireBug - ваша зброя на вибір. Дякую.
Сюрреалістичні сни

1
Як би ви виконували код поза такими функціями, як команди jQuery? Або якщо ви хочете отримати посилання на елемент DOM під деяким фреймом, тоді виконайте код проти цього елемента?
Девід

Так як приклад може бути:window.frames[0].alert()
Шаян

6

У сьогоднішньому Chrome (версія 52) все, що вам потрібно зробити, це вибрати рамку кадрів на вкладці «Елементи» інструментів розробника. Все, що ви запускаєте в консолі JS, автоматично запускається в контексті вибраного iframe.

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

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


4

Для вирішення проблеми firebug дивіться цю відповідь на інше питання SO. Однак це не працює між доменом, як рішення Chrome від Dennis.

Редагувати: З новішими версіями firebug у них може бути виправлена ​​проблема міждоменних.


4

Виконання операторів та команд скриптів за замовчуванням виконується в контексті вікна верхнього рівня. Якщо ви використовуєте кадри, використовуйте консольну команду "cd ()".

cd () Виклик cd () без параметрів повертається у вікно верхнього рівня.

cd (window) Дозволяє змінити оцінку вираження виразів командного рядка з типового вікна верхнього рівня веб-сторінки на вікно кадру.

Більше інформації, тут


Це саме те, що я шукав. (працює у Firefox) Дякую
user2410595

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

2
Ласкаво просимо до переповнення стека! Будь ласка, подумайте про редагування своєї публікації, щоб додати більше пояснень про те, що робить ваш код і чому це вирішить проблему. Відповідь, що здебільшого просто містить код (навіть якщо він працює), зазвичай не допомагає ОП зрозуміти їх проблему.
SuperBiasedMan

Дякую! Це незвичайний спосіб для Firefox це зробити, але я думаю, що "cd (iframe)" - це те, що ви вводите в консоль для переключення контексту. Я дав тобі +1 б / с, ти врятував мені тонни ударів по голові, але ти справді повинен відполірувати цю посаду та пояснити її!
Скотт Сміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.