[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ошибка открытия окна
bars80080
Сразу извиняюсь, в js слаб

суть проблемы:
при переходе на определённую страницу по примерно такому адресу
http://localhost/ttt/unde.php?p_page=3&step2=1
у меня подгружается в плавающем фрейме календарик (ессно скрипт не я писал)
Код
<iframe name="gToday" src="calendar/flatcjs.htm" ></iframe>

в этом календарике при нажатии на число мы осуществляем переход по новой ссылке
http://localhost/ttt/unde.php?p_page=3&...;day=2007.11.12
то есть на ту же страницу, просто подгружаются данные за это число
всё отлично, всё работает, но возникает проблема:
календарик во фрейме не загружается (1)
и самое интересное, если тут же обновить страницу, то загрузится (2)

при чтении массива $_SERVER найдены следующие отличия:
(1) HTTP_ACCEPT => "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*"
REMOTE_PORT => "2914"
UNIQUE_ID => "R0LtkcCoAXMAAATYAAAFvABv"

(2) HTTP_ACCEPT => "*/*"
REMOTE_PORT => "2918"
UNIQUE_ID => "R0LtqMCoAXMAAATYAAAFdABv"

я так догадываюсь, проблема в HTTP_ACCEPT, javascript не подгружается и желательно, чтобы он был как во втором случае

как исправить его в ручную я недопёр (остальное вывалил на всякий случай)

интересно, что если для ссылки использовать команду parent.location.href = url - получается такой результат,
если parent.open(url), то получается как надо, т.е. календарик загружается, но блин в новом окне
найти бы промежуточный результат

быстрое дополнение:
данный эффект наблюдается только в IE, в opera и firefox неиспытывают проблем
но вопрос всё равно остаётся



Спустя 15 часов, 51 минута, 13 секунд (21.11.2007 - 12:27) vasa_c написал(а):
Приведите минимальный код, на котором можно воспроизвести проблему.

Спустя 2 часа, 7 минут, 59 секунд (21.11.2007 - 14:35) bars80080 написал(а):
охренеть! нашёл ошибку, сам удивился

vasa_c - стал вытаскивать код и вдруг обнаружил, что сам по себе модуль работает

проблема оказалась в следующем:
обращение к фрейму такое:
stat/info.php:
Код
<iframe width="300" height="300" name="gToday#normal#<?=$BASE?>stat/cal.stat.js" src="modules/calendar/flatcjs.htm" frameborder="no" scrolling="no" onmouseover="self.focus()" style="margin-left: auto; margin-right: auto;">
</iframe>

как видите, календарь находится в другой директории, а эта хрень:
name="gToday#normal#<?=$BASE?>stat/cal.stat.js"
позволяет в скрипте подключить файлы стилей (normal.css), конфигурацию (normal.js) и список событий на определённую дату (<?=$BASE?>stat/cal.stat.js)
первые два находятся в одном каталоге со скриптом календаря, третий вместе с файлом в котором находится фрэйм
modules/calendar/flatcjs.htm:
Код
var gTheme = self.name.split("#");
with(document) {
    write("<link rel='stylesheet' type='text/css' href='" + gTheme[1] + ".css'>");
    write("<script language='JavaScript' src='" + gTheme[1] + ".js'></scr"+"ipt>");
    write("<script language='JavaScript' src='" + gTheme[2] + "'></scr"+"ipt>"); }

не я такую штуку сочинял
и получается, что при подключении файла стилей css происходит то ли какая-то путаница с ссылками то ли ещё с чем
сами стили поключаются, но получается вот такой эффект в интернет эксплорере

так что я просто перенёс стили внутрь скрипта и всё

спасибо

p.s. а всё-таки что это за хрень такая?

и такой вопрос:
в файле событий stat/cal.stat.js
у меня находится строчка вида:
Код
addEvent('2007-11-13','статистика','#eeeecc','parent.location.href = "../../unde.php?p_page=3&step2=1&day=log.2007.11.13.dat"');

есть ли способ в javascripte указать путь более эффективно (чтобы при переносе, пути сами пересчитывались),
а то эта конструкция (../../) передвигающая указатель в корневик тоску наводит

Спустя 1 день, 6 часов, 46 минут, 40 секунд (22.11.2007 - 21:22) bret написал(а):
Для переноса относительные пути как раз хорошо подходят; для корня лучше использовать просто слэш:
addEvent('2007-11-13','статистика','#eeeecc','parent.location.href = "/unde.php?p_page=3&step2=1&day=log.2007.11.13.dat"');

Спустя 29 минут, 45 секунд (22.11.2007 - 21:52) bars80080 написал(а):
класс, как просто, спасибо
но блин у меня более специф.задача, мой корень сайта не находится в корне сервера,
то есть весь сайт лежит в некой папке papka на сервере и полный путь имеет вид
http://localhost/papka/unde.php?p_page=3&a....2007.11.13.dat
для php это решается просто:
$BASE = 'http://'.$_SERVER['HTTP_HOST'].'/papka/';
и вставляем потом куда надо этот путь, меняем один раз в файле конфигурации и сайт готов под другой сервер

а вот как эта фишка для javascript?

будем думать...

Спустя 17 часов, 20 минут, 26 секунд (23.11.2007 - 15:12) bret написал(а):
javascript полезет в корень сайта, не в корень сервера.
Я бы засунул все файлы календаря в одну папку и перекликался между ними без всяких слешей

Спустя 2 часа, 7 минут, 46 секунд (23.11.2007 - 17:20) bars80080 написал(а):
весьма логично, но мы ведь очень умные чуваки и любим всё усложнять, т.е. упрощать
вся эта история с различными директориями от оптимизации:
один календарь и несколько модулей ссылающихся на него. файл с ссылками лежит естественно у того модуля кот. его пользует

но мы же умные чуваки, через задницу, но выход найдём
пишем другую форму записи:
addEvent('2007-11-13','статистика','#eeeecc','hreftoloc("unde.php?p_page=3&step2=1&day=log.2007.11.13.dat")');
Код
var base = "<? echo $BASE; ?>";
function hreftoloc(url) {
    parent.location.href = base + url; }

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

спасибо за помощь


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.