如何克服“NPObject上的错误调用方法”和Play()SWF?

时间:2011-04-09 20:33:46

标签: javascript jquery flash swfobject

我正在研究测验系统。通常它会在每个问题中使用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(); } );
    }

这很简单,正如我所说,它在我的电脑上运行良好。但一旦上传,就会出错。

我可以添加哪些内容以使这些文件正常工作?

5 个答案:

答案 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调用的函数。如果问题函数是静态的,请尝试撤消它。