Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Отрисовка меню с помощью процедуры в iframe


Автор: ОнКофе 28.3.2006, 12:48
Снова я тут не могу разобраться, надеюсь что ты сможешь мне помочь!

есть два файла... то самое меню
Код

var menu = new Array();    
menu[menu.length] = {title: "ПУНКТ МЕНЮ №1", url: "http://www.jsguide.spb.ru/",    
sub: [    
{title: "подменю №1.1", url: "http://www.jsguide.spb.ru/"},    
{title: "подменю №1.2", url: "http://www.jsguide.spb.ru/"},    
{title: "подменю №1.3", url: "http://www.jsguide.spb.ru/"}]};    
menu[menu.length] = {title: "ПУНКТ МЕНЮ №2", url: "http://www.jsguide.spb.ru/",    
sub: [    
{title: "подменю №2.1", url: "http://www.jsguide.spb.ru/"},    
{title: "подменю №2.2", url: "http://www.jsguide.spb.ru/"},    
{title: "подменю №2.3", url: "http://www.jsguide.spb.ru/"},    
{title: "подменю №2.4", url: "http://www.jsguide.spb.ru/"}]};    
menu[menu.length] = {title: "ПУНКТ МЕНЮ №3", url: "http://www.jsguide.spb.ru/"};    
menu[menu.length] = {title: "ПУНКТ МЕНЮ №4", url: "http://www.jsguide.spb.ru/",    
sub:[    
{title: "подменю №4.1", url: "http://www.jsguide.spb.ru/"},    
{title: "подменю №4.2", url: "http://www.jsguide.spb.ru/"}]};

<!-- потом идет конструктор который это меню рисует? с использованием IFRAME -->



а в адресе iframe src= стоит имя нового файла, в котором есть процедура - она должна отрисовывать именно то подменю которое нужно

Как сделать, есть какие-нибудь идеи?


Автор: 12345c 28.3.2006, 13:59
Я не в курсе, но зачем в меню использовать фрейм, в чём замысел? Менять стили меню, сменяя процедуру в фрейме?

(Фрейм использует много ресурсов системы, как новое окно, поэтому их число нужно минимизировать.)

Автор: Ciber SLasH 28.3.2006, 14:06
ОнКофе, вот тебе пример доступа к данным из IFRAME-а к главному документу и наоборот:
index.htm:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251' />
<title>MAIN</title>
<script type='text/javascript'>
/*** Инициализация необходимых переменных (и другое) ***/
function init() {
ifrm = document.getElementById('ifr');
ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : ifrm.contentDocument;
}

function showData() {
    alert('[ Из index.htm ]\n Данные из iframe: '+ifrm.document.getElementById('test').innerHTML);
}
</script>
</head>

<body>
<center>
<iframe id="ifr" src='iframe.htm' width="350" height="100" onLoad='init()'></iframe>
<p><input type="button" onClick='showData()' value="Показать данные из iframe.htm"></p>
<div id='test' style='display: none'>Данные из index.htm</div>
</body>
</html>

iframe.htm:
Код

<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<script type='text/javascript'>
function showData() {
// Доступ к главному документу
alert("[ Из iframe.htm ]\n Данные из главного документа: "+parent.document.getElementById('test').innerHTML);
}
</script>
</head>

<body>
<input type="button" onClick='showData()' value="Показать данные из index.htm">
<div id='test' style='display: none'>Данные из iframe.htm</div>
</body>
</html>


ЗЫ: а вообще IFRAME — это suxx.

Автор: Aliance 28.3.2006, 14:11
ОнКофе, на форуме есть правила, которые обязаны соблюдать все:
• заголовок темы должен кратко отражать ее суть!
• если вы хотите поговорить с КОНКРЕТНЫМ участником - используйте системку ПМ (ЛС).

В следующих раз тема будет удалена без предупреждения.
Правила форума: http://forum.vingrad.ru/index.php?s=&act=SR&f=27

Автор: ОнКофе 28.3.2006, 15:02
Цитата(Aliance @ 28.3.2006, 14:11 Найти цитируемый пост)
ОнКофе, на форуме есть правила, которые обязаны соблюдать все:
• заголовок темы должен кратко отражать ее суть!
• если вы хотите поговорить с КОНКРЕТНЫМ участником - используйте системку ПМ (ЛС).

В следующих раз тема будет удалена без предупреждения.

Извените!!! Больше такого не повториться!!!
Цитата(Aliance @ 28.3.2006, 14:11 Найти цитируемый пост)
В следующих раз тема будет удалена без предупреждения.

Спасибо что на первый раз не удалили тему!!!
Цитата(12345c @ 28.3.2006, 13:59 Найти цитируемый пост)
Я не в курсе, но зачем в меню использовать фрейм, в чём замысел? Менять стили меню, сменяя процедуру в фрейме?

я бы с удовольствием не использовал!! Из-за этих iframe одни только неприятности... просто другого выхода я не вижу... ситуация такая, что рядом с меню на страницах есть элементы форм а иногда даже flash-анимация или applets, поэтому когда такие элементы оказываются рядом с меню, подменю, которое появляется слева получается под этими элементами и никакой z-index не спасает. постоянно эти flash получаются свеху выползающего подменю... если есть идеи как обойти эту проблему не используя iframe - выслушаю с удовольствием!!!!

