Javascript 外部接口

Javascript 外部接口,javascript,flash,actionscript-3,swfobject,externalinterface,Javascript,Flash,Actionscript 3,Swfobject,Externalinterface,嘿,所以我很难让外部接口正常工作,这很奇怪,因为我经常使用它 我希望这是我刚刚错过的东西,因为我看它太久了 flash_ready函数正确地返回了objectID,据我所知,其他一切都正常 不幸的是,当我运行它时,我得到一个错误(因浏览器而异),告诉我document.getElementById().test()不是有效的方法 代码如下: javascript: function flash_ready(i){ document.getElementById(i).test('succ

嘿,所以我很难让外部接口正常工作,这很奇怪,因为我经常使用它

我希望这是我刚刚错过的东西,因为我看它太久了

flash_ready函数正确地返回了objectID,据我所知,其他一切都正常

不幸的是,当我运行它时,我得到一个错误(因浏览器而异),告诉我document.getElementById(
).test()不是有效的方法

代码如下:

javascript:

function flash_ready(i){
    document.getElementById(i).test('success!'); 
}
嵌入Html(生成):

Swfobject是通过google代码包含的,flash嵌入得很好,所以这不是问题所在

我在另一台服务器上有一个非常类似的设置,但在这台服务器上似乎无法运行。这是一个主机共享服务器。可能是服务器的故障吗?有人看到明显的语法问题吗


提前谢谢

flash\u准备好接收您期望的objectID了吗

此外,为什么要使用:

var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
navigateToURL(url, "_self");
当设计用于此目的时:

ExternalInterface.call("flash_ready", ExternalInterface.objectID);

flash_准备好接收您期望的objectID了吗

此外,为什么要使用:

var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
navigateToURL(url, "_self");
当设计用于此目的时:

ExternalInterface.call("flash_ready", ExternalInterface.objectID);

发布您的源代码(预生成)。当您的浏览器显示[Flash].Method不是函数时,99%的情况下,这意味着您在.swf准备好之前尝试在Flash中调用函数。我知道你试过这么做,但显然它不起作用,所以一定是出了问题。因此,发布您的预渲染源代码,我相信我们可以找到问题。

发布您的源代码(预生成)。当您的浏览器显示[Flash].Method不是函数时,99%的情况下,这意味着您在.swf准备好之前尝试在Flash中调用函数。我知道你试过这么做,但显然它不起作用,所以一定是出了问题。因此,发布您的预渲染源代码,我相信我们可以找到问题。

Flash实际上还没有完成构建。您正在从构造函数调用您的
flash\u ready
回调,因此JS试图在对象上台之前调用。将您的
flash\u ready
调用移动到一个
事件。将\u添加到\u STAGE
侦听器,它应该开始工作。

flash实际上还没有完成构建。您正在从构造函数调用您的
flash\u ready
回调,因此JS试图在对象上台之前调用。将您的
flash\u ready
调用移动到一个
事件中。将\u添加到\u STAGE
侦听器中,它应该开始工作。

好的,因此经过进一步调查,似乎flash对象的多个实例存在问题,因为我正在将其克隆到一个lightbox。我现在已经让它工作了。

好的,所以在进一步调查之后,似乎flash对象的多个实例存在问题,因为我正在将其克隆到lightbox。我现在已经让它工作了。

刚刚花了5个小时来解决这个问题。这一切真的令人沮丧。在我的例子中,解决方案非常简单,我永远也猜不到。 因此,首先,对于所有从未见过flash player调试器在浏览器中的文件上运行的人来说,这一发现带来了某种神奇的体验:) 现在我的ExternalInterface发现:在同一个域中存在一个沙箱冲突。这意味着flash无法从yourdomain.com访问www.yourdomain.com。当然,奇怪的是,您没有使用ExternalInterface显式调用域。 无论如何,解决方案非常简单:将这个添加到我的.htaccess文件中,就这样

# Redirect non-www to www 
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.youtdomain.com/$1 [R=301,L] 

希望这有助于某人

刚刚花了5个小时来解决这个问题。这一切真的令人沮丧。在我的例子中,解决方案非常简单,我永远也猜不到。 因此,首先,对于所有从未见过flash player调试器在浏览器中的文件上运行的人来说,这一发现带来了某种神奇的体验:) 现在我的ExternalInterface发现:在同一个域中存在一个沙箱冲突。这意味着flash无法从yourdomain.com访问www.yourdomain.com。当然,奇怪的是,您没有使用ExternalInterface显式调用域。 无论如何,解决方案非常简单:将这个添加到我的.htaccess文件中,就这样

# Redirect non-www to www 
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.youtdomain.com/$1 [R=301,L] 

希望这有助于某人

在调用
test(t)
时,它没有定义吗?在加载闪存之前不会调用test(t),因为flash\u ready()函数是从闪存本身调用的。不确定这是否有意义,但以下是流程:UI实例化->构造函数(UI)->flash_ready()调用->test(),实际上,flash通过javascript调用测试函数,因此必须定义测试。是吗?它在所有浏览器中都这样做吗?我有时会在IE中遇到一些小问题,我必须解决这些问题。我只在webkit和mozilla浏览器中测试过,但在GC、Safari和Camino中会出现错误。HTML元素ID真的是“/chainmaille/includes/media/flash/upload\u image”吗?SWFObject的第二个参数是您计划在其中嵌入SWF的HTML元素的ID。有一个看起来像文件路径的ID是非常不寻常的……难道不是吗,在调用
test(t)
时,它没有定义吗?在加载闪存之前,不会调用test(t),因为flash\u ready()函数是从闪存本身调用的。不确定这是否有意义,但以下是流程:UI实例化->构造函数(UI)->flash_ready()调用->test(),实际上,flash通过javascript调用测试函数,因此必须定义测试。是吗?它在所有浏览器中都这样做吗?我有时会在IE中遇到一些小问题,我必须解决这些问题。我只在webkit和mozilla浏览器中测试过,但在GC、Safari和Camino中会出现错误。HTML元素ID真的是“/chainmaille/includes/media/flash/upload\u image”吗?SWFObject的第二个参数是您计划在其中创建的HTML元素的ID