0

ローカル共有オブジェクトを使用してユーザーを追跡することを目的としたプロジェクトに取り組んでいます。ユーザーは最初にページ A にアクセスします。このページには、ローカル共有オブジェクトを植える .swf が埋め込まれています。自分のフラッシュ Cookie をテストして、動作することを確認しました。

ページ B にアクセスすると、埋め込まれた別の .swf が Flash Cookie の取得を試み、Cookie が存在する場合は AJAX 関数を呼び出します。ページBは私が問題を抱えているものです。この Web ページには、AJAX 関数とともに .swf オブジェクトが埋め込まれています。次のコードは、ページ B の HTML です。これには、埋め込まれた .swf とともに AJAX スクリプトが含まれています。

<!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 スクリプトがデバッグされます。Flex 4 で FlashDevelop を使用しています。これらは非常に単純なスクリプトなので、他に問題があるとは考えられません。何か案は??

4

1 に答える 1

3

スクリプトのアクセス設定かもしれません。埋め込みで、パラメーター 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

于 2013-09-27T16:50:51.563 に答える