从javascript外面的Flash播放器控件?

时间:2011-09-17 22:19:54

标签: javascript flash actionscript-3 embed

我正在制作Flash播放器,假设是从外部控制,从javascript。

我需要那些方法: 播放/暂停和音量

我陷入了音量级别......我尝试添加此代码:

flashMovie.volume = 10;

其中flashMovie是flash实例...而且它显示 NO ERROR 但它不工作

我尝试制作内在的AddCall();然后当它从javascript调用call()来返回声级时。

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 个答案:

答案 0 :(得分:2)

谢谢@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 :(得分:1)

代码看起来很合理。

检查是否允许Flash与脚本通信创建Flash对象时有属性 - 允许脚本访问 - http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7c9b.html

检查Falsh是否来自与HTML页面相同的域。

对于addCallback检查你是否通过Id获得正确的Flash对象(在IE / FF中创建Flash的方式不同,所以你可能会得到错误的。)

检查您是否有正确的SWF文件 - 浏览器可能会缓存旧版本... I.e。在Flash控件上添加元素,只显示静态编号,并确保它与最新编号匹配。

答案 2 :(得分:1)

在调用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);
}