gpt4 book ai didi

javascript - 使用 JS 动态添加 Flash 时 IE 6 7 8 的外部接口(interface)问题

转载 作者:行者123 更新时间:2023-11-28 10:13:41 25 4
gpt4 key购买 nike

我在获取ExternalInterface.callBack()时遇到问题;为了在特定情况下工作,当我像这样动态添加对象和嵌入标签时:

function createBannerObject(swfURL,flashVars, searchParams)
{
/* swfURL -- our template URL
videoURL -- user video URL
backURL -- background picture URL
flashVars -- other user preferences -- string
searchParam -- param for word search -- array */

var flashDiv = document.createElement('div');
flashDiv.id = 'flashvideo';
flashDiv.style.width='1px';
flashDiv.style.height='1px';
// id = myMovie, name = myMovie ------------------------//
flashDiv.innerHTML = '<object id="myMovie" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="100%" height="100%" align="left"><param name="bgcolor" value="#faa"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+swfURL+'" /><param name="flashvars" value="'+flashVars+'" /><param name="quality" value="high" /><param name="wmode" value="opague" /><embed name="myMovie" src="'+swfURL+'" quality="high" width="100%" height="100%" align="left" allowScriptAccess="always" allowFullScreen="false" bgcolor="#cccccc" wmode="opaque" flashvars="'+flashVars+'" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>';
//----------------------------------------------------------
var search = ad_createDomElem('div',false);
search.style.display = 'none';
var searchWord = ad_createDomElem('p',{'id':'keyword'});
searchWord.innerHTML = searchParams[0];
var searchDiv = ad_createDomElem('p',{'id':'search'});
searchDiv.innerHTML = searchParams[1];
var regex1 = ad_createDomElem('p',{'id':'regex1'});
regex1.innerHTML = searchParams[2];
var regex2 = ad_createDomElem('p',{'id':'regex2'});
regex2.innerHTML = searchParams[3];
search.appendChild(searchWord);
search.appendChild(searchDiv);
search.appendChild(regex1);
search.appendChild(regex2);
//-----------------------------------------------------------
flashDiv.appendChild(search);
//-----------------------------------------------------------
document.body.appendChild(flashDiv);
}

现在这是我的 getMovie 函数(就像其他人的一样)

function getMovie(string)
{
var M$ = navigator.appName.indexOf("Microsoft")!=-1;
if(navigator.userAgent.indexOf('MSIE 9.0')) M$ = false;
return (M$ ? window : document)[string];
}

这是它不起作用的页面:

http://banners.adfox.ru/110811/adfox/156416/inDynamic.html

这是一个它工作的页面:不同之处在于 Flash 不是动态添加的:

http://banners.adfox.ru/110811/adfox/156416/onpage.html

所有 JS 都可以通过源码查看 =)

现在关于 AS3 我使用代码:

Security.allowDomain('*');
ExternalInterface.addCallback("playVideoOnOpen", playVideoOnOpen);
ExternalInterface.addCallback("pauseVideoOnClose", pauseVideoOnClose);

function playVideoOnOpen()
{

}

function pauseVideoOnClose()
{

}

我已经成功地隔离了这个问题:

http://banners.adfox.ru/110811/adfox/156416/dynamicAddEasy.html

再次包含所有 JS

问题:动态添加 Flash 时可能会出现什么问题?还是别的什么?

最佳答案

如果您使用 swfobject.js 嵌入您的 swf,那么您的问题就会消失。我一直通过外部接口(interface)使用它,从来没有遇到过你的问题。
您也没有发布传递给函数的数据。

正如您在下面的代码中所看到的,它也更加清晰和 self 解释。

html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">

function loaded() {
var flashvars={}, params={}, attributes={}, tmp, version, width, height, container, flashObj;
flashvars.userId = "1234";

params.menu = "true";
params.quality = "high";
params.allowscriptaccess = "always";
params.allownetworking = "all";

attributes.id = "test";
attributes.name = "test";
attributes.align = "middle";
attributes.allowscriptaccess = "always";
attributes.allownetworking = "all";

tmp = "expressInstall.swf";
version = "10.0.0";
width = "100%";
height = "100%";
container = "replaceMe";// div tag to place the swf in
flashObj = "test.swf?t=" + new Date().getTime(); // anticaching
swfobject.embedSWF(flashObj, container, width, height, version, tmp, flashvars, params, attributes);
}

</script>
</head>
<body onLoad="loaded()" onunload"doUnload( )">
<div id="replaceMe">Loading content.</div>
</body>
</html>

[编辑]
我刚刚注意到我遗漏了其他东西。
不确定我是否在 IE9 中测试过这个,但应该适用于 6-8

if (navigator.appName.indexOf("Microsoft") >= 0){
container = document;
}else{
container = window;
}
var result = container[swf].flashCallBackFunction();

关于javascript - 使用 JS 动态添加 Flash 时 IE 6 7 8 的外部接口(interface)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com