“错误调用NPObject上的方法!”用于flex深度链接

时间:2011-04-08 22:21:48

标签: javascript flash flex4

我在域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

到底发生了什么事?

2 个答案:

答案 0 :(得分:1)

我不确定这是否相关,但我总是使用ExtJS来获取此错误,问题实际上是一个简单的语法错误,(缺少括号))

答案 1 :(得分:0)

您是否尝试过 allowScriptAccess ? (如果我没记错的话,这可能是区分大小写的)

如果这不起作用,则有助于查看更多代码或示例页面。