websocket只支持ie10及以上版本,ie8和ie9都不支持websocket
如果想让ie8也支持websocket,我们需要引入web_socket.js
下载后,我们需要用到其中三个文件:swfobject.js、web_socket.js、WebSocketMain.swf,将这三个文件上传到我们自己服务器上。
使用websocket之前,先引入这几个文件。
使用案例如下:
<script type="text/javascript" src="/static/swfobject.js"></script>
<script type="text/javascript" src="/static/web_socket.js"></script>
<script>
WEB_SOCKET_SWF_LOCATION = "/static/WebSocketMain.swf";
var ws = new WebSocket('ws://149.248.8.37:9999');
ws.onopen = function(){
alert('连接成功');
};
ws.onmessage = function(e){
console.log(e.data);
};
ws.onclose = function() {
alert("连接关闭");
};
</script>
<script type="text/javascript" src="/static/web_socket.js"></script>
<script>
WEB_SOCKET_SWF_LOCATION = "/static/WebSocketMain.swf";
var ws = new WebSocket('ws://149.248.8.37:9999');
ws.onopen = function(){
alert('连接成功');
};
ws.onmessage = function(e){
console.log(e.data);
};
ws.onclose = function() {
alert("连接关闭");
};
</script>
因为web-socket-js是基于flash的,所以必须要求要求IE8,IE9必须是FlashPlayer10或者更新的版本。
如何检测用户ie浏览器是否安装了flash并且flash版本大于10,可以看一下这篇文章
FlashPlayer可以从官网下载
FlashPlayer下载地址:https://www.flash.cn/download
还需要在服务器843端口上做一个flash安全策略文件
我这里用的是workerman来做的flash安全策略,步骤如下:
1.首先安装workerman
composer require workerman/workerman
2.然后新建一个flash.php,代码如下:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$flash_policy = new Worker('tcp://0.0.0.0:843');
$flash_policy->onMessage = function($connection, $message)
{
$connection->send('<?xml version="1.0"?><cross-domain-policy><site-control permitted-cross-domain-policies="all"/><allow-access-from domain="*" to-ports="*"/></cross-domain-policy>'."\0");
};
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$flash_policy = new Worker('tcp://0.0.0.0:843');
$flash_policy->onMessage = function($connection, $message)
{
$connection->send('<?xml version="1.0"?><cross-domain-policy><site-control permitted-cross-domain-policies="all"/><allow-access-from domain="*" to-ports="*"/></cross-domain-policy>'."\0");
};
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
3.在服务器cli环境下运行flash.php
php flash.php start -d
这样就设置好了。
ie8就可以支持websocket了,这就是websocket兼容ie8的解决办法。实测有效,但是必须满足这三个条件:引入那三个文件、flashplayer的版本必须至少是10或以上版本、服务器必须设置flash安全策略。