我编写了一个 flex 应用程序,它使用此代码从浏览器获取主机字符串
ExternalInterface.call("window.location.host.toString")
这行代码可以完美地在 Firefox 和 Opera 中获取主机字符串。但是,在使用 IE 时,返回的字符串始终为 'null'。我需要从浏览器中获取此类信息。我知道可以通过定义一个获取此类字符串并从应用程序调用该函数的 javascript 函数来解决此问题。但是,我的应用程序需要从本机来源获取此类信息。
我想知道是否有人遇到同样的问题并设法解决它,或者是否有人知道为什么我在 IE 中总是得到 null,但在使用 Firefox 和 Opera 时却没有
编辑1:
这是嵌入生成的 SWF 文件的 HTML 代码。也许这有助于发现错误
<object id="myTest1" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" height="330px" width="600px">
<param name="movie" value="http://www.website.com/test.swf" />
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="transparent" />
<embed id="myTest1" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.website.com/test.swf" allowScriptAccess="always" wmode="transparent" height="330px" width="600px" flashvars=""></embed>
</object>
id、classid 和 allowScriptAccess 设置如下
任何的想法?
编辑2:
对于 Lior Cohen Flex 文件是您的第一个链接中使用的示例。子目录history包含history.js、history.css和historyFrame.html。包含生成的 SWF 文件的 HTML 页面是这样的
<html>
<head>
<!-- BEGIN Browser History required section -->
<link rel="stylesheet" type="text/css" href="history/history.css"/>
<script src="history/history.js" language="javascript"></script>
<!-- END Browser History required section -->
</head>
<body>
<object id="file1" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" height="330px" width="600px">
<param name="movie" value="file.swf" />
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="transparent" />
<embed id="file2" pluginspage="http://www.macromedia.com/go/getflashplayer" src="file.swf" allowScriptAccess="always" wmode="transparent" height="330px" width="600px" flashvars=""></embed>
</object>
<body>
</html>
但是,这仍然没有按预期工作。
编辑3:
我已经发现了问题,但是我无法解决它。问题与 IE 的 javascript 引擎有关,与 ExternalInterface 或对象和嵌入 HTML 标记无关。
在我的情况下,我正在做的是编写对象并将标签嵌入到使用 javascript 创建的 div 中,然后使用 DOM 方法将此 div 附加到正文的末尾。但是,这种方法使 InternalInterface 在 IE 中总是返回 null(但在 Firefox 和 Opera 中都没有)。
var swfDiv = document.createElement('div');
swfDiv.innerHTML = '<object id="test1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="600" height="330"><param name="movie" value="http://www.website.com/test.swf" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="quality" value="high" /><embed id="test2" name="test2" src="http://www.website.com/test.swf" allowScriptAccess="always" allowFullScreen="false" quality="high" width="600" height="330" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>';
document.body.appendChild(swfDiv);
我尝试使用 document.write 附加 HTML 内容,这使它在 IE 中完美运行,但是 document.write 覆盖了整个页面(删除旧内容),这是我不想要的。
document.write('<object id="test1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="600" height="330"><param name="movie" value="http://www.website.com/test.swf" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="quality" value="high" /><embed id="test2" name="test2" src="http://www.website.com/test.swf" allowScriptAccess="always" allowFullScreen="false" quality="high" width="600" height="330" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>');
知道如何解决这个问题吗?
谢谢