【问题标题】:ActionScript3 (AS3) External Interface call to javascript/jquery function not workingActionScript3 (AS3) 对 javascript/jquery 函数的外部接口调用不起作用
【发布时间】:2013-09-27 16:08:30
【问题描述】:

我正在从事一个旨在跟踪使用本地共享对象的用户的项目。用户首先访问页面 A,该页面有一个嵌入的 .swf,该 .swf 植入了一个本地共享对象。我知道它可以通过我自己的 flash cookie 进行测试来工作。

访问页面 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);
    } 

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

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 一起使用。这些都是非常简单的脚本,所以我想不出还有什么可能出错的地方。有什么想法吗??

【问题讨论】:

    标签: javascript jquery actionscript-3 flash externalinterface


    【解决方案1】:

    可能是脚本访问设置。在嵌入时,尝试包含参数 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

    【讨论】:

    • 感谢您的回答!不幸的是,它仍然无法正常工作。我使用了你的两个建议。
    • 无赖。尝试添加警报('我的功能有效!');作为 databaseAndemail() 中的第一件事。如果您收到一个弹出窗口,您就知道该呼叫正在工作,并且是其他原因造成了您的麻烦。
    • 已修复! :) 我尝试使用 swfObject 动态发布而不是静态发布,并且由于某种原因它起作用了。所以你是对的:这是嵌入的问题。我没有更改代码中的其他任何内容。将您的答案标记为已接受!
    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 2012-04-13
    • 1970-01-01
    • 2011-04-04
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    相关资源
    最近更新 更多