zoukankan      html  css  js  c++  java
  • html<embed>标签和url向Flash传flashvars值

    今天的工作遇到了flash读取embed中的flashvars值,特意研究了一下。

    先看html代码:

    <object>
    <embed src="test.swf" wmode="transparent" quality="high" width="550" height="400" align="L" scale="noborder" flashvars="width=300&height=500&color=blue" allowScriptAccess="sameDomain" type="application/x-shockwave-flash">

    </embed>
    </object>

    AS3代码test.swf:

    var tf:TextField=new TextField();
    var str1:String =stage.loaderInfo.parameters.width;
    var str2:String =stage.loaderInfo.parameters.height;
    var str3:String =stage.loaderInfo.parameters.color;
    tf.text="width="+str1+"height="+str2+"color="+str3;

    tf.width=300;
    addChild(tf);

     embed中的swf可以读取flashvars中的值对,此时舞台上显示出了响应的结果。这种方法可以用到简单的数据交换,方便省事,避免读取xml或借用js得到外部数据。

    如果有多个值对也可以用for in遍历:

    AS3代码:

    var tf:TextField=new TextField();
    var paramObj:Object=stage.loaderInfo.parameters;
    for(var key:String in paramObj){
     tf.appendText(key+"="+paramObj[key]);
    }
    tf.width=300;
    addChild(tf);

    读取到的flashvars其实是一个Object类型,可以用for in遍历。但这种方法要注意测试的时候html文件路径避免是中文,因为这样可能会导致flash读取到的数据是乱码。

    讨论另一种情况。

    如果这个swf没有插入到html中,而是直接用http://www.abc.com/test.swf这种方式打开的话那flash的stage.loaderInfo.parameters不就得不到数据了吗?

    其实也不是,不妨换一种方法。如果你在后面加上相应的参数如:http://www.abc.com/test.swf?width=300&height=500&color=blue,enter打开一下该网页,你会发现舞台上又显示出了url传来的值,url传值到了stage.loaderInfo.parameters对象中。这种方法在本地测试不了,必须放在服务器上如localhost。

    该例子的代码整理如下:

    html:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Flash读取embed的值</title>
    </head>
    <body>
    <div>
    <object>
    <embed src="test.swf" wmode="transparent" quality="high" width="550" height="400" align="L" scale="noborder" flashvars="width=300&height=500&color=blue" allowScriptAccess="sameDomain" type="application/x-shockwave-flash">
    </embed>
    </object>
    </div>
    </body>
    </html>
    

     AS3代码:

    var tf:TextField=new TextField();
    var str1:String =stage.loaderInfo.parameters.width; 
    var str2:String =stage.loaderInfo.parameters.height; 
    var str3:String =stage.loaderInfo.parameters.color; 
    tf.text="width="+str1+"height="+str2+"color="+str3;
    //或者用for in来遍历
    /*var paramObj:Object=stage.loaderInfo.parameters;
    for(var key:String in paramObj){
    	tf.appendText(key+"="+paramObj[key]);
    }*/
    
    tf.width=300;
    addChild(tf);
    
     

    ==================================================

    作者:绿色花园

    出处:http://www.cnblogs.com/cos2004/archive/2011/03/30/1999925.html

    ==================================================

  • 相关阅读:
    UOJ.26.[IOI2014]Game(交互 思路)
    Good Bye 2016 F.New Year and Finding Roots(交互)
    Codeforces.835E.The penguin's game(交互 按位统计 二分)
    Codeforces.744B.Hongcow's Game(交互 按位统计)
    Codeforces.862D.Mahmoud and Ehab and the binary string(交互 二分)
    正睿OI 提高 Day1T3 ZYB玩字符串(DP)
    划分vlan
    2三层交换机实现vlan间的路由
    交换机基础-交换机远程telnet
    自动化运维环境的搭建问题处理
  • 原文地址:https://www.cnblogs.com/zhwl/p/2375158.html
Copyright © 2011-2022 走看看