Как мне открыть «междоменную безопасность», чтобы JavaScript на странице мог свободно взаимодействовать с SWF, даже если он размещен в другом домене?
Я точно знаю, что связь этой функции заблокирована по умолчанию, но если поиграться с файлом с именем «crossdomain.xml» и функцией ActionScript 3: system.Security.allowDomain («*»). Однако у меня нет полного успеха, и я не понимаю, какой из них открывается для чего.
Есть ли другие скрытые уровни безопасности, о которых мне нужно подумать в этом сценарии?
И открываю ли я свой код для потенциальных хакеров, выполнив эту настройку?
(и если вам интересно: да, я имеют, чтобы это работало в сценарии, где html размещается в одном домене, JavaScript добавляется извне из другого домена, а SWF внедряется JavaScript из третьего домена - не спрашивайте почему, это слишком сложно объяснить - я тоже хотел бы разместить все это в одном домене).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Использование 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-файл готов.
Здесь и там есть некоторая абстракция, но если вы взглянете на исходный код Графики YUI, вы сможете понять, как Yahoo! получил междоменное взаимодействие JS / SWF.
К предыдущему ответу я бы добавил одну вещь: если вы попробуете приведенный выше код, а он не сработает, проверьте, содержит ли адрес вашего сайта «www» или нет. Мой не работал и не работал, если я написал его как
Security.allowDomain("www.jeremy-knight.com");
Мне нужно было написать это как:
Security.allowDomain("jeremy-knight.com");
Почему бы не добавить их обоих?
Я искал то, что кажется часами, и это, безусловно, лучшее объяснение, которое я когда-либо встречал. Спасибо за ясное объяснение!