PDA

Просмотр полной версии : ExternalInterface и субдомен


s8000_1
17.06.2008, 04:08
Итак. Есть домен site.ru и субдомен sub.site.ru

Основая страница - домен site.ru, в корне есть файл index.php, внутри которого размещается флэшка скриптом swfObject 1.5:

var so = new SWFObject("/flash/flashka.swf", "flashka", "100%", "100%", "8", "#FFFFFF");


На субдомене находится в корне файл index.php который include'ит файл index.html с домена site.ru:

require_once("../../site.ru/www/index.html");


для того, чтобы подргужалась флэшка на субдомене, настроен редирект:

RewriteRule ^(flash){1}/(.*) http://site.ru/$1/$2 [NC,L,QSA]


Внутри флэшки есть строка

ExternalInterface.call("window.open","http://site.ru/popup/w.html");



Проблема заключается в том, что на субдомене ExternalInterface не срабатывает.

Решается, если убрать редирект и положить саму флэшку физически в папку sub.site.ru/flash/flashka.swf

Есть ли другое решение проблемы, чтобы не плодить одну и ту же флэшку во многих экземплярах на домене и всех его субдоменах?

iNils
17.06.2008, 05:24
Использовать относительную адресацию

s8000_1
17.06.2008, 13:32
Где именно?

iNils
17.06.2008, 17:51
Во флеше

s8000_1
17.06.2008, 23:16
Во флеше

Так дело не в абсолютном пути window.open:

ExternalInterface.call("alert","test");

тоже не работает на субдомене. Тут по ходу проблема именно в редиректе. Но как без редиректа не плодить флэшки непонятно.

iNils
17.06.2008, 23:31
Редирект происходит до загрузки флеша.
Создайте js функцию которая будет создавать окно, а не вызывайте window.open из флеша.

s8000_1
17.06.2008, 23:44
Уточню.

Во флэшке есть кнопка, по нажатию которой всплывает окно. Не работает именно метод ExternalInterface.call (как я уже писал выше, обычный js-алерт из флэша тоже не работает на субдомене).
Если флэшка физически не находится в папке sub.site.ru/www/flash/ (а находится в папке ../../site.ru/www/flash/), то ExternalInterface не работает; если же в этой папке флэшка лежит, то все прекрасно запускается. Но тогда получается что я должен размещать флэшку и на домене, и на субдомене.

upd: Потестил еще, не работает именно ExternalInterface.call с передачей параметров. Просто js-функция вызывается.

iNils
18.06.2008, 05:58
В SWFObject установите allowScriptAccess равным "always", я правде не пользуюсь SWFObject, но у меня после этого заработало.