не могу заставить его работать: crossdomain.xml и Flash

У меня есть (собственно созданная) демонстрация swf с кнопкой, запускающей getUrl('SampleTargetPage.html')

Теперь я хочу разместить swf на нашем cdn cdn.example.com, а моя html-страница находилась на www.example.com.

Более структурировано:

www.example.com/test.html
cdn.example.com/someflash.swf
cdn.example.com/crossdomain.xml

Я подумал, что будет достаточно предоставить crossdomain.xml на cdn.example.com, чтобы ссылки работали. Но: похоже, плагин Flash вообще никогда не запрашивает crossdomain.xml!

Теперь, есть ли что-то, что я должен добавить в сам SWF, чтобы это заработало? Большое спасибо!

edit: мне нужно использовать Security.loadPolicyFile? edit: Может быть, мне вообще не нужен crossdomain.xml, потому что все находится под * .example.com?


person hugri    schedule 28.06.2010    source источник
comment
Если Flash player не загружает политику домена, то это не имеет отношения к политикам, почему ваши ссылки не работают. Правильно ли я предполагаю, что вы пытаетесь getUrl('javascript:goToPage();'), а не getUrl(javascript:goToPage()), как вы неправильно указали в своем сообщении?   -  person Billy Back Bedroom    schedule 29.06.2010
comment
Изменен исходный вопрос: я НЕ использую javascript, это просто вызов getUrl('test.hml'), который не работает между доменами. (Моя ошибка думать, что я использовал JS, извините за это)   -  person hugri    schedule 29.06.2010


Ответы (2)


Нашел проблему! Решение состояло в том, чтобы установить для параметра allowscriptaccess значение «всегда» в параметрах флэш-памяти:

 allowscriptaccess : 'always'

Это справочная информация о проблеме:

Начиная с Flash Player 9, вызовы getURL (или navigationToURL), влияющие на «_self», «_parent» или «_top», считались взаимодействием с размещенной HTML-страницей. Начиная с Flash Player 9, обновление 3, затрагиваются все вызовы целей, кроме «_blank». Это сделано для того, чтобы ненадежные SWF-файлы, встроенные в HTML-страницу, не могли повторно перемещаться по странице браузера (или фрейму на этой странице) без предупреждения пользователя о том, что он сейчас посещает другой сторонний веб-сайт. Он также применяет ограничения междоменных сценариев для всех html-фреймов.

Чтобы защитить HTML-страницы от ненадежных SWF-файлов, Flash Player поддерживает HTML-параметр AllowScriptAccess в тегах и , отображающих Flash-содержимое. AllowScriptAccess может иметь три значения:

  • «всегда»: разрешает SWF-файлу взаимодействовать с HTML-страницей во всех случаях.
  • «sameDomain»: разрешает SWF-файлу взаимодействовать с HTML-страницей только в том случае, если их домены точно совпадают. По умолчанию HTML-шаблоны публикации в приложении разработки Adobe Flash выводят HTML-код с указанием AllowScriptAccess="sameDomain", так как это часто является желательным поведением безопасности.
  • «никогда»: полностью предотвращает взаимодействие SWF-файла с HTML-страницей.

Вызов getURL (или navigationToURL) теперь находится под управлением параметра AllowScriptAccess. Другими словами, AllowScriptAccess должен иметь значение «всегда» или «sameDomain», а домены HTML-страницы и SWF-файла должны точно совпадать. В противном случае вызов getURL (или navigationToURL) завершится ошибкой.

Это новое поведение, представленное в Flash Player 9 в соответствии с моделью безопасности, затрагивает все версии SWF. Adobe знает, что это может изменить поведение некоторых SWF-носителей, развернутых до выпуска Flash Player 9, и приносим извинения за возможные неудобства.

person hugri    schedule 29.06.2010

Файл crossdomain.xml должен находиться в корне сайта и содержать список всех доменов, имеющих доступ к файлам внутри. Вы также можете разрешить доступ ко всем файлам, если хотите.

Обратите внимание, что в приведенном ниже примере я использовал подстановочный знак (*) вместо поддомена, поэтому я могу предоставить доступ ко всем поддоменам, которые входят в мой основной домен. Первые две записи — это просто примеры конкретных внешних сайтов, если вы хотите ограничить это. но вы всегда можете просто сделать ..*, чтобы разрешить все.

Содержимое будет выглядеть так:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy 
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="www.siteone.com" />
  <allow-access-from domain="sitetwo.com" />
  <allow-access-from domain="*.mysite.com" />
</cross-domain-policy>
person Ibis    schedule 29.06.2010
comment
спасибо, но это мне не очень помогает. У меня есть такой файл, но он не запрашивается Flash ... - person hugri; 29.06.2010