import flash.external.*
//提供JS访问的函数名
var _method:String = "say"
//指定本地函数中this变量的作用域,可设置为null留空
var e_area:Object = null
//AS内部函数名
var method:Function = say
//将函数注册到容器列表
var wasSuccessful:Boolean = ExternalInterface.addCallback(_method, e_area, method)
//查看注册是否成功
if(wasSuccessful){
result_txt.text = "函数注册成功"
}
//本地的函数
function say(txt:String) {
result_txt.text = txt
}
Html中代码:<div>
<form>
<input type="button" onclick="callExternalInterface()" value="JS调用AS方法" />
</form>
<script>
function callExternalInterface() {
thisMovie("demo").say("Hello,World")
}
//浏览器兼容访问DOM
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
}
else {
return document[movieName]
}
}
</script>
</div>
其中红色代码是核心代码,其作用原理是AS端通过addCallback函数把AS内部定义的方法注册为可从容器中调用,允许自定义另外一个方法名供 JS来调用这个方法,函数调用成功返回true,失败返回flase,在此例中通过wasSuccessful变量来判断函数是否注册成功。函数注册成功以后,JS可以通过DOM来访问SWF对象,然后直接调用预定义的方法即可。
通过比较可以看出,使用ExternalInterface来完成AS和JS的通信,代码可以更简洁,更清晰,功能也更强大,不过还有些细节你需要了解,需要使用8.0以上的播放器,对于调用的JS函数不能使用递归,同时安全域限制也必须在考虑之中。
<div id="flashContent"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="650" height="490" id="index" align="middle">
<param name="movie" value="index.swf" /><!--这是地址-->
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="play" value="true" />
····
上面是部分我截取的网页包含的html代码,上面是相对位置,相对html所在文件夹的位置。js可以动态控制元素所在位置,css才是控制布局的。多半由id控制
你在对应的js文件找所用id #flashContent,找找定义位置的,就可以看出了。如果是绝对地址,是http://开头的
你说的用js控制的flash视频怎么获取flash真实的url地址,你是自己的flash,直接放在文件夹,用就行了。引用的,就在js的效果里写绝对地址就行。无论是不是flash,只要是js控制的,都可以这样处理
如果宽高比无要求的话可以这样写假设SWF所在的DIV的class为div_swf
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"type="text/javascript"></script>
$(document).ready(function(e) {
$('.div_swf swf').css({width:$(window).width(),height:$(window).height()})
})