Предотвращение вызова swf вызовами ExternalInterface без его перекомпиляции - PullRequest
0 голосов
/ 16 апреля 2011

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

Я почти уверен, что это невозможно, но я надеюсь, что кто-то здесь может доказать обратное.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2011

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

Ошибка безопасности должна указывать на то, что она пыталась вызвать.Все, что вам нужно сделать в HTML, заключающем в себя SWF, - это предоставить методы, которые SWF пытается вызвать.

Таким образом, SWF может иметь ExternalInterface.call("js_function");, и поэтому в вашей оболочке

<script>
function js_function() { // do nothing }
</script>
0 голосов
/ 16 апреля 2011

Хаки, как черт, но вы могли бы в своем родительском приложении отредактировать .prototype класса ExternalInterface, чтобы заменить «вызов» на функцию по вашему выбору.Я не проверял это, это всего лишь теория, но это выглядело бы примерно так:

    // in your main application's wrapper, before you load in the .swf you're working with

    ExternalInterface.prototype.call = function(value:String):void { 
trace("You just tried to call a js function called '" + value + "', but I intercepted it."); 
}
0 голосов
/ 16 апреля 2011

Я не думаю, что это возможно (или, по крайней мере, это не тривиально). Однажды я делал нечто подобное (просто удалив пару вызовов) в проекте AS 2.0, используя FLASM , ассемблер / дизассемблер ActionScript. Но этот инструмент работает только для AS 2.0, и я не знаю другого подобного инструмента для AS 3.0 (хотя некоторые могут существовать).

Однако, возможно, вы могли бы настроить локальный веб-сервер, который достаточно прост (WAMP, XAMP и т. Д. Для Windows) и запустить ваш html как http://localhost/myApp/index.html вместо того, чтобы запускать его прямо из файловой системы. Это может быть простой обходной путь в данных обстоятельствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...