ActionScript3(AS3)外部接口调用javascript / jquery函数无法正常工作

时间:2013-09-27 16:08:30

标签: javascript jquery actionscript-3 flash externalinterface

我正在开发一个旨在使用本地共享对象跟踪用户的项目。用户首先访问页面A,其具有嵌入的.swf,其植入本地共享对象。我知道它可以通过测试我自己的flash cookies来实现。

在访问页面B时,另一个嵌入式.swf将尝试检索Flash cookie并在cookie存在时调用AJAX函数。 B页是我遇到的麻烦。在这个网页上嵌入了一个.swf对象,以及一个AJAX函数。以下代码是页面B的HTML。它包含AJAX脚本以及嵌入的.swf。

<!DOCTYPE html>
<html lang="en">
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script type="text/javascript">
            function databaseAndemail(){
            $.get('http://www.mywebsite.com/databaseAndemail.php');
            }
        </script>   
    </head>
    <body>
            <object width="1" height="1">
                <param name="CheckLSO" value="http://www.mywebsite.com/CheckLSO.swf">
                <embed src="http://www.mywebsite.com/CheckLSO.swf" width="1" height="1">
                </embed>
            </object>
    </body>

问题不在于AJAX函数,也不在于PHP脚本,因为我知道它有效。问题可能出在用于检查LSO的.swf脚本中。这是名为CheckLSO.swf的AS3脚本:

public function Main():void 
    {
        //Check for a LSO
        var myLocalData:SharedObject = SharedObject.getLocal("myData");
        if (myLocalData.data.uname != null){ //LSO exists, so call AJAX function to update database and send email.
                if (ExternalInterface.available){
                    ExternalInterface.call("databaseAndemail");
                }               
            };

        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    } 

我将包含AS3脚本,在此处设置cookie以供您参考(同样,我已经测试了这个并且它有效):

public function Main():void 
    {
            // Create a new SharedObject
        var myLocalData:SharedObject = SharedObject.getLocal("myData");
        // Save data to the SharedObject
        myLocalData.data.uname = "ERE";
        myLocalData.flush();
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

总结一下,我认为由于某种原因,外部接口不会调用Javascript函数。我知道cookie已设置,我知道AJAX有效,而且我知道PHP脚本有效(我没有包含PHP,看起来它不在本问题的范围内)。两个.swf脚本都经过调试。我将FlashDevelop与Flex 4一起使用。这些都是非常简单的脚本,因此我无法想到任何其他可能出错的内容。任何想法??

1 个答案:

答案 0 :(得分:3)

可能是脚本访问设置。在嵌入上,尝试包括param allowscriptaccess:“always”。没有它,外部接口调用将失败。

<object width="1" height="1">
    <param name="CheckLSO" value="http://www.mywebsite.com/CheckLSO.swf">
    <param name="allowscriptaccess" value="always">
    <embed src="http://www.mywebsite.com/CheckLSO.swf" width="1" height="1"></embed>
</object>

更好的是,使用swfObject 2嵌入你的swf。

SwfObject