Вопрос

Как открыть «междоменную защиту», чтобы JavaScript на странице мог свободно взаимодействовать с SWF, даже если он размещен в другом домене?

Я точно знаю, что эта функция по умолчанию заблокирована, но, поиграв с файлом с именем " crossdomain.xml " и функция actionscript 3: system.Security.allowDomain (" * "). Я не достигаю полного успеха, и у меня нет понимания, какой из них открыт для чего.

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

И я как-то открываю свой код для потенциальных хакеров, выполняя эту настройку?

(и в случае, если вам интересно: да, у меня есть , чтобы выполнить эту работу в сценарии, где HTML размещается в одном домене, JavaScript добавляется извне из другого домена, и SWF встроен в JavaScript из третьего домена - не спрашивайте почему, это слишком сложно объяснить - я бы тоже хотел разместить все это в одном домене).

Это было полезно?

Решение

Использование Security.allowDomain("www.example.com") в SWF позволит JS на странице www.example.com вызывать функции, представленные в SWF, с помощью ExternalInterface.addCallback(). Домен и поддомен должны точно совпадать. Использование "*" позволит любому домену взаимодействовать с SWF, но если у вас есть один конкретный домен, лучше использовать его.

Установка allowScriptAccess в always в HTML-код для встраивания позволит SWF-функции вызывать функции JavaScript.

Одна вещь, которая привлекает многих разработчиков, заключается в том, что JavaScript не сможет вызывать функции в SWF, пока SWF не завершит загрузку. К сожалению, нет события на основе JS, которое сообщит вам, когда SWF будет готов (по крайней мере, я нашел). Обычно, чтобы обойти эту проблему, я вызываю функцию JS из SWF сразу после завершения загрузки SWF, чтобы уведомить страницу о том, что SWF готов.

Тут и там есть некоторая абстракция, но если вы посмотрите на исходный код диаграмм YUI , вы можете понять, как Yahoo! установил межсистемную связь JS / SWF.

Другие советы

Одна вещь, которую я хотел бы добавить к предыдущему ответу: если вы попробуете приведенный выше код, но он не работает, проверьте, содержит ли адрес вашего сайта " www " или нет. Мой не работал и не работал, если я написал это как

Security.allowDomain("www.jeremy-knight.com");

Мне нужно было написать это как:

Security.allowDomain("jeremy-knight.com");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top