Цитата(Ciber SLasH @ 28.3.2006, 14:06 Найти цитируемый пост)
ЗЫ: а вообще IFRAME — это suxx.

полностью согласен!!!!


Цитата(Ciber SLasH @ 28.3.2006, 14:06 Найти цитируемый пост)
ОнКофе, вот тебе пример доступа к данным из IFRAME-а к главному документу и наоборот:

Разобрался быстро... правда пришлось немного под ASP переделать!!!Большое спасибо!!!

Автор: Ciber SLasH 28.3.2006, 15:13
На счёт flash-а: если это элемент интерфейса, то можно его засунуть в самый верх страницы, если это какая-то игра, то можно открыть в новом окне без какого-либо интерфейса.

Автор: ОнКофе 28.3.2006, 15:28
Ciber SLasH, если это какой-то банер, который должен стоять именно там независимо от того появляется на нем меню или нет... Что тогда???

Автор: Ciber SLasH 28.3.2006, 15:46
На http://mail.ru/ тоже баннеры flash-евые висят, но дизайн от этого не страдает. Нужно правильно подходить к дизайну страницы.

Автор: 12345c 28.3.2006, 16:07
Для информации: я наблюдал, что в iframe в IE div-ы глючат (плавающие) - текст в них не отображается, а сквозь поле дива просвечивает фон основного окна. Так что, убегая от одной неприятности, можно попасть в другую после долгой кропотливой работы. Советую сначала вручную нарисовать меню, которое предполагается генерировать в фрейме и обойти баги, которые при этом появятся.

Есть способ - при появлении слоя над формами делать элементы форм невидимыми. И с флешем то же. Муторно, но что поделаешь. Другой способ - не наезжать на них, разворачивать меню в отведённой для него колонке. И классика , и задача не переусложняется.

Автор: ОнКофе 28.3.2006, 16:37
Цитата(12345c @ 28.3.2006, 16:07 Найти цитируемый пост)
Для информации: я наблюдал, что в iframe в IE div-ы глючат (плавающие) - текст в них не отображается, а сквозь поле дива просвечивает фон основного окна.

ну это не глюк... я так иногда сам делаю... просто пишешь
Код

iframe allowtransparency="true"

а в файле который нужно закрузить в iframe пишешь
Код

<body style="background:none;">

Хотя работает этот "эффект" только в IE и FF
Цитата(12345c @ 28.3.2006, 16:07 Найти цитируемый пост)
Есть способ - при появлении слоя над формами делать элементы форм невидимыми. И с флешем то же. Муторно, но что поделаешь.

а вот это интереснее!!! А каким образом этого добиться???

Автор: Ciber SLasH 28.3.2006, 16:42
А что тут не понятного?
Сделать элемент невидимым: элемент.style.visibility = "hidden";

Автор: ОнКофе 28.3.2006, 17:04
Цитата(Ciber SLasH @ 28.3.2006, 16:42 Найти цитируемый пост)
А что тут не понятного?
Сделать элемент невидимым: элемент.style.visibility = "hidden";


не.... тогда не канает.... представь себе баннер на полэкрана.... тут на него выпадает подменю, и весь баннер исчезает........ НЕТ, не пойдет!

Но хоть этот вариант и не подходит все же интересно как отслеживать когда на flash-ем появилось меню?

Автор: Ciber SLasH 28.3.2006, 17:22
Цитата(ОнКофе @ 28.3.2006, 18:04 Найти цитируемый пост)
тут на него выпадает подменю, и весь баннер исчезает.

А вот и нет. visibility: hiden не влияет на расположение элементов — элемент просто станет невидимым, в отличие от display: none — элемент исчезает из страницы.

Автор: 12345c 28.3.2006, 18:56
Цитата(ОнКофе @ 28.3.2006, 16:37 Найти цитируемый пост)
ну это не глюк... я так иногда сам делаю... просто пишешь

Разметка HTML:
iframe allowtransparency="true"
Нет, именно глюк, без параметров в теге. Не фон фрейма прозрачный, а на _ месте _ плавающего _ дива _ появляется _ прозрачный _ фон , с исчезновением содержания дива.

Автор: ОнКофе 29.3.2006, 09:14
Цитата(Ciber SLasH @ 28.3.2006, 17:22 Найти цитируемый пост)
Цитата(ОнКофе @ 28.3.2006, 18:04 )
тут на него выпадает подменю, и весь баннер исчезает.

А вот и нет. visibility: hiden не влияет на расположение элементов — элемент просто станет невидимым, в отличие от display: none — элемент исчезает из страницы.

Ну я просто не так выразился.... подменю появляется и весь баннер (длинной на полстраницы) становится невидимым....


Цитата
Нет, именно глюк, без параметров в теге. Не фон фрейма прозрачный, а на _ месте _ плавающего _ дива _ появляется _ прозрачный _ фон , с исчезновением содержания дива.

А есть ссылка помотреть???

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)