Flash AS2.0 и JavaScript / jQuery (ExternalInterface) Связь - PullRequest
4 голосов
/ 07 января 2010

Я пытаюсь использовать JS для отправки данных на музыкальный проигрыватель Flash AS2.0 с ExternalInterface, за исключением того, что я не могу найти хороших руководств или руководств по ExternalInterface.Я хочу иметь возможность изменить текущую песню в проигрывателе, щелкнув ссылку JavaScript, и при загрузке страницы / окна без щелчка воспроизвести песню по умолчанию.

Мне не нужен очень сложный ответ о загрузке звуков во флэш-памяти и т. Д., У меня просто много трудностей с тем, чтобы JS отправлял что-нибудь во Flash, и когда я получу это на работу - мне нужноположить некоторые if / else во флэш-память, чтобы определить, была ли нажата ссылка или нет?

Спасибо

редактировать здесь код на данный момент:

AS 2.0

import flash.external.ExternalInterface;

ExternalInterface.addCallback('loadSong', null, flashFunction);

function flashFunction (val) {
    extra = val;
}

JavaScript

var flashObj = document.getElementById('VSPLAYER');

function loadSong(val) {
    return val
}

HTML

<a href="javascript:loadSong('2')">Play song 2</a>

<object id="VSPLAYER" type="application/x-shockwave-flash" data="vs_player.swf" width="280" height="90">
<param name="movie" value="vs_player.swf" />
<param name="allowscriptaccess" value="always" />
</object>

Ответы [ 2 ]

9 голосов
/ 07 января 2010

В вашей Flash, желательно в первом кадре, поместите это:

ExternalInterface.addCallback('callFlashFunction', null, yourFlashFunction);

function yourFlashFunction (arg1, arg2) { ... }

В вашем Javascript вы можете позвонить через:

var flashObj = document.getElementById ('FlashObjID');
flashObj.callFlashFunction (arg1, arg2);

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

<object id="FlashObjID"> ... <param name="allowscriptaccess" value="always" /> ... </object>

Обновление (на основе вашего HTML):

<a href="#" onclick="return jsLoadSong('2')">Play song 2</a>

<object id="VSPLAYER" type="application/x-shockwave-flash" data="vs_player.swf" width="280" height="90">
    <param name="movie" value="vs_player.swf" />
    <param name="allowscriptaccess" value="always" />
</object>

<script type="text/javascript">
    var flashObj = document.getElementById ('VSPLAYER');
    function jsLoadSong (val)
    {
        flashObj.loadSong (val);
        return false; // to prevent default link action
    }
</script>

Я попытался уточнить имена для отображения, которые есть в Javascript, а какие связаны с Flash. Также обратите внимание, что вам нужно подождать, пока DOM загрузится, прежде чем вызывать определение flashObj. здесь тег <script> находится после <object>, поэтому он будет работать нормально.

1 голос
/ 22 марта 2012

Спасибо за сообщения, но да, этот вызов javascript для меня тоже недопустим.После ОЧЕНЬ большого количества шуток, наконец, он начал работать с:

$(this)[0].loadSong();  

(используя jQuery, где flashObj уже был выбран)

Надеюсь, это кому-нибудь поможет.Убедитесь, что вам нужно [0], если вы не используете jQuery.

Прочтите где-нибудь еще, что фактический объект HTML DOM выбран в первом слоте массива селектора.Извините, мои объяснения немного дурацкие, просто надеюсь, что это поможет вам сработать.

...