28
2015
07

as中调用js实现swf全屏

有个网友遇到一个问题:html页面中加载flash的时候allowFullscreen设置成了false。由于种种原因,无法通过修改html页面,因此想,能不能通过as来解决。

最开始的想法是,通过as中使用ExternalInterface.call("eval","js代码")将页面中的allowFullscreen设置成true。试验结果是:可以修改成功,但是修改之后依然无法全屏。

从网上搜了一些方法,大多是设置swf的宽高的,而实际上我们想要的效果是stage.displayState = StageDisplayState.FULL_SCREEN,就像在线看视频的时候,点击了全屏那种效果。

有一个非主流的解决方法,思路是:在flash中执行js方法,在页面中再加载一个swf,将allowFullscreen设置成true。然后把当前的swf删除。

具体实现代码如下(js):

	var div=document.createElement("div");
	div.id="flashcon";
	document.body.appendChild(div);  
	var flashvars = {
		
	};
	var params = {
		menu: "false",
		scale: "noScale",
		allowFullscreen: "true",  
        	allowScriptAccess: "always",  
        	bgcolor: "#000000",
		wmode:"transparent"
	};
	var attributes = {
		id: "main2"
	};
	swfobject.embedSWF("swf/全屏.swf", "content", "550", "400", "10.0.0", "expressInstall.swf", flashvars, params, attributes);

	var lastSwf=document.getElementById("main");//main是html页面中swf的id
	lastSwf.parentNode.removeChild(lastSwf);

在as中写法如下:

if(ExternalInterface.available){ 
	ExternalInterface.call("eval","if(!flasVar){var div=document.createElement(\"div\");div.id=\"flashcon\";document.body.appendChild(div);  var flasVar=true;var params = {menu: \"false\",scale: \"noScale\",allowFullscreen: \"true\",  allowScriptAccess: \"always\",  bgcolor:\"#000000\",wmode:\"transparent\"};attributes = {id: \"main2\"};swfobject.embedSWF(\"swf/全屏.swf\",\"flashcon\", \"550\", \"400\", \"10.0.0\",\"expressInstall.swf\", flashvars, params, attributes); }else{console.log('flashVar已经存在');var lastSwf=document.getElementById(\"main\");lastSwf.parentNode.removeChild(lastSwf);}");

}


加载进来的swf依然会执行这个js,然后继续加载一个新的swf,为了避免这种情况,我们在js中定义了一个变量flasVar,如果flasVar不存在,定义flasVar=true,否则删除html页面默认加载的swf。

从逻辑上来说,”删除html页面默认加载的swf“这一步,放在swfobject.embedSWF()后边也可以,但是我在谷歌浏览器里测试的时候,flashplayer会崩溃。

也可以把整个操作封装成一个function,然后直接调用function,或者先将js代码通过<script></script>标签的形式添加到html中。


又发现一个方法:

设置完allowFullscreen不起作用,但是重新加载一下swf,就起作用了。

js实现:

/**
* 测试直接将页面中的allowFullscreen改为true,然后设置object的data属性,将会重新加载swf
*/
function quanping(){ 
	var params=document.getElementsByName("allowFullscreen");
	for(var i=0;i<params.length;i++){ 
		//console.log(params[i].value);
		params[i].value=true;
	}
	var main=document.getElementById("main");
	main.data="swf/全屏.swf";
}

as中写法如下:

if(ExternalInterface.available){ 
	ExternalInterface.call("eval","if(!flashVar){var flashVar=true; var params=document.getElementsByName(\"allowFullscreen\");console.log(params.length);for(var i=0;i<params.length;i++){ params[i].value=true;}var main=document.getElementById(\"main\");main.data=\"swf/全屏.swf\";}else{console.log('flashVar已经存在');}");

}

这种方法比上边那种要好的多了。



源码打包下载

« 上一篇下一篇 »

相关文章:

显示fps  (2020-1-19 9:16:17)

js保留有效数字  (2019-7-30 15:32:12)

js的parseInt方法  (2019-2-15 9:12:44)

闪电效果  (2017-11-28 15:4:19)

js中判断一个对象的类型  (2017-3-30 14:27:35)

解九连环  (2016-12-1 20:58:11)

DataURL与File,Blob,canvas对象之间的互相转换的Javascript  (2016-11-25 14:58:41)

js生成条形码-barcode  (2016-10-12 15:59:51)

GeoJSON格式  (2016-9-23 13:28:44)

去掉标题栏、全屏  (2016-9-20 10:15:20)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。