zoukankan      html  css  js  c++  java
  • window.name web开发iframe 跨域间的值传输问题

    为了让 Web 服务器实现 window.name,服务器应该只寻找请求中是否包含 windowname 参数。如果包含了 windowname 参数,服务器应该返回一个设置了 window.name 字符串值的 HTML 文档,回应此请求并传送到客户端。例如:
    http://www.planabc.net/getdata.html?windowname=true

    如果服务器想用 Hello 响应客服端,它应该返回一个 HTML 页面:

    <html>
       
    <script type="text/javascript">
            window
    .name="Hello";
       
    </script>
    </html>

    同样也可以转换为 JSON 数据:

    <html>
       
    <script type="text/javascript">
            window
    .name='{"foo":"bar"}';
       
    </script>
    </html>

    如果你手动创建资源,书写大量的多行的 JSON 对象为一个引用的字符串应该是比较困难的并且易于出错的。可以使用这样的 HTML 样例简单的创建 JSON 数据,将会转换为一个 JSON 字符串而无需手动转义 JSON 为字符串:

    <html>
       
    <script type="\'text/javascript\'">
            window
    .name = document.getElementsByTagName("script")[0].innerHTML.match(/temp\s*=([\w\W]*)/)[1];
            temp
    = {
                foo
    :"bar", // put json data here
                baz
    :"foo"
           
    }
       
    </script>
    </html>

    同样的,如果你想传递 HTML/XML 数据,这里有一个样例实现,而无需手动将这些数据转换成字符串:

    <html>
       
    <body>
           
    <p id="content">
                some
    <strong>html/xml-style</strong>data
           
    </p>
       
    </body>
       
    <script type="text/javascript">
            window
    .name = document.getElementById("content").innerHTML;
       
    </script>
    </html>

    window.name 传输技术相比其他的跨域传输的一些优势:

    1. 它是安全的。也就是说,它和其他的基于安全传输的 frame 一样安全,例如 Fragment Identifier messaging (FIM)和 Subspace。(I)Frames 也有他们自己的安全问题,由于 frame 可以改变其他 frame 的 location,但是这个是非常不同的安全溢出,通常不太严重。
    2. 它比 FIM 更快,因为它不用处理小数据包大小的 Fragment Identifier ,并且它不会有更多的 IE 上的“机关枪”声音效果。它也比 Subspace 快,Subspace 需要加载两个 Iframe 和两个本地的 HTML 文件来处理一个请求。window.name 仅需要一个 Iframe 和一个本地文件。
    3. 它比 FIM 和 Subspace 更简单和安全。FIM 稍微复杂,而 Subspace 非常复杂。Subspace 也有一些额外的限制和安装要求,如预先声明所有的目标主机和拥有针对若干不同特殊主机的 DNS 入口。window.name 非常简单和容易使用。
    4. 它不需要任何插件(比如 Flash)或者替代技术(例如 Java)。
  • 相关阅读:
    [转]char、varchar、nchar、nvarchar的区别
    【转】Asp.net 2.0中页的生存周期(Lifecycle)和动态控件 [.Net]
    git免登录sshkey
    ios8,xcode6 周边
    iOS 推送证书
    Lazarus中TreeView导出XML以及XML导入TreeView
    flac文件提取专辑封面手记
    Lazarus解决含中文文件名或路径的使用问题
    使用PowerShell管理Windows8应用
    thbgm拆包【in progress】
  • 原文地址:https://www.cnblogs.com/wei2yi/p/1998407.html
Copyright © 2011-2022 走看看