Управление Flash плеером из JavaScript снаружи? - PullRequest
1 голос
/ 18 сентября 2011

Я делаю флеш-плеер, который предполагается управлять извне, из JavaScript.

Мне нужны эти методы: Воспроизведение / Пауза и Уровень громкости

Я застрял с уровнем громкости ... Я пытался добавить этот код:

flashMovie.volume = 10;

Где flashMovie - это экземпляр flash ... И это показывает НЕТ ОШИБКИ , но НЕ РАБОТАЕТ

Я пытаюсь сделать внутренний AddCall (); и затем, когда он вызывается для вызова () из JavaScript, чтобы вернуть уровень звука.

AS 3:

function setthisvolume()
{
        var vlm = ExternalInterface.call('giveMeVolume()');
        this.soundTransform.volume = vlm;
}

ExternalInterface.addCallback("setthisvolume", setthisvolume);

JS:

var soundlevel = 10;

function soundlevelset()
{
    var flashMovie=getFlashMovieObject("objswf");
    flashMovie.setthisvolume();

}

function giveMeVolume()
{
    return parseInt(soundlevel);
}

Но я получаю эту ошибку:

Ошибка вызова метода в NPObject!

Я даже пытался с setInterval ():

AS 3:

function setthisvolume()
{
        var vlm = ExternalInterface.call('giveMeVolume()');
        this.soundTransform.volume = vlm;
}

setInterval(setthisvolume, 1000);

JS:

var soundlevel = 10;

function giveMeVolume()
{
    return parseInt(soundlevel);
}

И это не показывает никакой ошибки, но это не работает ни ...

Кто-то работал с такими вещами?

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

Спасибо!

Ответы [ 3 ]

2 голосов
/ 18 сентября 2011

Спасибо, @ someone!Этот второй вариант работал нормально!

Вот рабочий код:

AS3:

function setthisvolume(vlm)
{
        this.soundTransform = new SoundTransform(vlm);
}

ExternalInterface.addCallback("setthisvolume", setthisvolume);

JS:

function getFlashMovieObject(movieName)
{
  if (window.document[movieName]) 
  {
      return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName]; 
  }
  else
  {
    return document.getElementById(movieName);
  }
}

var soundlevel = 0.5;                  // it's 0-1 volume, not 0-100
function soundlevelset()
{
    var flashMovie=getFlashMovieObject("objswf");
    flashMovie.setthisvolume(parseFloat(soundlevel));
}

Когда вы используете слайдеркаждый раз при смене слайдера нужно менять переменную soundlevel и вызывать soundlevelset ();

Надеюсь, я помогал следующему, который начинает с этого ...:)

Спасибо!

1 голос
/ 18 сентября 2011

Попробуйте удалить скобки при вызове giveMeVolume, изменив это:

var vlm = ExternalInterface.call('giveMeVolume()');

на следующее:

var vlm = ExternalInterface.call('giveMeVolume');

Если это не сработает, попробуйте передать том непосредственно какаргумент / параметр, подобный этому (это, вероятно, лучший способ сделать это):

AS3:

function setthisvolume(vlm)
{
        this.soundTransform.volume = vlm;
}
ExternalInterface.addCallback("setthisvolume", setthisvolume);

JS:

var soundlevel = 10;
function soundlevelset()
{
    var flashMovie=getFlashMovieObject("objswf");
    flashMovie.setthisvolume(soundlevel);
}
1 голос
/ 18 сентября 2011

Код выглядит разумно.

Проверьте, разрешено ли Flash взаимодействовать со сценарием. При создании объекта Flash существует свойство - AllowsScriptAccess - http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7c9b.html.

Проверьте, приходит ли Falsh из того же домена, что и HTML-страница.

Для addCallback проверьте, правильно ли вы получаете объект Flash по идентификатору (способ создания Flash отличается в IE / FF, поэтому вы можете получить неправильный).

Проверьте правильность SWF-файла - браузер может кэшировать старую версию ... Т.е. Добавьте элемент управления Flash, который просто показывает статический номер и убедитесь, что он соответствует последнему.

...