Не удается заставить ExternalInterface во флэш-памяти работать

очень новенький для прошивки. Я использую музыкальный проигрыватель XSPF (тонкую версию можно найти здесь (http://musicplayer.sourceforge.net/), написано на AS2) для воспроизведения списка mp3 на веб-сайте. Мне нужно вызывать javascript каждый раз, когда он загружает трек. Я пытаюсь сделать это через ExternalInterface, но пока безуспешно. Вот моя установка: я пишу сайт на Linux-машине, на которой также находится тестовый сервер, но редактирую флеш-память в Windows. Тестирую сайт на том же linux-боксе с firefox 3.0.10. HTML и ActionScript размещены здесь (http://pastebin.com/f36b1da0e). Кто-нибудь видит что-то не так с моим кодом? Есть идеи, почему это не работает? Я чувствую, что это что-то в моей базовой настройке ...

Спасибо, Дэн


person danwoods    schedule 14.05.2009    source источник


Ответы (1)


Я быстро просмотрел ваш код, и он кажется нормальным (в любом случае, ActionScript). Я бы посоветовал попробовать разные методы встраивания SWF. Много лет назад (поэтому я не могу вспомнить все подробности), но я тестировал внешний интерфейс в разных браузерах, и иногда он работал в IE, но не в firefox, и если бы я попробовал другой метод встраивания swf, он работал бы в firefox, но не IE или просто IE 6, а не 7!

Это очень раздражало. В любом случае, единственный метод, который я обнаружил, который работал в обоих основных браузерах в то время (хром был отключен), заключался в использовании HTML, который создается из flexbuilder при публикации приложения. Мне, конечно, пришлось немного его изменить (потому что мы используем cocoon & xsl's), но это сработало.

(с тех пор я думаю, что swfobject был улучшен, я мог бы попробовать и это, если бы был ты)

Я разместил HTML-шаблон от flexbuilder на http://pastebin.com/f79b5b3f3. Для этого потребуются AC_OETags .js файл (http://pastebin.com/f3937a336) и playerProductInstall.swf (вам может потребоваться загрузите flexbuilder, чтобы получить это).


код для комментария ниже

<mx:HTTPService id="mySerivceCall" 
    url="{'myPHPFile.php'}"
    result="resultHandler(event)" 
    fault="faulthandler(event)"
    showBusyCursor="false" 
    resultFormat="e4x"> 
    <mx:request>
        <time>{new Date().getTime()}</time>
    </mx:request>
</mx:HTTPService>

Я всегда добавляю время в httpservice, следя за тем, чтобы оно не кешировалось (что у IE очень плохо получается). Просто вставьте любые другие параметры в раздел запроса, и формат результата просто сообщает flex, что результат - это XML, отформатированный в e4x, что упрощает обработку XML.

person kenneth    schedule 15.05.2009
comment
забыл сказать, что вы всегда можете использовать getURL (это использовалось до externalInterface, в AS2 я бы использовал getURL, затем, когда я перешел на AS3, я использовал externalInterface). что-то вроде getURL {Javascript: alert ('привет, мир')}; Будьте осторожны, если вы вызываете 2 getURL в одном кадре, тогда фактически будет вызван только последний. - person kenneth; 15.05.2009
comment
Могу ли я использовать getURL для вызова и передачи переменных в функцию php? Я использую ExternalInterface для вызова javascript для редактирования файла xml каждый раз, когда воспроизводится песня, так что, возможно, в любом случае лучше пройти через php. Кроме того, мне кажется, что getURL устарел и может в конечном итоге обесцениться; вот почему я до сих пор держался от этого подальше ... - person danwoods; 18.05.2009
comment
пока вы используете AS2, я не вижу причин не использовать getURL. Если вы хотите вызвать файл php (если вы можете использовать flex), вам следует попробовать вызов httpservice (я вставил код выше в ответ). передача переменных с помощью getURL должна быть примерно такой: getURL (myFuncInJavascript (+ param1 +, + param2 +)); - person kenneth; 18.05.2009
comment
хм, так давно я не смотрел на AS2, я думаю, что e4x может быть функцией AS3? - person kenneth; 18.05.2009
comment
Спасибо, Кеннет, я начинаю думать, что мне нужно просто выбросить mp3-плеер, который я использую, и найти тот, который написан на as3. Похоже, это поможет избавиться от многих головных болей ... - person danwoods; 18.05.2009
comment
Что ж, я использую AS3 уже много лет, и он намного лучше, чем AS2. Вы, вероятно, могли бы написать свою собственную через несколько дней (как только вы освоите AS3 и в зависимости от того, сколько функциональных возможностей вы ему дадите), если вы уже знаете свой путь в AS2. - person kenneth; 19.05.2009