Есть ли способ выполнить функцию js из сценария действия с локальным содержимым?

Я пытаюсь выполнить такую ​​функцию, как window.alert, например, из actionscript, когда и файл html, и файл swf используют протокол file:.

Кто-нибудь знает, как это сделать?

без изменения глобальных настроек безопасности Flash


person erikvold    schedule 12.03.2011    source источник


Ответы (3)


После прочтения Управление доступом к скриптам на главной веб-странице похоже, что это невозможно. .

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

Затем эта страница в локальных песочницах говорит, что не будет работать, если swf не находится в «локальной доверенной песочнице», в которую пользователь или установщик должен поместить его.

Этот блог сообщение о «песочнице с локальной файловой системой» гласит:

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

  1. SWF не может вызывать JavaScript (или vbscript) ни через URL, ни через ExternalInterface.
  2. SWF не может вызывать запросы HTTP или HTTPS.
  3. Параметры строки запроса (например, Blah.php?querystring=qs-value) удаляются и не передаются (даже для запросов к локальным файлам)
person erikvold    schedule 12.03.2011

Существует документ "Управление доступом к сценариям на главной веб-странице", в котором описывается различные способы и ограничения, позволяющие Flash-содержимому взаимодействовать с Javascript.

Согласно документу, если ваш тег для встраивания содержит параметр AllowScriptAccess, для которого установлено значение «всегда», все должно быть в порядке, независимо от того, откуда загружается страница.

person martineno    schedule 12.03.2011
comment
ах, он говорит, что домен не имеет значения, если allowScriptAccess="always", но до этого он говорит, что для файлов SWF, работающих локально, вызовы этих API успешны только в том случае, если файл SWF и содержащая веб-страница (если есть) находятся в локальном доверенном песочница безопасности. Вызовы этих методов завершатся ошибкой, если содержимое находится в изолированной программной среде «локально-с-сетью» или «локально-с-файловой системой». поэтому я не думаю, что это возможно. - person erikvold; 13.03.2011

Вам необходимо обновить настройки Flash Player, чтобы путь к файлу указан как «надежное расположение». После этого вы сможете использовать внешний интерфейс и другие методы связи JS.

Кроме того, вы не можете передавать функции JS по умолчанию из AS с помощью внешнего интерфейса (например, alert). Вам нужно написать пользовательские функции...

ActionScript:

import flash.external.ExternalInterface;
ExternalInterface.call("alertFromFlash", 'hello');

JavaScript:

function alertFromFlash(str) {
   alert(str);
}

В качестве альтернативы, если вы распространяете это среди клиентов. Может быть сложно объяснить, как изменить настройки Flash Player, поэтому вместо этого вы можете запустить сервер с компакт-диска, минуя необходимость в настройках безопасности. Раньше мне везло с сервером Flying Ant.

person Justin Putney    schedule 12.03.2011
comment
извините, я сделал свой вопрос более ясным, я не хочу, чтобы пользователям приходилось изменять свои глобальные настройки флэш-памяти. - person erikvold; 12.03.2011
comment
Тогда запуск локального сервера, как я описал выше, является единственным выходом. - person Justin Putney; 14.03.2011
comment
P.S. Или распространяйте как приложение HTML/JS AIR со встроенным Flash, но это должно быть установлено пользователем. - person Justin Putney; 14.03.2011