我在域A上托管了一个灵活应用,并通过域B的网页提供服务。我启用了跨域脚本编写;在域B的网页中,我有一行
params.allowscriptaccess = "always";
并在我的应用程序代码中
flash.system.Security.allowDomain("*");
并且好的措施,
flash.system.Security.allowDomain("keonehon.com"); // domain A
ExternalInterface
电话似乎有效;在启动时,应用程序调用javascript函数,并且网页调用函数返回以传递参数。
if (ExternalInterface.available){
ExternalInterface.call("SWFLoadComplete");
//lblMessage.text = "Data Sent!";
}
function SWFLoadComplete(){
callNewCarWithUser();
}
function callNewCarWithUser()
{
var user_id = document.getElementById('txtUserId').value;
var room_id = document.getElementById('txtRoomId').value;
getTheFlexApp().newCarWithUser(user_id, room_id);
}
这是正常的。是的。似乎工作正常,不是吗?
但是,深度链接无法正常工作,因为在URL中设置#state=____
flex参数(通过输入内容或通过使用后退按钮向后导航)会导致在第435行引发javascript错误history.js
,又名
getPlayer().browserURLChange(flexAppUrl);
似乎存在某种跨域安全问题,即使我放入了行flash.system.Security.allowDomain("*");
。通过比较具有相同html和swf文件的两个页面,只有一个案例中的跨域和另一个案例中的相同域,您可以看到在同域与跨域共存时存在不同的行为:
跨域:http://keonehon.com/gongos/dreamcar.html。 同域:http://rails.mit.edu/gongos/dreamcar.html
到底发生了什么事?
答案 0 :(得分:1)
我不确定这是否相关,但我总是使用ExtJS来获取此错误,问题实际上是一个简单的语法错误,(缺少括号))
答案 1 :(得分:0)
您是否尝试过 allowScriptAccess ? (如果我没记错的话,这可能是区分大小写的)
如果这不起作用,则有助于查看更多代码或示例页面。