相思资源网 Design By www.200059.com
ie9都不支持websocket,何况ie6,但是websocket能开发那么酷的功能,怎么能让ie拦住我们的脚步?
但是怎么办?
用flash封装吧
具体的flash代码如下:
复制代码 代码如下:
package {
import flash.display.Stage;
import flash.display.Sprite;
import flash.events.*;
import flash.external.ExternalInterface;
import flash.system.Security;
import flash.utils.Timer;
import flash.net.Socket;
import flash.utils.ByteArray;
import flash.utils.Endian;
public class websocket4ie extends Sprite {
public static function main():void
{
var websocket4ie:websocket4ie = new websocket4ie();
}
private var debugEnabled:Boolean;
private var movieName:String;
private var handlers:String;
private var server:String;
private var port:Number;
private var isDebug:Number;
private var socket:Socket;
private var socketBuffer:ByteArray = new ByteArray();
public function websocket4ie() {
Security.allowDomain("*");
var counter:Number = 0;
root.addEventListener(Event.ENTER_FRAME, function ():void { if (++counter > 100) counter = 0; });
this.movieName = root.loaderInfo.parameters.movieName;
this.handlers = root.loaderInfo.parameters.handlers;
this.server = root.loaderInfo.parameters.server;
this.port = root.loaderInfo.parameters.port;
this.isDebug = root.loaderInfo.parameters.debug;
this.debug(this.port+''+this.server);
try {
this.debugEnabled = root.loaderInfo.parameters.debugEnabled == "true" ? true : false;
} catch (ex:Object) {
this.debugEnabled = false;
}
this.connectServer();
ExternalInterface.addCallback("sendData", this.sendData);
}
public function connectServer():void {
socket = new Socket();
socket.endian = Endian.BIG_ENDIAN;
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
socket.connect(this.server, this.port);
this.socket = socket;
}
public function onConnect(e:Event):void {
//握手
var headers:Array = new Array();
headers.push("GET /chat HTTP/1.1\r\n");
headers.push("Upgrade: websocket\r\n");
headers.push("Connection: Upgrade\r\n");
headers.push("Host: "+this.server+":"+this.port+"\r\n");
headers.push("Origin: null\r\n");
headers.push("Sec-WebSocket-Key: 6z4ezNfATjW5/FEMYpqRuw==\r\n");
headers.push("Sec-WebSocket-Version: 13\r\n\r\n\r\n");
this.socket.writeUTFBytes(headers.join(''));
this.socket.flush();
}
public function onTrueConnect():void {
ExternalInterface.call(this.handlers+".onConnect",this.movieName);
}
public function onClose(e:Event):void {
ExternalInterface.call(this.handlers+".onClose",this.movieName,'1');
}
public function onIOError(e:IOErrorEvent):void {
ExternalInterface.call(this.handlers+".onClose",this.movieName,'2');
}
public function onSecurityError(e:SecurityErrorEvent):void {
ExternalInterface.call(this.handlers+".onClose",this.movieName,'3');
}
public var step:String = "head";
public var position:Number = 0;
public function readOnData():void {
var tmpPos:Number = this.position;
this.socketBuffer.position = this.position;
//read 一个 0x81
if(this.socketBuffer.bytesAvailable>=1) {
var h:Number = this.socketBuffer.readUnsignedByte();
this.debug("头:"+h);
this.position += 1;
if(this.socketBuffer.bytesAvailable>=1) {
var len:Number = this.socketBuffer.readUnsignedByte();
this.debug("长度:"+len);
this.position += 1;
if(len<=125) {
if(this.socketBuffer.bytesAvailable>=len) {
this.onText(this.socketBuffer.readUTFBytes(len));
this.position += len;
this.readOnData();
} else {
this.position = tmpPos;
return;
}
} else if(len==126) {
if(this.socketBuffer.bytesAvailable>=2) {
var trueLen:Number = this.socketBuffer.readUnsignedShort();
if(this.socketBuffer.bytesAvailable>=trueLen) {
this.onText(this.socketBuffer.readUTFBytes(trueLen));
this.position += trueLen;
this.readOnData();
}
} else {
this.position = tmpPos;
return;
}
}
} else {
this.position = tmpPos;
return;
}
} else {
this.position = tmpPos;
return;
}
}
public function onText(text:String):void {
ExternalInterface.call(this.handlers+".onData",this.movieName,text);
}
public function writeBytes(bytes:ByteArray):void {
this.socketBuffer.position = this.socketBuffer.length;
this.socketBuffer.writeBytes(bytes,0,bytes.length);
this.debug("buffer数据:"+this.socketBuffer.length);
this.readOnData();
}
public var is_head:Boolean = true;
public var header:ByteArray = new ByteArray();
public var headers:Array = new Array();
public function onSocketData(e:Event):void {
var bytes:ByteArray = new ByteArray();
if(this.is_head) {
while(this.socket.bytesAvailable) {
var x:Number = this.socket.readUnsignedByte();
if(x==0x81) {
this.is_head = false;
bytes.writeByte(0x81);
this.debug(this.headers);
break;
} else {
this.header.writeByte(x);
if(x==10) {
this.header.position = 0;
this.headers.push(this.header.readUTFBytes(this.header.length));
if(this.header.length==2) {
this.onTrueConnect();
}
this.header = new ByteArray();
}
continue;
}
}
if(this.socket.bytesAvailable) {
this.socket.readBytes(bytes,1,this.socket.bytesAvailable);
}
} else {
this.socket.readBytes(bytes,0,this.socket.bytesAvailable);
}
bytes.position = 0;
this.writeBytes(bytes);
}
public function sendData(text:String):void {
var head:ByteArray = new ByteArray();
head.writeByte(0x81);
var body:ByteArray = new ByteArray();
body.writeUTFBytes(text);
var len:Number = body.length;
if(len<=125) {
head.writeByte(len);
} else if(len<65536){
head.writeByte(126);
head.writeShort(len);
} else {
head.writeByte(127);
head.writeUnsignedInt(len);
}
body.position = 0;
head.position = 0;
this.socket.writeBytes(head);
this.socket.writeBytes(body);
this.socket.flush();
}
public function debug(str:*):void {
if(this.isDebug) {
ExternalInterface.call(this.handlers+".debug",this.movieName,str);
}
}
}
}
js代码如下
复制代码 代码如下:
var handlers = {
'connects':[],
'onClose':function(index,flag) {
this.connects[index.replace("socket_","")].onClose();
},
'onConnect':function(index) {
this.connects[index.replace("socket_","")].onConnect();
},
'onData':function(index,text) {
this.connects[index.replace("socket_","")].onData(text);
},
'debug':function(index,str) {
console.log(str);
}
};
function socket4ie() {
this.debug = 0;
this.init = function() {
this.index = handlers.connects.length;
handlers.connects.push(this);
}
this.connect = function(domain,port) {
this.createFlash(domain,port);
}
this.createFlash = function(domain,port) {
var html = '<object id="socket_'+this.index+'" type="application/x-shockwave-flash" data="websocket4ie.swf" width=0 height=0 class="swfupload">\
<param name="wmode" value="window">\
<param name="movie" value="websocket4ie.swf">\
<param name="quality" value="high">\
<param name="menu" value="false">\
<param name="allowScriptAccess" value="always">\
<param name="flashvars" value="movieName=socket_'+this.index+'&handlers=handlers&server='+domain+'&port='+port+'&debug='+this.debug+'"></object>';
var div = document.createElement('div');
div.id = "flash_"+this.index;
div.innerHTML = html;
document.body.appendChild(div);
}
this.onClose = function() {
}
this.onConnect = function() {
}
this.onData = function(text) {
}
this.init();
}
但是怎么办?
用flash封装吧
具体的flash代码如下:
复制代码 代码如下:
package {
import flash.display.Stage;
import flash.display.Sprite;
import flash.events.*;
import flash.external.ExternalInterface;
import flash.system.Security;
import flash.utils.Timer;
import flash.net.Socket;
import flash.utils.ByteArray;
import flash.utils.Endian;
public class websocket4ie extends Sprite {
public static function main():void
{
var websocket4ie:websocket4ie = new websocket4ie();
}
private var debugEnabled:Boolean;
private var movieName:String;
private var handlers:String;
private var server:String;
private var port:Number;
private var isDebug:Number;
private var socket:Socket;
private var socketBuffer:ByteArray = new ByteArray();
public function websocket4ie() {
Security.allowDomain("*");
var counter:Number = 0;
root.addEventListener(Event.ENTER_FRAME, function ():void { if (++counter > 100) counter = 0; });
this.movieName = root.loaderInfo.parameters.movieName;
this.handlers = root.loaderInfo.parameters.handlers;
this.server = root.loaderInfo.parameters.server;
this.port = root.loaderInfo.parameters.port;
this.isDebug = root.loaderInfo.parameters.debug;
this.debug(this.port+''+this.server);
try {
this.debugEnabled = root.loaderInfo.parameters.debugEnabled == "true" ? true : false;
} catch (ex:Object) {
this.debugEnabled = false;
}
this.connectServer();
ExternalInterface.addCallback("sendData", this.sendData);
}
public function connectServer():void {
socket = new Socket();
socket.endian = Endian.BIG_ENDIAN;
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
socket.connect(this.server, this.port);
this.socket = socket;
}
public function onConnect(e:Event):void {
//握手
var headers:Array = new Array();
headers.push("GET /chat HTTP/1.1\r\n");
headers.push("Upgrade: websocket\r\n");
headers.push("Connection: Upgrade\r\n");
headers.push("Host: "+this.server+":"+this.port+"\r\n");
headers.push("Origin: null\r\n");
headers.push("Sec-WebSocket-Key: 6z4ezNfATjW5/FEMYpqRuw==\r\n");
headers.push("Sec-WebSocket-Version: 13\r\n\r\n\r\n");
this.socket.writeUTFBytes(headers.join(''));
this.socket.flush();
}
public function onTrueConnect():void {
ExternalInterface.call(this.handlers+".onConnect",this.movieName);
}
public function onClose(e:Event):void {
ExternalInterface.call(this.handlers+".onClose",this.movieName,'1');
}
public function onIOError(e:IOErrorEvent):void {
ExternalInterface.call(this.handlers+".onClose",this.movieName,'2');
}
public function onSecurityError(e:SecurityErrorEvent):void {
ExternalInterface.call(this.handlers+".onClose",this.movieName,'3');
}
public var step:String = "head";
public var position:Number = 0;
public function readOnData():void {
var tmpPos:Number = this.position;
this.socketBuffer.position = this.position;
//read 一个 0x81
if(this.socketBuffer.bytesAvailable>=1) {
var h:Number = this.socketBuffer.readUnsignedByte();
this.debug("头:"+h);
this.position += 1;
if(this.socketBuffer.bytesAvailable>=1) {
var len:Number = this.socketBuffer.readUnsignedByte();
this.debug("长度:"+len);
this.position += 1;
if(len<=125) {
if(this.socketBuffer.bytesAvailable>=len) {
this.onText(this.socketBuffer.readUTFBytes(len));
this.position += len;
this.readOnData();
} else {
this.position = tmpPos;
return;
}
} else if(len==126) {
if(this.socketBuffer.bytesAvailable>=2) {
var trueLen:Number = this.socketBuffer.readUnsignedShort();
if(this.socketBuffer.bytesAvailable>=trueLen) {
this.onText(this.socketBuffer.readUTFBytes(trueLen));
this.position += trueLen;
this.readOnData();
}
} else {
this.position = tmpPos;
return;
}
}
} else {
this.position = tmpPos;
return;
}
} else {
this.position = tmpPos;
return;
}
}
public function onText(text:String):void {
ExternalInterface.call(this.handlers+".onData",this.movieName,text);
}
public function writeBytes(bytes:ByteArray):void {
this.socketBuffer.position = this.socketBuffer.length;
this.socketBuffer.writeBytes(bytes,0,bytes.length);
this.debug("buffer数据:"+this.socketBuffer.length);
this.readOnData();
}
public var is_head:Boolean = true;
public var header:ByteArray = new ByteArray();
public var headers:Array = new Array();
public function onSocketData(e:Event):void {
var bytes:ByteArray = new ByteArray();
if(this.is_head) {
while(this.socket.bytesAvailable) {
var x:Number = this.socket.readUnsignedByte();
if(x==0x81) {
this.is_head = false;
bytes.writeByte(0x81);
this.debug(this.headers);
break;
} else {
this.header.writeByte(x);
if(x==10) {
this.header.position = 0;
this.headers.push(this.header.readUTFBytes(this.header.length));
if(this.header.length==2) {
this.onTrueConnect();
}
this.header = new ByteArray();
}
continue;
}
}
if(this.socket.bytesAvailable) {
this.socket.readBytes(bytes,1,this.socket.bytesAvailable);
}
} else {
this.socket.readBytes(bytes,0,this.socket.bytesAvailable);
}
bytes.position = 0;
this.writeBytes(bytes);
}
public function sendData(text:String):void {
var head:ByteArray = new ByteArray();
head.writeByte(0x81);
var body:ByteArray = new ByteArray();
body.writeUTFBytes(text);
var len:Number = body.length;
if(len<=125) {
head.writeByte(len);
} else if(len<65536){
head.writeByte(126);
head.writeShort(len);
} else {
head.writeByte(127);
head.writeUnsignedInt(len);
}
body.position = 0;
head.position = 0;
this.socket.writeBytes(head);
this.socket.writeBytes(body);
this.socket.flush();
}
public function debug(str:*):void {
if(this.isDebug) {
ExternalInterface.call(this.handlers+".debug",this.movieName,str);
}
}
}
}
js代码如下
复制代码 代码如下:
var handlers = {
'connects':[],
'onClose':function(index,flag) {
this.connects[index.replace("socket_","")].onClose();
},
'onConnect':function(index) {
this.connects[index.replace("socket_","")].onConnect();
},
'onData':function(index,text) {
this.connects[index.replace("socket_","")].onData(text);
},
'debug':function(index,str) {
console.log(str);
}
};
function socket4ie() {
this.debug = 0;
this.init = function() {
this.index = handlers.connects.length;
handlers.connects.push(this);
}
this.connect = function(domain,port) {
this.createFlash(domain,port);
}
this.createFlash = function(domain,port) {
var html = '<object id="socket_'+this.index+'" type="application/x-shockwave-flash" data="websocket4ie.swf" width=0 height=0 class="swfupload">\
<param name="wmode" value="window">\
<param name="movie" value="websocket4ie.swf">\
<param name="quality" value="high">\
<param name="menu" value="false">\
<param name="allowScriptAccess" value="always">\
<param name="flashvars" value="movieName=socket_'+this.index+'&handlers=handlers&server='+domain+'&port='+port+'&debug='+this.debug+'"></object>';
var div = document.createElement('div');
div.id = "flash_"+this.index;
div.innerHTML = html;
document.body.appendChild(div);
}
this.onClose = function() {
}
this.onConnect = function() {
}
this.onData = function(text) {
}
this.init();
}
相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com
暂无让ie6也支持websocket采用flash封装实现的评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?