我有一个flex应用程序托管在域A上,并通过域B上的网页提供服务。我已启用跨域脚本编写;在域B的网页,我也行“调用NPObject上的方法时出错!”用于flex深度链接
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参数(通过键入内容或通过向后导航使用后退按钮)导致javascript错误在第行435处抛出,又名
getPlayer().browserURLChange(flexAppUrl);
好像有某种跨域安全问题的,即使我把行flash.system.Security.allowDomain("*");
。通过比较具有相同html和swf文件的两个页面,您可以看到同域与跨域存在不同的行为:在一种情况下是跨域而在另一种情况下是同域:
跨域:http://keonehon.com/gongos/dreamcar.html。 same-domain:http://rails.mit.edu/gongos/dreamcar.html
这是怎么回事?