Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изменение стиля содержимого iframe из parent документа

21K
25 мая 2007 года
alexv
16 / / 24.04.2007
Возникло у меня желание задать стиль содержимого iframe из
основного документа.

создаю iframe:
 
Код:
this.frame_lnk = document.createElement('iframe');
this.frame_lnk.id = this.frame_id;
this.main_div_lnk.appendChild(this.frame_lnk);


получаю ссылку на document из iframe:
 
Код:
idoc = this.Get_IFrame_Doc();


инициализирую документ и задаю стиль:
 
Код:
idoc.open();
idoc.write("<html><head>");
(1)idoc.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/style.css\" />");
idoc.write("</head><body></body></html>");
idoc.close();


Интересно то, что в IE вышеприведенная конструкция работает.
А в FF нет. Он запинается на строке (1) и после, при попытке обратиться к содержимому iframe говорит, что объект не имеет свойств...

Может подскажет кто, как нужно задать стиль чтобы работало не только в IE но и в FF?

P.S. Если кто в меня кинет ссылкой на мануалы, буду очень благодарен.
Пробовал на мозиловском сайте на эту тему копать, но как-то там ничего по существу не нашел.
92
25 мая 2007 года
Тень Пса
2.2K / / 19.10.2006
[html]document.frames[0].window.document.blahblahblah[/html] - эт если iframe единственный или первый в документе

или
[html]document.getElementById('frame_id').window.document.blahblahblan[/html]вроде так сканает.
21K
25 мая 2007 года
alexv
16 / / 24.04.2007
Да нет, проблемма не в этом. Ссылку на документ я получить могу.
Этим занимается функция Get_IFrame_Doc().

Я не могу изменить стиль документа в FF. Смотри третий квотинг.
Приведенный код работает в IE но не работает в FF... Мне оч. интересно почему:-)
92
25 мая 2007 года
Тень Пса
2.2K / / 19.10.2006
я так думаю потому, что about :blank для IE всё-таки имеет body (или только <HTML>) а FF создаёт девственно чистый iframe и внутри ничего.

куда писАть, никто не знает )) особо FF. а писАть (write) надо в свойство document соотвессна, не имея этого свойства (а точнее имея его, но со значением undefined) мы не можем сделать write.

как бы вот так...

а еще FF не знает такой функции open для iframe :)

ЗЫ: если я где-то не прав, то поправьте пжалста ) самому интересно стало :)
21K
26 мая 2007 года
alexv
16 / / 24.04.2007
Цитата: Тень Пса
я так думаю потому, что about :blank для IE всё-таки имеет body (или только <HTML>) а FF создаёт девственно чистый iframe и внутри ничего.

куда писАть, никто не знает )) особо FF. а писАть (write) надо в свойство document соотвессна, не имея этого свойства (а точнее имея его, но со значением undefined) мы не можем сделать write.

как бы вот так...



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

 
Код:
idoc.open();
idoc.write("<html><head>");
(1)idoc.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/style.css\" />");
idoc.write("</head><body></body></html>");
idoc.close();


Так что в плане "записи" в документ все нормально.
Вместо (1) я могу сделать idoc.write("цукцукываыва"); и строка
будет отображена внутри фрейма.

Тут косяк именно в том, что я не могу применить стиль указанным
выше образом. IE воспринимает такой код, а FF нет.
Интересно, как это можно побороть.

Цитата:

а еще FF не знает такой функции open для iframe :)



А я и не вызываю функцию open для iframe...
idoc это ссылка на документ, содержащийся в iframe..

4.6K
27 мая 2007 года
Tokolist
268 / / 22.03.2007
2 alexv
попробуй вместо write использовать createElement и setAttribute

вот такой код у меня работал нормально. в твоем случае тоже должно получится (вместо style - link)

 
Код:
//создаем стиль если не существует вообще, что мало вероятно
if (document.styleSheets.length < 1) {
  var stl = document.createElement("style");
  stl.setAttribute("type", "text/css");
  var hdr = document.getElementsByTagName("head");
  hdr[0].appendChild(stl); // тег head всегда один
}
// дальше я добавлял стили через
// document.styleSheets[0].addRule
// и document.styleSheets[0].insertRule
21K
29 мая 2007 года
alexv
16 / / 24.04.2007
Ага... Спасибо за информацию. Решил вопрос след. образом:
Код:
idoc = this.Get_IFrame_Doc();

idoc.open();
idoc.write("<html><head></head><body></body></html>");
idoc.close();
   
stl = idoc.createElement("link");
stl.rel = "stylesheet";
stl.type = "text/css";
stl.href = "../css/my_style.css";
idoc.getElementsByTagName("head")[0].appendChild(stl);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог