2013-06-20 1 views
1

Итак, у меня есть iframe, и я хотел бы иметь возможность делать что-то вроде alert всякий раз, когда нажимается конкретная кнопка в iframe. Но следующий код не работаетраспознавание действий на iframe

$('.class_name').click(function(){ 
    alert('Clicked');  
}); 

на самом деле, он не будет даже alert когда IFrame нажата (что тот же самый код, что и выше, но где .class_name становится iframe).

Я посмотрел на решение от this question, и он все еще не работал!

This is a jsfiddle, который должен хорошо продемонстрировать проблему.

Так что мой вопрос: Почему WQI распознается, когда что-либо внутри iframe, а также фактическое iframe?

Edit:

Я понимаю, что я не могу общаться с IFRAME на другом домене, поэтому мой jsfiddle не будут работать ... но она не работает на том месте, где я хостинговой его на том же домен как iframe ...

ответ

2

Если ваш iframe исходит из другого домена, как в вашей скрипке, тогда ваш код JavaScript не имеет никакого доступа к его содержимому, извините!

Как @Max poins, вы можете использовать postMessage() или фрагмент URL хак для связи с IFRAME в другом домене, если есть код в этом IFRAME, чтобы справиться с этой связью с той стороны.

С iframe от tumblr.com вы можете проверить их документацию, чтобы узнать, говорит ли он об использовании этой страницы в iframe и общении с ней через барьер домена.

Теперь, если вы говорите об iframe из того же домена в качестве своей страницы, то это легко. Учитывая элемент iframe в переменной с именем myframe, вы можете использовать myframe.contentWindow, чтобы получить его объект window и myframe.contentWindow.document, чтобы получить его объект document. Оттуда вы можете делать то, что вам нужно. Например:

var $myframe = $('#myframe'), 
    myframe = $myframe[0], 
    myframewin = myframe.contentWindow, 
    myframedoc = myframewin.document; 

$(myframedoc).find('a').on('click', function() { 
    alert('Clicked!'); 
}); 

Вы можете все еще есть некоторые проблемы, используя копию JQuery на главной странице, чтобы получить доступ к вещам в IFRAME, но должны быть лучше удачи с последними версиями. В худшем случае вы можете использовать собственные DOM-события и методы для этого, но jQuery работает в this updated fiddle.

Эта скрипка использует document.write для размещения контента в iframe, но код jQuery, обращаясь к кадру, будет таким же. Разумеется, единственное, на что нужно обратить внимание, это то, был ли iframe полностью загружен, когда вы пытаетесь получить к нему доступ.

Я думаю вы можете слушать для load события на iframe элемента, содержащего страницы, но в худшем случае вы можете использовать setTimeout() или setInterval() и ждать элементов, которые вы ищете, чтобы стать доступным.

+0

обновил свой ответ ... jsfiddle не может работать, но она по-прежнему дает мне неприятности на сайте с тот же домен, что и iframe. Кроме того, он должен все же быть в состоянии предупредить, когда сам iframe нажат, не так ли? потому что это не имеет никакого отношения к тому, что является содержимым iframe! –

+0

Пожалуйста, не используйте Google для справки. Укажите на конкретный сайт (wikipedia должно быть хорошо) –

+0

Спасибо! Надеюсь, это работает :) –

0

Потому что iFrame - совершенно другой фрейм - это сделано из соображений безопасности.Например, представьте, можете ли вы загрузить страницу входа в систему в iFrame и использовать js для получения значений полей.

С различными доменами особенно, это намного сложнее общаться с JS- это поможет вам начать: How to communicate between iframe and the parent site?

+0

обновил мой ответ ... jsfiddle может не работать, но он все еще дает мне проблемы на сайте с тем же доменом, что и iframe. –

+0

Кроме того, он должен тогда быть в состоянии предупредить, когда сам iframe щелкнули, правильно? потому что это не имеет никакого отношения к тому, что является содержимым iframe! –

+0

@ RyanSaxe no. Этот клик принадлежит документу iFrame, а не вашему. –

Смежные вопросы