ActionScript3 (AS3) Вызов внешнего интерфейса для функции javascript/jquery не работает

Я работаю над проектом, который предназначен для отслеживания пользователей с использованием локальных общих объектов. Пользователь сначала посещает страницу A, на которой есть встроенный файл.swf, который устанавливает локальный общий объект. Я знаю, что это работает, проверяя мои собственные флеш-куки.

После посещения страницы B другой встроенный файл.swf попытается извлечь файл cookie Flash и вызвать функцию AJAX, если файл cookie присутствует. Страница B - это то, с чем у меня проблемы. На этой веб-странице встроен объект.swf, а также функция AJAX. Следующий код является HTML-кодом для страницы B. Он включает в себя сценарий 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, потому что я знаю, что это работает. Проблема может заключаться в скрипте.swf, который предназначен для проверки LSO. Это скрипт AS3 под названием CheckLSO.swf:

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, который устанавливает куки для вашей информации (опять же, я проверил этот, и он работает):

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 ответ

Решение

Может быть, настройка доступа к сценарию. На встраивании попробуйте включить параметр позволяет criptaccess: "всегда". Вызовы внешнего интерфейса потерпят неудачу без этого.

<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

Другие вопросы по тегам