Как сделать междоменное взаимодействие между JavaScript и Flash?

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

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

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

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
0
9 622
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Использование 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.

Я искал то, что кажется часами, и это, безусловно, лучшее объяснение, которое я когда-либо встречал. Спасибо за ясное объяснение!

zombat 16.06.2011 21:10

К предыдущему ответу я бы добавил одну вещь: если вы попробуете приведенный выше код, а он не сработает, проверьте, содержит ли адрес вашего сайта «www» или нет. Мой не работал и не работал, если я написал его как

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

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

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

Почему бы не добавить их обоих?

simo 30.04.2014 09:48

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