Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   flash+js и (+Cookies) (http://www.flasher.ru/forum/showthread.php?t=145952)

Prior 24.10.2010 15:45

flash+js и (+Cookies)
 
доброе время суток
делаю для одного сайта плеера где
при включении одного из них выключался играющий перед ним
решил это делать используя джаву и куки
сделал тестовую хтмл страничку
там 4 плеера к которым прикручено по 2 параметра айди и адрес песни которую он проигрывает

связал эту флешку с js файлом players.js
который берет айди флешки и сохраняет ее в куки
при следующем нажатии на кнопку флешки "плей"
он берет из кукисов айди предидущего плеера и должен отослать на него меседж
который остоновил бы игру

но какраз на этом этапе у меня и стопор
ибо почему меседж не доходит

для тестинга я сделал не чтоб остановил игру а только чтоб в динамичном текстовом поле флешки выводило слово "СТОП"
но оно не работает

подскажите почему


исходники фла
js файл
хтмл страничка

rainbowrussia 24.10.2010 22:57

Для взаимодействия нескольких флешек на странице используйте LocalConnection

mooncar 24.10.2010 23:48

.. или используйте ExternalIntreface.

Prior 25.10.2010 18:50

а как через ExternalIntreface вызвать функцию без внутрених параметров
потому что судя по всех примерах что я нашол это для того чтоб передавать текст
а мне в конечном варианте надо только запустить функцию
например "стоп"

точнее меня интересует как принять сигнал флешкой

mooncar 25.10.2010 19:43

Ну и что, что в примере передается текст. Вы не передавайте ничего и все. :)
Просто спользуйте метод ExternalIntreface.addCallback для вызова какой-то функции внутри флешки.

Пропишите во флеше какую-нибудь функцию как вызываемую, типа
Код AS1/AS2:

function stopIt()
{
  stop();
}

И укажите ее как вызываемую в ExternalIntreface.addCallback

После этого выберите некое имя метода для вызова JS и тоже пропишите в ExternalIntreface.addCallback.
Потом это имя и используйте снаружи, при выполнении JS.

Если наоборот, из флешки нужно обратиться к странице, используйте ExternalIntreface.call.

Я бы сделал так. Написал бы на JS функцию которая получает параметром номер из плеера, делает его текущим на странице. При этом по предыдущему текущему номеру останавливает предыдущий плеер.

Prior 25.10.2010 19:55

я так и сделал
но почемуто оно неработает
можете взглянуть на исходники или на весь комплекс файлов
фла
хтмл
джава файлик

mooncar 25.10.2010 20:07

Честно говоря, лопатить весь код не хочется. К тому же у меня ваш fla не открывается из-за версии.

Куки там вообще не нужны, если речь идет об одной странице. Все переменные JS можно сохранять прямо на открытой странице.

Попробуйте для начала воспроизвести тестовый пример по ExternalIntreface.addCallback из хелпа.
То есть, нарисуйте на странице кнопочку, добейтесь того, чтобы по нажатию на нее с флешкой что-то происходило.
Затем двигайтесь дальше.

Prior 25.10.2010 22:01

сделал текстовое поле и все как в примере
понаставлял кучу алертов в джаве чтоб проверить на каком шаге проблема
и после тестинга мне ответ на обьект с флешкой у которой идентификатор "плей4"
отвечает [object HTMLObjectElement]
я так понял оно нашло обьект
или не нашло )
потому что следующий алерт который должен был ити после того как отошлеться меседж незапускаеться
и значит этот этап неидет

плз помогите .....

mooncar 25.10.2010 22:11

[object HTMLObjectElement] - значит JS "нашло" объект!

Все верно. Этот объект и есть сама флешка.

Теперь у этого объекта должен быть вызван метод, который определен в AS вот тут
Код:

addCallback(methodName:String, instance:Object, method:Function)
как methodName.
В JS есть нужно обращаться, например, так:

Код:

var flashPlayer = document.getElementById("player");
flashPlayer.testJS();

....для примера ниже:

Код AS1/AS2:

import flash.external.*;
ExternalInterface.addCallback('testJS', null, testAS);
 
function testAS()
{
    myText.text = 'Сработало!';
}

Дальше алерты не помогут, поскольку теперь проверяем уже флешку. Запишите в AS-функции method какое-нибудь простое действие, которое во флешке сразу совершится - переход в другой кадр или что-то такое (в моем примерчике это testAS).
Или полезным будет включите консоль ошибок в браузере (Обычно в меню "Инструменты" - "Дополнительно" (Опера, FF)). Если JS не сможет достучаться до methodName во флешке, то в консоли появится что-то вроде
"нет такого метода у объекта "плей4" или как он у вас н-ся..

Prior 26.10.2010 18:38

мне выводит что movie.textswf is not a function

хотя в .js такой код
Код:

function textToswf() {
        var value = document.getElementById('playerid').value
        var movie = getMovie('play1');
      // alert(movie);
        movie.textswf();
        alert('1111');
}


function getMovie(movieName) {
        var M$ =  navigator.appName.indexOf("Microsoft")!=-1
        return (M$ ? window : document)[movieName]
}



Часовой пояс GMT +4, время: 08:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.