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.