ie8不支持websocket,websocket兼容ie8的解决办法

websocket只支持ie10及以上版本,ie8和ie9都不支持websocket
如果想让ie8也支持websocket,我们需要引入web_socket.js

下载地址:https://github.com/gimite/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>

因为web-socket-js是基于flash的,所以必须要求要求IE8,IE9必须是FlashPlayer10或者更新的版本。

如何检测用户ie浏览器是否安装了flash并且flash版本大于10,可以看一下这篇文章

js判断浏览器是否安装了flash,以及检测flash版本的方法

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();
}

3.在服务器cli环境下运行flash.php

php flash.php start -d

这样就设置好了。

ie8就可以支持websocket了,这就是websocket兼容ie8的解决办法。实测有效,但是必须满足这三个条件:引入那三个文件、flashplayer的版本必须至少是10或以上版本、服务器必须设置flash安全策略。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: