嘿,我在运行ExternalInterface时遇到了一堆问题,这很奇怪,因为我经常使用它。
我希望这是我刚刚错过的东西,因为我已经看了太久了。
flash_ready函数正确地返回了objectID,据我所知,其他一切都是正常的。
不幸的是,当我运行它时,我得到一个错误(根据浏览器的不同),告诉我基本上document.getElementById(<movename>).test()不是一个有效的方法。
代码如下:
javascript:
function flash_ready(i){
document.getElementById(i).test('success!');
}嵌入Html (生成):
<script type="text/javascript">
swfobject.embedSWF("/chainmaille/includes/media/flash/upload_image.swf", "/chainmaille/includes/media/flash/upload_image", "500", "50", "9.0.0","expressInstall.swf", {}, {allowScriptAccess:'always', wmode:'transparent'},{id:'uploader_flash',name:'uploader_flash'});
</script>
<object type="application/x-shockwave-flash" id="uploader_flash" name="uploader_flash" data="/chainmaille/includes/media/flash/upload_image.swf" width="500" height="50"><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object>AS3:
package com.jesseditson.uploader {
import flash.display.MovieClip;
import flash.external.ExternalInterface;
import flash.system.Security;
public class UI extends MovieClip {
// Initialization:
public function UI() {
Security.allowDomain('*');
ExternalInterface.addCallback("test", test);
var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
navigateToURL(url, "_self");
}
public function test(t){
trace(t);
}
}
}Swfobject是通过google代码包含的,flash嵌入得很好,所以这不是问题所在。
我在另一台服务器上有一个非常相似的设置,但在这台服务器上似乎无法正常工作。这是一个Hostgator共享服务器。会不会是服务器的问题?有没有人看到明显的语法问题?
提前感谢!
发布于 2010-06-16 08:22:31
好的,经过进一步的调查,似乎flash对象的多个实例出现了问题,因为我正在将其克隆到lightbox。我现在已经让它工作了。
发布于 2010-04-30 05:58:05
Flash实际上还没有完成构建。您正在从构造函数调用flash_ready回调函数,因此JS试图在对象出现之前调用它。比方说,将您的flash_ready调用移动到Event.ADDED_TO_STAGE侦听器,它就应该开始工作了。
发布于 2011-10-27 13:29:38
我花了5个小时来解决这个问题。这一切真的很令人沮丧。在我的例子中,解决方案非常非常简单,我永远也不会猜到。因此,首先,对于所有从未见过flash player调试器在浏览器内部的文件上运行的人来说,发现this link that walks you through the setup带来了某种神奇的体验:)现在到我的ExternalInterface发现:在同一个域中存在沙箱冲突。这意味着闪存无法从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] 希望这能帮助到某人
https://stackoverflow.com/questions/2736212
复制相似问题