один знакомый задал мне вопрос, на который я не могу быстро ответить,
поэтому пощу его сюда: здесь наверняка найдутся люди, уже знающие
ответ. Цитирую вопрос:
"Привет, Ростислав,
Не мог бы ты мне подсказать, возможно ли в ActionScript проводить
модицикацию байт-кода во время выполнения?
Насколько я понимаю, я могу в своем flash-ролике загрузить часть часть
кода по HTTP (например это делает плеер JWPlayer для проигрывания
Youtube Video). Могу ли я модифицировать байт-код этой загруженной
части?
Конкретно -- мне нужно подправить один параметр в HTTP-запросе, который
делается из этого загруженного кода.
Нужно сделать flash видео-плеер, который будет использовать Youtube
Flash API (это делает OpenSource JWPlayer), но при этом в рантайме
будет модифицировать код Youtube API, немного изменяя URL, по каком
обращается последний в процессе своей работы.
Например, подключив Youtube Flash API, мы вызываем его метод получения
реального адреса видео (конечного flv файла). Этот метод отправляет на
Youtube API HTTP запрос, содержащий адрес страницы, содержащей плеер,
что-то вроде http://www.youtube.com/get_video_info?v=7641sdak9&eurl=http://www.microsoft.com/hello.html
Так вот, наша задача -- убрать адрес этой страницы или заменить его
другим значением. Например, чтобы запрос был таким:
http://www.youtube.com/get_video_info?v=7641sdak9&eurl=null
Вопрос скорее сводится к тому, позволит ли Security Manager FlashVM
модифицировать в рантайме код, загруженный с другого домена.
"
Вот такая задача. Что скажете?
Рост
Вопрос скорее сводится к тому, позволит ли Security Manager FlashVM
модифицировать в рантайме код, загруженный с другого домена.
Насчёт "основного" вопроса не знаю, а вот по поводу модификации URL,
можно использовать AS2 версию Chromeless Player и пропатчить её.
Я когда-то делал такое, надо заменять методы в прототипах:
var func:Function = NetStream.prototype.play;
NetStream.prototype.play = function(){
// заменяем всё что надо в аргументах
var original = arguments.callee.original;
original.apply(this, arguments);
}
NetStream.prototype.play.original = func;
На счёт правильности кода не уверен, но идею, думаю, отражает. :)
В итоге, когда плеер ютуба обратиться к флеш АПИ, сам выполнит
подменённую функцию.
> Так вот, наша задача -- убрать адрес этой страницы или заменить его
> другим значением. Например, чтобы запрос был таким:
> http://www.youtube.com/get_video_info?v=7641sdak9&eurl=null
--
Oleg Galaburda
http://blog.actualwave.com/
Лично я не понимаю почему нельзя взять классы JWPlayer и в нем поменять код как надо?
Оффтопчик - для тех кто не знает, уже есть AS3 версия Ютуб плеера,
поэтому врапперы больше не нужны.
http://apiblog.youtube.com/2009/10/actionscript-3-youtube-chromeless.html
> а у ютуба плеер на AS2
--
Oleg Galaburda
http://blog.actualwave.com/