【问题标题】:Flash player control from javascript outside?从外部的 javascript 控制 Flash 播放器?
【发布时间】:2011-11-19 11:15:20
【问题描述】:

我正在制作可以从外部通过 javascript 控制的 Flash 播放器。

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

我卡在音量级别...我尝试添加此代码:

flashMovie.volume = 10;

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

我尝试制作内部 AddCall();然后从 javascript 调用 call() 以返回声级。

作为 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():

作为 3:

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

setInterval(setthisvolume, 1000);

JS:

var soundlevel = 10;

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

它没有显示任何错误,但它也不起作用......

有人用过这样的东西吗?

有人可以帮我解决我在这里做错了什么...

谢谢!

【问题讨论】:

  • 我的答案是正确的代码... ;)

标签: javascript flash actionscript-3 embed


【解决方案1】:

谢谢你,@某人! 第二个选项没问题!

这是工作代码:

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));
}

当您使用滑块时,每次滑块更改时都需要更改声级变量并调用 soundlevelset();

希望我能帮助下一个从这个开始的人...... :)

谢谢!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      代码看起来很合理。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-26
        • 1970-01-01
        相关资源
        最近更新 更多