Приходится иногда сталкиваться в программировании с такими «костылями», что даже не знаешь, стоять или падать.
Вот, например, извращенная задачка в веб-программировании. Есть два сайта — один на ASP.NET под IIS, другой на PHP под Apache. Первый крутится по адресу, к примеру, http://webserver:80/, другой — http://webserver:8080/. Задача — на первом сайте есть ссылка, открывающая окошко со страничкой второго сайта, оттуда надо передать JavaScript-ом какие-то данные в родительское окно. Думаю, все видели вот такие «палитры», так что представить в состоянии.
Разница в том, что «палитра» расположена немного по другому адресу и может подпадать под блокировку «кроссдоменной» передачи данных. Причем самое интересное — это то, что каждый из трех популярных браузеров понимает «кроссдоменность» по-разному.
Internet Explorer всех версий вообще не делает различий между domain.com:80 и domain.com:8080. Соответственно, все работает правильно.
Firefox считает такие «домены» разными и по умолчанию блокирует передачу. Правда, спасает вот такое заклинание, произнесенное перед открытием «палитры» в родительском окне и в дочернем — до передачи данных:
document.domain = document.domain;
Смысл заклинания совершенно необъясним, поэтому «это нельзя понять, это надо запомнить».
Opera на такие дешевые трюки не ведется и блокирует передачу данных между этими окнами в любом случае. Самый безопасный браузер, хуле.
Вопрос фанатам «альтернативных браузеров»: и чего же вы добились, обвиняя Microsoft и Internet Explorer во всех смертных грехах, начиная от монополизма? Похоже, только того, что в каждом из браузеров надо применять свои «костыли и подпорки», а любая программа на JavaScript начинается с разбора трех случаев.
PS К сожалению, ни прикрутить ASP.NET к Apache, ни PHP к IIS нереально — апачевский модуль для ASP.NET совершенно не хочет работать, а PHP-шная часть сайта существенно использует апачевские возможности по работе с .htaccess.
>любая программа на JavaScript начинается с разбора трех случаев
любая программа на JavaScript начинается с разбора более чем трех случаев
добавляем Chrome, основные мобильные браузеры (а что, и их забывать?), да мало ли что еще…
Не-е-е, не надо нам таких извращений! Хоть какой-то из трех должен подойти! :)
что-то вы ужасы расписываете.
Любой скрипт вставляется на раз с помощью
document.write(«….»), document.write(») и прочие аджаксы
Так я не скрипт вставляю, с этим проблем нет. Я из скрипта в «другом», с точки зрения Firefox, домене пытаюсь обращаться к opener.document.foo.bar.bla.bla.bla.
Причем Firefox без этого чудного выражения считает разными, к примеру, 192.168.100.1:8080 и 192.168.100.1, или domain.com:8080 и domain.com.