我的 Facebook 应用程序是一个 Flash 游戏。我希望游戏 swf 在窗口卸载时将其最新状态保存到服务器。由于我使用 swfobject 嵌入了 swf,因此我使用它的 embed 处理程序将onbeforeunload
侦听器添加到窗口:
function embedHandler(event)
{
shell=event.ref;
window.onbeforeunload=function(event)
{
shell.message("save", null);
//delay the unloading a bit so flash has time to contact server
var now = new Date().getTime();
var later=now+50;
while (now < later)
{
now = new Date().getTime();
}
}
}
这就是问题所在。每次直接从应用程序(rails 应用程序)加载 swf 时,这都会起作用。从亚马逊加载 swf 时,它永远不会工作。
所有跨域问题都在 swf 和应用程序之间解决——rails 应用程序接受来自 Amazon swf 的调用,而 Amazon swf 从 rails 应用程序加载数据。
ExternalInterface
也适用于拨出和拨入电话。但我怀疑这仍然是一个浏览器安全问题,因为内向ExternalInterface
调用仅在以下情况下失败:
- 它是从处理程序内部调用
window.onbeforeunload
的 - swf 来自亚马逊。
问题是什么?当游戏来自 CDN 并且保存由onbeforeunload
Javascript 触发时,如何不显眼地保存游戏状态?还是有更好的方法来完成同样的事情?
在 Firefox 中进行测试。