zoukankan      html  css  js  c++  java
  • websocket通信 h5flash 兼容ie

    H5新功能websocket不用说了,现代浏览器都支持,拿起来就可以用。接下来主要分享下socket通信兼容ie:

    方案:flash socket;

    前段代码:https://github.com/gimite/web-socket-js;

    主要用到里面的3个文件:swfobject.js;web_socket.js;WebSocketMain.swf/WebSocketMainInsecure.swf;

    这个方案兼容了websocket和flash socket;

     如果您的html与*.swf不在同一个域,*.swf文件就要改用WebSocketMainInsecure.swf

    假如现在在ie8上运行:那么这个flash socket会做两件事情:

    1:请求 策略文件也就是crossdomain.xml。

    2:根据请求策略文件的结果决定是否发起socket链接请求。

    flash 有3中方法完成第一件事情:(1) 请求 加载******.swf的域的843端口(843是flash默认的),与843端口建立连接,发送字符串"<policy-file-request/>"到843端口,如果返回crossdomain.xml或者是xml的内容字符串,flash会检测你要发起的socket请求的域和端口是否在xml文件允许范围内,如果在。就断开当前与843端口的链接。发起你socket连接地址的请求(example.com:10081)。

    (2) 在****.swf内部写入加载策略文件的方法 Security.loadPolicyFile(“xmlsocket://www.xxx.com:1234”),flash就会按照这个路径加载策略文件,

    (3)flash到你要建立的socket链接的域和端口下加载策略文件,

    上面的3种方法,flash会依次尝试去做,如果哪一个成功加载了策略文件,后面的方法就不会使用了。接下来做第二件事情:

    根据返回的策略文件内容 和 接下来要发起的socket连接对比。

    检测域:example.com和端口:10081,是否在允许请求,如果允许flash会发起socket连接请求。不允许的话会报错。

    如果报错说,html的域要与***.swf的与一样的话就在 new socket('.....')之前加上这一句:WEB_SOCKET_SUPPRESS_CROSS_DOMAIN_SWF_ERROR = true;



     flash做的两件事情就是建立两个tcp连接,第一个加载策略文件的tcp,加载成功与否最后都会断开,第二个实现socket通信,两个tcp通信可以完全不相干,不在同一个域和端口下。

     
     
  • 相关阅读:
    "Automation 服务器不能创建对象" 的解决方法
    让DataGrid拥有单击回传事件并带回指定字段的值
    SQL 和TSQL学习(一)
    数据写入XML
    DATALIST分页存储过程
    The target assembly contains no service types. You may need to adjust the Code Access Security policy of this assembly." 目标程序集不包含服务类型。可能需要调整此程序集的代码访问
    字符串转日期
    C# 日期和时间正则表达式
    js根据输入日期显示该月的最后一天的日期[转]
    JavaScript试题【解析+答案】
  • 原文地址:https://www.cnblogs.com/websjs/p/7484724.html
Copyright © 2011-2022 走看看