ie9 ie8 WebSocket支持方案有哪些简单可行的?

阅读 12.2k
5 个回答

测试下来,web-socket-js简直可以兼容到底了。因为web-socket-js是基于flash的,所以必须要求要求IE8, IE9必须是Flash Player 10 或者更新的版本。

web-socket-js是基于flash的技术,只需要引入两个js文件和一个swf文件,就可以让浏览器用于几乎原生的WebSocket接口。另外,web-socket-js还是需要在ws服务端843端口做一个flash安全策略文件的服务。

我自己曾经基于stompjs和web-socket-js,做WebSocket兼容到IE5 怪异模式, 当然了stompjs在低版本的IE上有兼容性问题, 而且stompjs已经不再维护了,你可以使用我fork的一个版本,地址是:https://github.com/wangduandu...

主要是老版本IE在正则表达式行为方面有点异常。


      // fix ie8, ie9, RegExp not normal problem
      // in chrome the frames length will be 2, but in ie8, ie9, it well be 1
      // by wdd 20180321
      if (frames.length === 1) {
        frames.push('')
      }

web-socket-js用法示例

  • websocket服务器的843端口还需要部署一个flash的安全策略文件服务
  • 拷贝swfobject.js, web_socket.js, WebSocketMain.swf 到响应的目录下
  • 编写代码如下
<!-- Import JavaScript Libraries. -->
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript" src="web_socket.js"></script>

<script type="text/javascript">
  
  // Let the library know where WebSocketMain.swf is:
  WEB_SOCKET_SWF_LOCATION = "WebSocketMain.swf";
  
  // Write your code in the same way as for native WebSocket:
  var ws = new WebSocket("ws://example.com:10081/");
  ws.onopen = function() {
    ws.send("Hello");  // Sends a message.
  };
  ws.onmessage = function(e) {
    // Receives a message.
    alert(e.data);
  };
  ws.onclose = function() {
    alert("closed");
  };
  
</script>

如果你的WebSocket总是断开,可以参考: https://wdd.js.org/websocket-...

新手上路,请多包涵

楼主这三种方案可都测试通过,我测试的web-socket-js在IE8模式下不支持,找问题找疯了。在github上也没有发现解决方法,

新手上路,请多包涵

请问sockjs支持IE9吗?

新手上路,请多包涵

很多低版本的浏览器对 websocket 的支持不是很好,这时候就需要做下向下的兼容,一般是混合采用 websocket+polling 这些来做,还是有些麻烦的。在正式项目中可以考虑采用第三方推送框架比如 GoEasy,这些兼容都是做好了的,也支持 wss 、心跳、重连机制,地址: https://www.goeasy.io/

宣传栏