ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ:
Есть две проблемы:
Используйте $('#source').contents()
вместо простого использования $('#source')
Правило css для .hover
не отображается в контексте iframe.
Либо используйте .css()
для прямой установки стиля, добавьте ссылки CSS в demo.php
или клонируйте все стили основного документа в iframe с помощью jQuery.
Также вам следует избегать .live
, так как кажется, что некоторая проблема s внутри iframes (при использовании live jQuery связывает специальные eventHandlers с документом и проверяет события, когда они всплывают)
Вот рабочий пример ( jsFiddle link ):
var $c = $('#source').contents();
//clone all styles from this document into the iframe
$c.find('head').append($('style, link[rel=stylesheet]').clone());
$c.find('body').prepend('<b>This is a test</b><br><b>Click here</b>');
$c.delegate('b', 'hover', function() {
$(this).toggleClass('hover');
});
$c.delegate('b', 'click', function() {
alert('You clicked on:' + $(this).text());
});
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Ваша проблема в том, что вы используете iframe в качестве контекста. Вместо этого вы должны использовать рамочный документ.
Также для безопасности вы можете добавить свой код в событие onload, например:
var doc = window.frames['source'].document;
$(doc).ready(function(){
$('body').prepend('This is outside the iframe<br>');
$('body',doc).prepend('This is inside the iframe<br>');
});
Вы можете просмотреть этот пример использования jsFiddle в реальном времени .
РЕДАКТИРОВАТЬ 1:
Хорошо, поэтому настоящая проблема в том, что стили css не видны в iframe.
Например, если вы используете $(this).css('color':'red')
вместо addClass
, это будет работать. Смотрите обновленный jsFiddle
То, что я предлагаю, это либо иметь правильные стили CSS уже в demo.php
, либо вставлять потом так:
$('head',doc).append($('style, link[rel=stylesheet]').clone());
обновлен jsFiddle - с addClass и клонированием стилей