• 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

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

  • 相关阅读:
    wxpython 支持python语法高亮的自定义文本框控件的代码
    小米平板6.0以上系统如何不用Root激活Xposed框架的步骤
    vivo4.0系统怎么不ROOT激活Xposed框架的教程
    oppo设备怎么样无需root激活XPOSED框架的教程
    OPPO A7x在哪里开启usb调试模式的详细经验
    python将两个数组合并成一个数组的两种方法的代码
    (最详细)小米MIX的Usb调试模式在哪里打开的教程
    (简单)华为荣耀9i LLD-AL20的Usb调试模式在哪里开启的方法
    linux c ---raise 使用范例的代码
    oppo8.0系统怎么无需Root激活Xposed框架的经验
  • 原文地址:https://www.cnblogs.com/zhwl/p/2375158.html
Copyright © 2020-2023  润新知