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


Автор: Rodenis 24.12.2006, 06:50
Здравствуйте!
Столкнулся с такой проблемой - имеется скрипт, в котором все сделано в разных фреймах.
И все бы ничего, но один фрейм вызывается по другому порту:
Код

<frameset rows="50,*">
<frame src="http://chat.site.ru/navibar.php?session=123" name="navibar" id='navibar'>
<frame src="http://chat.site.ru:5555/?123" name="shower" id='shover'>

И никак не получается наладить взаимодействие между фреймами в Опере и FF.
Пробовал писать в каждом фрейме, и даже во фреймсете (который top):
document.domain='site.ru', заработало под FF, опера ни в какую.

консоль ошибок оперы выдает:
message: Security error: attempted to read protected variable

эксперименты с
Код

document.domain='ru';
или
Код

document.domain='chat.site.ru';


не помогают smile
Опера не сдается smile

решил проверять location.hash
и что вы думаете?
адрес фрейма с нестандартным портом НЕДОСТУПЕН в опере из других фреймов.
вообще мрак...
приписал к фрейму, помимо name=shover, id=shower
сделал кучу вариантов обращений. ни один не работает! в ИЕ некоторые работают smile

Код

<button onClick="alert(window.top.document.frames.shower.location);">src1</button>
<button onClick="alert(window.top.document.getElementById("shower").location);">src2</button>
<button onClick="alert(window.top.document.getElementById("shower").src);">src3</button>
<button onClick="alert(window.top.document.getElementById("navibar").src);">src4</button>
<button onClick="alert(window.top.frames.shower.location);">src1</button>
<button onClick="alert(window.top.getElementById("shower").location);">src2</button>
<button onClick="alert(window.top.getElementById("shower").src);">src3</button>
<button onClick="alert(window.top.getElementById("navibar").src);">src4</button>
<button onClick="alert(window.top.frames.shower.location);">src1</button>
<button onClick="alert(top.frames.shower.src);">src2</button>
<button onClick="alert(top.getElementById("shower").location);">src3</button>
<button onClick="alert(top.getElementById("shower").src);">src4</button>
<button onClick="alert(top.getElementById("navibar").src);">src5</button>

Пожалуйста, подскажите, как достать из этого фрейма другие, или его из других?

Автор: Sardar 24.12.2006, 15:42
С Оперой это вряд ли обойдёться, она очень упрямая по части безопасности. Попробуй в document.domain прописать домен с портом (80), бред но мало ли чего.

Можно отказаться от фреймов и дёргать инфу через XMLHttpRequest, домены одни, запрос Опера сделать позволит. Правда это потребует большой переделки клиентской части.

Автор: Rodenis 24.12.2006, 15:46
спасибо за совет
с портом пробовал, не помогло

через XMLHttpRequest невыгодно. много тарфа будет.
сейчас чат работает в непрерывном режиме, с C++ демоном

Автор: Zeroglif 24.12.2006, 16:48
Цитата(Rodenis @  24.12.2006,  06:50 Найти цитируемый пост)
сделал кучу вариантов обращений. ни один не работает!


Код

onClick="alert(window.top.getElementById("navibar").src);"


Кавычки же не чередуются, ошибки должны лезть из всех щелей...

Автор: Sardar 24.12.2006, 16:54
Цитата(Rodenis @  24.12.2006,  14:46 Найти цитируемый пост)
через XMLHttpRequest невыгодно. много тарфа будет.

На самом деле гораздо меньше чем во фрейме, если отдавать только сообщение в XML, а не всю вёрстку. Применить XSLT стили можно сразу на клиенте, благо Опера 9  это уже умеет. Ну или по старинке форматировать в ручную скриптом выбирая ноды.

Автор: Rodenis 25.12.2006, 04:04
Zeroglif, спасибо, действительно меня проглючило
убрал кавычки, все равно не помогло - результат тот же

Sardar, фрейм же не перегружается! он ДОгружается. текст сообщений постепенно подгружается во фрейм. это самый экономичный вариант,ч естное слово smile
там даже xml никакого нет, просто текст сообщений.

Автор: Sardar 25.12.2006, 16:42
Цитата(Rodenis @  25.12.2006,  03:04 Найти цитируемый пост)
он ДОгружается. текст сообщений постепенно подгружается во фрейм.

Если коннект постоянный, поддерживаемый пробелами или скриптовым детектором лага как в chat.spb.ru... то не хилая должно быть нагрузка на сервер столько коннектов одновременных держать smile

Агава, где хост держал, по моему 48 максимум даёт. Так что дозагрузка по XMLHttpRequest, где ты дёргаешь только свежие сообщения и не держишь постоянного коннекта ИМХО всё равно лучше.

Автор: Avb 27.12.2006, 17:15
Цитата(Sardar @  24.12.2006,  15:42 Найти цитируемый пост)
Можно отказаться от фреймов и дёргать инфу через XMLHttpRequest, домены одни, запрос Опера сделать позволит.


Sardar, Вы уверены?

Буквально пару дней назад пробовал аякс-запросы: домен один, порты разные. Глухо как в танке. 
В каких браузерах смотрел не помню, но в ФФ точно не работало.

Использовал Ajax.Request из prototype.js.

Автор: Sardar 27.12.2006, 17:30
Цитата(Avb @  27.12.2006,  16:15 Найти цитируемый пост)
Sardar, Вы уверены?

Нет, не уверен, спасибо за инфу...  smile 

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