我写了一个Flex应用程序使用此代码,您可以通过浏览器主机串

ExternalInterface.call("window.location.host.toString")

代码工作的这行prefectally获取主机串在这两个Firefox和Opera。然而,在使用IE浏览器时,返回的字符串始终是“空”。我需要从浏览器这样的信息。我知道有通过定义JavaScript函数,得到这样的字符串,并调用从应用程序功能的解决办法。然而,我的应用程序需要从天然来源获得这样的信息。

我想知道是否有人有同样的问题,并设法解决它,或者如果有人有任何想法,为什么我使用Firefox和Opera的时候总是空的IE浏览器,而不是

编辑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:

有利奥尔科恩 Flex的文件是你的第一个链接使用的例子。子目录历史包含history.js,history.css和historyFrame.html。 HTML页面包括所生成的SWF文件是这样的

<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标签来。

我在做什么在我的情况是写入对象和嵌入标签到一个div使用JavaScript创建这个div追加到使用DOM方法体的结尾。然而,这样的方法使InternalInterface总是在IE中返回空(但不是在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);

我试图用文件撰写的HTML内容,这使得它在IE工作完美追加,但是,文件撰写写了整个页面(删除旧的内容),这是一件好事,我不想。

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>');

不知道如何解决这一问题?

由于

有帮助吗?

解决方案 3

到在“编辑3”中提到的问题的解决方案是基本上创建,而不是仅仅把参数指定为字符串的innerHTML属性使用DOM对象的对象标签和它的参数代码,。这将使在Internet Explorer中的ExternalInterface工作的返回值。下面是一个例子:

var swfDiv = document.createElement('div');

var obj = document.createElement('object');
obj.setAttribute('id','test1');
obj.setAttribute('codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0');
obj.setAttribute('width','600px');
obj.setAttribute('height','330px');

var param = document.createElement('param');
param.setAttribute('name','movie');
param.setAttribute('value','http://www.website.com/test.swf');
obj.appendChild(param);

param = document.createElement('param');
param.setAttribute('name','allowScriptAccess');
param.setAttribute('value','always');
obj.appendChild(param);

param = document.createElement('param');
param.setAttribute('name','wmode');
param.setAttribute('value','transparent');
obj.appendChild(param);

swfDiv.appendChild(obj);
document.body.appendChild(swfDiv);

document.getElementById('test1').setAttribute('classid','clsid:d27cdb6e-ae6d-11cf-96b8-444553540000');

注1:这将使它与Internet Explorer工作,任何其他浏览器应在质询的“编辑3”使用任何上述方法的。可以检测浏览器,并相应地使用适当的代码。

注2:最后一行需要使其正常工作,并且它必须是这样的,在加入所述对象到所述文件后结束。我不知道为什么,可能是它与怪异的浏览器的行为做。

其他提示

看看下面的链接。它应该提供您要查找的内容,而无需使用ExternalInterface.call()。

http://livedocs.adobe.com /flex/3/html/help.html?content=deep_linking_7.html

如在页中提到的上方,用于由BrowserManager类提供它的全部功能,包装必须包括几个支持文件(history.js,除其他)。

有关如何获取并使用这些支持文件的更多信息可以在以下部分中的“使用深层链接部署应用程序”以下链接被发现。

http://livedocs.adobe.com /flex/3/html/help.html?content=deep_linking_2.html

一个快速搜索发现,你将不得不在对象上设置一些额外的属性,使其在IE浏览器。集ID,classid和scriptAccess(最后一个当然是“真”),以得到这个工作。 (谷歌的详细信息)

(未测试)。

http://www.google.com/search?q=externalinterface +互联网+探险

@AAA

  

注2:最后一行才能使其正常工作,并且它必须像   即,在添加所述对象到所述文件后结束。我不知道   为什么,可能是它与怪异的浏览器的行为做。

非常感谢您!我想这是在IE浏览器中的错误。我不知道你怎么发现的。

使用SWFObject(你会在 http://code.google.com/p发现/ swfobject的/ )将Flash网页上的Internet Explorer还解决了这个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top