我正在开发一个旨在使用本地共享对象跟踪用户的项目。用户首先访问页面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一起使用。这些都是非常简单的脚本,因此我无法想到任何其他可能出错的内容。任何想法??
答案 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。