Вибір елемента в iFrame jQuery


122

У нашому додатку ми розбираємо веб-сторінку та завантажуємо її на іншу сторінку в iFrame. Усі елементи на завантаженій сторінці мають свої токеніди. Мені потрібно вибрати елементи тими токенідами. Значить - натискаю на елемент на головній сторінці і вибираю відповідний елемент на сторінці в iFrame. За допомогою jQuery я роблю це наступним чином:

function selectElement(token) {
     $('[tokenid=' + token + ']').addClass('border'); 
}

Однак за допомогою цієї функції я можу вибирати елементи лише на поточній сторінці, а не в iFrame. Чи може хтось мені сказати, як я можу вибрати елементи завантаженої iFrame?

Дякую.

Відповіді:


157
var iframe = $('iframe'); // or some other selector to get the iframe
$('[tokenid=' + token + ']', iframe.contents()).addClass('border');

Також зауважте, що якщо srcцей iframe вказує на інший домен, з міркувань безпеки ви не зможете отримати доступ до вмісту цього iframe у JavaScript.


8
Майте на увазі, що $ ('iframe') не повертає безпосередньо iframe. Вам потрібно витягнути його з масиву.
Маккайла

Дякуємо за готовність допомогти. Але це, здається, не працює.
кіцеро

3
@cycero, це має працювати. Ви генеруєте цей iframe динамічно? Не забувайте, що якщо ви вкажете елемент src цього iframe на інший домен, ніж ваш, з міркувань безпеки ви не можете отримати доступ до його вмісту.
Дарин Димитров

Я завантажую його не з іншого домену, а з тієї ж папки. Вміст iFrame генерується динамічно і зберігається у вигляді файлу на сервері. Потім цей файл завантажується в iFrame.
cycero

@cycero, я оновив свою відповідь. Спробуйте пройтиiframe.contents()
Дарин Димитров

52

Погляньте на цю публікацію: http://praveenbattula.blogspot.com/2009/09/access-iframe-content-using-jquery.html

$("#iframeID").contents().find("[tokenid=" + token + "]").html();

Розмістіть свій вибір у способі пошуку.

Однак це може бути неможливим, якщо iframe не надходить з вашого сервера. В інших публікаціях йдеться про помилки, відхилені в дозволі.

jQuery / JavaScript: доступ до вмісту iframe


Це працює з точки зору отримання HTML елемента, але як я можу додати до цього вибраного елемента клас CSS? $ ("# iframeDiv"). content (). find ("[tokenid =" + token + "]"). addClass ("межа"); Схоже, не працює.
cycero

1
Чи отримуєте ви будь-який дозвіл, яким відмовлено у помилках? Чи можете ви дати мені HTML iframe?
Кевін Боверсокс

Ні, жоден дозвіл не відмовляв у питаннях.
cycero

20

коли ваш документ готовий, це не означає, що і ваш кадр iframe також готовий,
тож вам слід прослухати подію завантаження iframe, а потім отримати доступ до вашого вмісту:

$(function() {
    $("#my-iframe").bind("load",function(){
        $(this).contents().find("[tokenid=" + token + "]").html();
    });
});

-3

Якщо справа доступна до IFrame через консоль, наприклад, Інструменти Chrome Dev, ви можете просто вибрати контекст запитів DOM за допомогою спадного меню (див. Малюнок).

Інструменти для розробників Chrome - вибір iFrame


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.