根据Adobe的说法,“现代”更新了嵌入flash对象的方法:
<object id="theFlash" name="theFlash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
width="400" height="225" align="middle">
<param name="movie" value="theflashfile.swf" />
<param name="allowScriptAccess" value="always" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash"
data="getStreamFrame.swf" width="400" height="225">
<param name="allowScriptAccess" value="always" />
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflash">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
尝试在SWF中调用AS3函数时,从Javascript:
var flashObj = document.getElementById('theFlash');
flashObj.someASFunction();
(在AS方面:)
import flash.external.*;
function someASFunction() {
//show some text
}
ExternalInterface.addCallback("someASFunction", someASFunction);
此 不适用于Firefox和Chrome。 闪光灯工作和加载。 flashObj确实得到了对象的引用,但是someASFunction是未定义的,不会被调用。
如果我用embed标签替换object标签:
<embed id="theFlash" name="theFlash" height="225" width="400" align="middle"
type="application/x-shockwave-flash" allowscriptaccess="always"
src="theflashfile.swf" />
然后在Firefox和Chrome上工作(AS功能被调用并正常工作) - (虽然它在IE中不起作用)。
为什么对象标签不起作用?
使用embed标签而不是object标签有多“安全”?它不是过时的吗?
注意,它绝对不是时间问题 - 如果我从onclick函数调用JS的AS函数 - 那么结果是相同的。
答案 0 :(得分:4)
使用推荐的Adobe方法时,我也无法在FF和Chrome中定位flashmovie。我最终使用以下代码,并且ExternalInterface在所有浏览器中都能正常工作
<div id="flashContent">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="619" height="99" id="myFlashMovie" align="middle">
<param name="movie" value="myFlashMovie.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#f2f2f2" />
<param name="allowScriptAccess" value="sameDomain" />
<!--[if !IE]>-->
<embed src="myFlashMovie.swf" quality="high" bgcolor="#f2f2f2"
width="619" height="99" name="myFlashMovie" align="middle"
play="true" loop="true" quality="high" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
<!--<![endif]-->
</object>
为了定位flash电影,我使用这个java脚本
function sendDataToFlash(data) {
getFlashMovie("myFlashMovie").myCallbackInFlash(data);
}
function getFlashMovie(movieName) {
var isIE = navigator.appName.indexOf("Microsoft") != -1;
if(isIE) return window[movieName];
else return document[movieName];
}
答案 1 :(得分:1)
静态嵌入(我更喜欢)我使用这个代码(这个是我的隐形mp3播放器):
<object style="position:fixed" id="1pixPlayer" width="1" height="1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param value="transparent" name="wmode">
<param value="1pxMp3.swf" name="movie">
<param value="always" name="allowScriptAccess">
<embed name="1pixPlayer" width="1" height="1" type="application/x-shockwave-flash" wmode="transparent" allowscriptaccess="always" src="1pxMp3.swf"></object>
答案 2 :(得分:0)
object元素是一个ActiveX控件,它只适用于IE。
w3c标准浏览器改为使用embed标签。
通常,你应该像这样创建一个flash: var fla, box = document.createElement("div");
box.innerHTML = window.ActiveXObject?
"<object id='ID_XXX' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'><param name='movie' value='XXX.swf'></object>":
"<embed src='XXX.swf'></embed>";
fla = box.firstChild;
document.body.appendChild(fla);
答案 3 :(得分:-1)
对我来说,如果我为嵌套的对象标签分配一个不同的id并对这个对象进行调用,它就会开始工作。
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="100%" id="launcher"
align="middle">
<param name="movie" value="/flex-frontend/launcher.swf?version=1.3"/>
<param name="flashvars"
value="sessionId=${session.id}"/>
<param name="wmode" value="direct"/>
<param name="allowFullScreen" value="true"/>
<param name="bgcolor" value="#000000"/>
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" id="launcher1" data="/flex-frontend/launcher.swf?version=1.3"
width="100%" height="100%">
<param name="flashvars"
value="sessionId=${session.id}"/>
<param name="wmode" value="direct"/>
<param name="allowFullScreen" value="true"/>
<param name="bgcolor" value="#000000"/>
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflash">
Flash player version not less than 10.3 is required!
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
然后从javascript:
// This doesn't work
// var flashObj = $("#launcher");
// But this does
var flashObj = $("#launcher1");
var screenshotData = flashObj.get(0).exportScreenshot();
适用于Chrome和FF。