Я пытаюсь выполнить такую функцию, как window.alert
, например, из actionscript, когда и файл html, и файл swf используют протокол file:
.
Кто-нибудь знает, как это сделать?
без изменения глобальных настроек безопасности Flash
Я пытаюсь выполнить такую функцию, как window.alert
, например, из actionscript, когда и файл html, и файл swf используют протокол file:
.
Кто-нибудь знает, как это сделать?
без изменения глобальных настроек безопасности Flash
После прочтения Управление доступом к скриптам на главной веб-странице похоже, что это невозможно. .
Для SWF-файлов, работающих локально, вызовы этих API-интерфейсов будут успешными только в том случае, если SWF-файл и содержащая его веб-страница (если она есть) находятся в изолированной программной среде безопасности с локальным доверием. Вызовы этих методов завершатся ошибкой, если содержимое находится в изолированной программной среде «локально-с-сетью» или «локально-с-файловой системой».
Затем эта страница в локальных песочницах говорит, что не будет работать, если swf не находится в «локальной доверенной песочнице», в которую пользователь или установщик должен поместить его.
Этот блог сообщение о «песочнице с локальной файловой системой» гласит:
Во-первых, я думаю, что документация здесь слишком щедра. SWF-файлы, загружаемые из локальной файловой системы, сталкиваются с некоторыми ограничениями. Вероятно, наиболее актуальными ограничениями являются:
- SWF не может вызывать JavaScript (или vbscript) ни через URL, ни через ExternalInterface.
- SWF не может вызывать запросы HTTP или HTTPS.
- Параметры строки запроса (например, Blah.php?querystring=qs-value) удаляются и не передаются (даже для запросов к локальным файлам)
Существует документ "Управление доступом к сценариям на главной веб-странице", в котором описывается различные способы и ограничения, позволяющие Flash-содержимому взаимодействовать с Javascript.
Согласно документу, если ваш тег для встраивания содержит параметр AllowScriptAccess, для которого установлено значение «всегда», все должно быть в порядке, независимо от того, откуда загружается страница.
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.