我正在研究测验系统。通常它会在每个问题中使用jpeg图像。但是,一些测验改为使用动画.SWF文件。一旦用户点击了答案,我想使用jquery swfobject来调用play()方法。
我的解决方案在本地工作正常,但是当我尝试在线运行时,它会抛出“NPObject上的错误调用方法!”消息。
测验HTML位于www.somedomain.com上,SWF位于images.somedomain.com上。所以,我猜这是一个跨领域的事情。
麻烦的是,我对Flash一无所知......如何编辑SWF文件,任何有关Flash属性的内容等。
以下是我的代码示例:
<div class="photos">
<object data="http://images.somedomain.com/q1tattooquiz.swf" type="application/x-shockwave-flash" width="600" height="350">
<param name="movie" value="http://images.somedomain.com/q1tattooquiz.swf">
<param name="wmode" value="opaque">
</object>
</div>
和javascript:
if (hasFlash) {
$('#question'+quesNum+' .photos').flash(function() { this.Play(); } );
}
这很简单,正如我所说,它在我的电脑上运行良好。但一旦上传,就会出错。
我可以添加哪些内容以使这些文件正常工作?
答案 0 :(得分:4)
Kirkman14,
除了allowScriptAccess之外,确保使用正确数量的参数调用函数,匹配AS声明。如果您的AS声明:
function playSound(event:MouseEvent):void{
// code here
}
然后确保相应地使用该函数playSound(null)
。
我自己也经历过这个。
答案 1 :(得分:2)
我认为没有办法避免改变SWF。你需要把这一行放在Flash中:flash.System.Security.allowDomain('*');
这只需要你尝试从JS调用SWF中的函数。对于相反的方向,还要在嵌入代码中将 allowScriptAccess 设置为始终。请注意,如果我没记错的话,这个参数可能区分大小写。
答案 2 :(得分:1)
您可以尝试将allowscriptaccess设置为“always”。 allowscriptaccess与示例代码中的wmode类似。
答案 3 :(得分:0)
有人建议我创建一个将Flash与之通信的域列入白名单的crossdomain.xml文件。虽然我没有取得任何成功(但也许我的问题与你的不同)。
答案 4 :(得分:0)
对我来说,出现这个问题的原因是,在Flex中,我将静态设置为一个带有ExternalInterface调用的函数。如果问题函数是静态的,请尝试撤消它。