如何获得带有ExternalInterface的JavaScript变量?

如何获得带有ExternalInterface的JavaScript变量?,javascript,flash,actionscript-3,actionscript,Javascript,Flash,Actionscript 3,Actionscript,我试图在ActionScript(2.0)中使用ExternalInterface.call函数来获取包装文档中设置的javascript变量值。以下内容似乎在FireFox和Chrome中都适用,但在IE(8)中自然不起作用。有人能推荐另一种方法来获取存储在此变量中的值吗?谢谢 var linkPath = ExternalInterface.call("function(){return window.customLinkLocation;}", null); JavaScript: &l

我试图在ActionScript(2.0)中使用ExternalInterface.call函数来获取包装文档中设置的javascript变量值。以下内容似乎在FireFox和Chrome中都适用,但在IE(8)中自然不起作用。有人能推荐另一种方法来获取存储在此变量中的值吗?谢谢

var linkPath = ExternalInterface.call("function(){return window.customLinkLocation;}", null);
JavaScript:

<head>
    <script type="text/javascript">
    var customLinkLocation = "http://localhost/file.xml";
    </script>
</head>

var customLinkLocation=”http://localhost/file.xml";
这可能是我嵌入swf的方式吗

 <body>
<object width="550" height="400" id="mySwf">
<param name="movie" value="mySwf.swf">
<embed src="mySwf.swf" width="550" height="400">
</embed>
</object>

您是否使用提供的id嵌入swf


您是否在提供id的情况下嵌入swf


根据我对的理解和以前的一些经验(但不是太多):您需要通过提供函数名来调用函数。无法从ActionScript执行自定义代码。在这种情况下,您需要在JavaScript中创建一个函数来返回所需的值

function getCustomLinkLocation(){
    return customLinkLocation;
}
打电话

ExternalInterface.call("getCustomLinkLocation");
我不知道为什么Firefox和Chrome允许您调用匿名函数,但ExternalInterface引用没有说明这一点

在ActionScript中,您可以在HTML页面上执行以下操作:

  • 调用任何JavaScript函数
  • 传递任意数量的参数和任意名称
  • 传递各种数据类型(布尔、数字、字符串等)
  • 从JavaScript函数接收返回值

根据我对的理解和一些(但不是太多)以前的经验:您需要通过提供函数名来调用函数。无法从ActionScript执行自定义代码。在这种情况下,您需要在JavaScript中创建一个函数来返回所需的值

function getCustomLinkLocation(){
    return customLinkLocation;
}
打电话

ExternalInterface.call("getCustomLinkLocation");
我不知道为什么Firefox和Chrome允许您调用匿名函数,但ExternalInterface引用没有说明这一点

在ActionScript中,您可以在HTML页面上执行以下操作:

  • 调用任何JavaScript函数
  • 传递任意数量的参数和任意名称
  • 传递各种数据类型(布尔、数字、字符串等)
  • 从JavaScript函数接收返回值

明白了。问题是IE要求在“object”元素上使用classid属性

<object width="550" height="400" id="mySwf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
<param name="movie" value="mySwf.swf">
<embed src="mySwf.swf" width="550" height="400">
</embed>
</object>

明白了。问题是IE要求在“object”元素上使用classid属性

<object width="550" height="400" id="mySwf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
<param name="movie" value="mySwf.swf">
<embed src="mySwf.swf" width="550" height="400">
</embed>
</object>

还要确保在嵌入代码中将allowscriptaccess设置为“始终”。

还要确保在嵌入代码中将allowscriptaccess设置为“始终”。

您还可以执行以下操作:

ExternalInterface.call("eval","getVar=function(obj){return obj}");
var yourVar:String = ExternalInterface.call("eval","getVar(JSvar)");
您也可以这样做:

ExternalInterface.call("eval","getVar=function(obj){return obj}");
var yourVar:String = ExternalInterface.call("eval","getVar(JSvar)");

你使用匿名函数的原因是什么?你使用匿名函数的原因是什么?你确定吗?我以为你只能调用函数,没有理由。我认为调用函数要求第一个参数是函数。上面的答案似乎没有什么区别。@Alin:
window.customLinkLocation.toString
是一个函数@尼克:好的。我不相信它会工作,因为您的原始代码应该可以工作,所以一定有其他错误。您确定这一点吗?我以为你只能调用函数,没有理由。我认为调用函数要求第一个参数是函数。上面的答案似乎没有什么区别。@Alin:
window.customLinkLocation.toString
是一个函数@尼克:好的。我不相信它会起作用,因为你的原始代码应该能起作用,所以一定是出了什么问题。这就是为什么我使用匿名函数的原因。我不想在javascript(客户端约束)中实现一个函数,然后您可以尝试调用eval,并将正确的字符串传递给它。我不确定你是否会因为可能的安全原因而被阻止这样做。也许IE8有一些安全策略不允许你使用匿名函数。调用匿名函数允许您运行所需的任何代码。IE8可能认为这是一个太多的威胁。这就是为什么我使用匿名函数的原因。我不想在javascript(客户端约束)中实现一个函数,然后您可以尝试调用eval,并将正确的字符串传递给它。我不确定你是否会因为可能的安全原因而被阻止这样做。也许IE8有一些安全策略不允许你使用匿名函数。调用匿名函数允许您运行所需的任何代码。IE8可能认为这是一个太多的威胁。我在我的对象标签中添加了一个“id”属性,但这并没有什么区别。尽管这让我怀疑我嵌入闪光灯的方式。我将更新我的问题以显示这一点。ThanksI在我的对象标记中添加了一个“id”属性,这并没有什么区别。尽管这让我怀疑我嵌入闪光灯的方式。我将更新我的问题以显示这一点。谢谢