Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как кроссбраузерно встроить IFRAME в страницу. или Safari сакс 
:(
    Опции темы
S.A.P.
Дата 17.2.2006, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 8
Всего: 71



Идея такая. Хочу написать скрипт, который при включенни его в страницу встраивает туда IFRAME, который к тому же был бы еще пригоден и для отправки данных формы (его name указывается в target формы).

итак есть 2 варианта:
Код

var null_frame = document.createElement('IFRAME');
null_frame.name = "null_frame";
document.body.appendChild(null_frame);


Работает в Firefox и Опере 9, Осел фрейм встраивает, но при отправке данных, фрейм не видит. При этом на каком - то виндовом SP загружать страницу вобще не хотел.

Дальше
Код

document.write('<iframe name="null_frame"></iframe>');
null_frame = document.getElementById("null_frame");

Ура! работает везде smile . Но недавно выяснилось, что скрипт должен по-любому работать в Сафари (начальник сидит на Mak smile ), а в сафари оба этих варианта не пашут.

У кого есть какие идеи?

Только пожалуйста, не надо устраивать флейм по поводу того, что фреймы уже в прошлом smile .

Это сообщение отредактировал(а) S.A.P. - 17.2.2006, 09:14
PM MAIL   Вверх
12345c
Дата 17.2.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Обращайся к фрейму естественно, и браузеры поймут : )
Код
window.frames["null_frame"];

Или прописываешь id, и обращение, как выше. Но этот вариант может не работать: помнится, он в Опере-7 не хотел идти.

Это сообщение отредактировал(а) 12345c - 17.2.2006, 14:02


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Lixil
Дата 17.2.2006, 14:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











 Проблема не в этом. Проблема в том, что я пытаюсь создать именованный фрейм, а Сафари а target его не видит и при отправке данных создает новое окно.

Теперь следующая проблема о которой я забыл рассказать. Мне необходимо вытащить текст из этого IFRAME. Во всех браузерах прокатывало null_frame.contentWindow.document.body.innerHTML но только не в Safari  smile . Есть ли еще какой - нибудь способ это проделать? 
  Вверх
12345c
Дата 17.2.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Проблема, наверное, в том же доступе к фрейму.
Есть
document.frames[0]
frames[0]
имя_фрейма. ...
top.frames[...] (может быть, там невзначай сделали все фреймы на одном уровне, и надо parent|top)
document.getElementById()


Будет ли видеть:
document.getElementsByTagName('IFRAME')[0]
?
Добавлено @ 14:56
(Мак-а нет, поэтому сам не могу проверить.)


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Lixil
Дата 17.2.2006, 18:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Еще раз smile .
Сам объект я получаю null_frame, в любом случае.
IFRAME выводится, в любом случае.
Меня волнует то, что <form target="null_frame"> его не видит (name и id на всякий случай выставлены в "null_frame").
И нужны любые аналоги null_frame.contentWindow.document.body.innerHTML для получения содержимого IFRAME.
Все smile .
  Вверх
12345c
Дата 17.2.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



А, т.е. http-запрос его не видит. Есть 2 предположения - бр-р считает, что имена id и name конфликтуют и не понимает ни одного. Сделайте разными. Или есть ограничение на размер фрейма, например, не может быть менее 100x100.

Про второе я так и понял, что нужен доступ к фрейму через JS.
Всё, что перечислил - варианты доступа по 2-му типу. Если значение чего-то одного будет не null, то будет доступен и документ.
PM WWW   Вверх
Lixil
Дата 17.2.2006, 18:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(12345c @ 17.2.2006, 18:42 Найти цитируемый пост)
А, т.е. http-запрос его не видит. Есть 2 предположения - бр-р считает, что имена id и name конфликтуют и не понимает ни одного. Сделайте разными

Попробовал, не работает.

Цитата(12345c @ 17.2.2006, 18:42 Найти цитируемый пост)
Или есть ограничение на размер фрейма, например, не может быть менее 100x100.
Это исключено. Создавал точно такой - же фрейм напрямую, target его видел, но текст упороно не хотел забираться. Но мне нужно создавать его динамически. Прямое вкрапление не желательно, т.к. скрипт уже используется везде.

Цитата(12345c @ 17.2.2006, 18:42 Найти цитируемый пост)
Про второе я так и понял, что нужен доступ к фрейму через JS.
Всё, что перечислил - варианты доступа по 2-му типу. Если значение чего-то одного будет не null, то будет доступен и документ.
Доступ я получаю. Через getElementById. Причем это точно IFRAME (алертом проверил), не null. Не берется текст из него, грубо говоря innerHTML этого фрейма тем способом, который работает в IE, Opera, Mozilla (null_frame.contentWindow.document.body.innerHTML).

  Вверх
12345c
Дата 17.2.2006, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Сделал пример, и в ie6 он тоже не работает с этим свойством (null_frame.contentWindow.document.body.innerHTML).
Но работает такой доступ:
Код
<script>document.write('<iframe name="null_frame" src=другой_файл.htm width=600><\/iframe>');
null_frame = document.getElementById("null_frame");

onload=function(){setTimeout("alert(top.frames['null_frame'].document.all[0].innerHTML);",999);}

//document.close();

</SCRIPT>456

Или, если не полное содержимое, то alert(top.frames['null_frame'].document.body.innerHTML);


Во всяком случае, вот 2 основных разных метода, и первый (document.getElementById("null_frame")) не работал в не очень старых Операх.

Это сообщение отредактировал(а) 12345c - 17.2.2006, 20:14


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Sardar
Дата 19.2.2006, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



S.A.P., я так понял проблема в том что форма фрейм не видит, trarget="name" ?
А в чём проблема положить фрейм в вёрстку, не создавать его из скриптов? Работать будет везде.
Также попробуй задать ещё и id, идеентичный name.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ciber SLasH
Дата 24.2.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



Первый вопрос не понял, а по второму вот:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<title>MAIN</title>
<script type='text/javascript'>
/*** Инициализация необходимых переменных (и другое) ***/
function init() {
var ifr = document.getElementById('ifr');
  ifr_cont = (ifr.contentWindow) ? ifr.contentWindow : null;
  if (ifr_cont == null)
    if (( ifr_cont = (ifr.contentDocument) ? ifr.contentDocument : null ) == null)
      return alert('Ваша бродилка не может работать с содержимым IFRAME !!\n\n' +
                   'ifr.contentWindow == null\n' +
                   'ifr.contentDocument == null');
}
</script>
</head>

<body>
<center>
<iframe id="ifr" src='test.htm' width="250" height="100" onLoad='init()'>Ваша бродилка не поддерживает IFRAME</iframe>
<p>
<a href='javascript: void(0)' onClick='alert(ifr_cont.document.documentElement.innerHTML)'>Вывести содержимое IFRAME</a><br />
</p>
</center>
</body>
</html>

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.