我正在制作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);
}
它没有显示任何错误,但它既不起作用......
有人用这样的东西工作吗?
有人可以帮助我,我在这里做错了吗...
谢谢!
答案 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);
}