工作上用到C#和Flash通信交互,C#用到JS类库,Flash用到AS3.0类库。根据实现过程进行一下总结:
首先引用swfobject.js类(下载链接:https://files.cnblogs.com/files/wxylovejx/swfobject.zip),进行加载Flash。
方法如下:
------------------------用swfobject.js加载flash----------------------
var flashvars = {
};
var params = {
menu: "false",
scale: "noScale",//showall(显示全部内容,保持比例,但是上下,或者左右可能有空白), noborder(缩放可以裁减内容,保持比例,但是不留空白), exactfit(缩放按照flash设置的高度和宽度,不保持比例),noscale(不缩放,原始比例)
allowFullscreen: "true", //允许全屏
allowScriptAccess: "always", //可以成功运行对外脚本
bgcolor: "", //背景颜色
wmode: "transparent" //Flash为透明背景
};
var attributes = {
id:"main"
};
swfobject.embedSWF(
"demo.swf", //Flash的地址url,
"altContent", "550px", "400px", "10.0.0", //设置宽度、高度、版本号
"expressInstall.swf", //指定express install SWF的URL并激活Adobe express install
flashvars, //用name:value对指定你的flashvars
params, //用name:value对指定你的嵌套object元素的params
attributes); //用name:value对指定object的属性
如果出现加载失败,请添加 <p><a href="http://www.adobe.com/go/getflashplayer">Get Adobe Flash player</a></p>进行下载Flash。
编写C#中html内容,实现方法。
<body>
<textarea id="ta" rows="10" cols="50">你好,flash</textarea>
<button style="200px;height:50px;" onclick="callFlash()">js调用as3.0</button>
<div style="height:10px;" />
</body>
/**
* js调用flash
*/
function jsCall(){
var ta=document.getElementById("ta");
var s=ta.value;
console.log(s);
swf=swfobject.getObjectById("main");
swf.jsCall(s);
}
/**
* flash调用js
*/
function flashfullscore(value){
alert("flash发来消息:"+value);
return "消息:”"+value+"“"+"已收到";
}
这样C#中基本上实现了编写的程序,如果需要和后台的程序进行数据交换,可以使用AJAX,
/**
* flash调用js
*/
function flashfullscore(value) {
//alert("flash发来消息:" + value);
//return "消息:”" + value + "“" + "已收到";
$.ajax('@Url.Action("SubmitAchievement", "TeachManage")', {//这里是测试链接,根据自己的程序编写链接!
type: "POST",
data: { jsoninput: value },//后台接收的值jsoninput:值
async: false,
success: function (data) {
if (data == "ok") {
swf = swfobject.getObjectById("main");
swf.jsCall(data);
alert("提交成功!!");
}
else {
alert("提交失败!!");
}
}
});
}
实现Flash程序中的代码:
//js调用as3.0
if(ExternalInterface.available){
ExternalInterface.addCallback("jsCall",jsCall);
}
function jsCall(value:*){
tf3.text=value+"";
}
//as3.0调用js
//import com.adobe.serialization.json.JSON;
btn.addEventListener(MouseEvent.CLICK,clickHandler);
function clickHandler(e:MouseEvent){
if(ExternalInterface.available){
var jsonString:String = new String();
jsonString = "{"ExamName":"+tf1.text+","Score":"+"88"+"}";//Flash传过去的数据,这里以Json数值为例子传值。
var ret:String = ExternalInterface.call("flashfullscore",jsonString);
tf2.text = ret;
}
else{
trace("交互不可用,需要将swf放到网页里边。");
}
}
项目下载链接:https://files.cnblogs.com/files/wxylovejx/JsFlash.zip