Чи є спосіб змінити контекст на 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.