V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nikoo
V2EX  ›  问与答

两个 HTML 页面如何传输超过 255 字节的字串?

  •  
  •   nikoo · 2018-12-04 12:27:28 +08:00 · 1848 次点击
    这是一个创建于 2206 天前的主题,其中的信息可能已经有所发展或是发生改变。
    两个 HTML 分别为:
    http://a.com/send.html
    http://b.com/receive.html

    需求是在 send.html 中将超过 255 字节的字串例如"aaaaaa..." 发送至 receive.html
    用户首先打开 http://a.com/send.html 浏览器跳转并最终停留在 http://b.com/receive.html 并在该页面显示"aaaaaa..."

    最合理的方法是在 send.html 制作一个自动提交的 form 至 receive.html
    但是因为 receive.html 不支持服务器脚本,所以无法接收 POST 类型数据,同时 GET 类型考虑到浏览器兼容性,对于超过 255 字节的数据可能会有问题?

    求教各位有什么更为合理的实现方法,谢谢!
    16 条回复    2018-12-04 15:50:34 +08:00
    fe619742721
        1
    fe619742721  
       2018-12-04 12:34:26 +08:00 via iPhone   ❤️ 1
    window.name 试试。
    a 页面修改 window.name,同窗口跳转后继续读取 window.name
    fe619742721
        2
    fe619742721  
       2018-12-04 12:36:15 +08:00 via iPhone
    哈哈,这是之前一个朋友讨论不安全跨域方式的时候提到的,奇技淫巧,安全性很差
    loading
        3
    loading  
       2018-12-04 12:36:15 +08:00 via Android
    想了好几个,几乎都要用到 js,我看你这提问的描述,我还是不回答了。

    等你写清楚,还有你水平如何再回答吧。
    GDC
        4
    GDC  
       2018-12-04 12:41:21 +08:00 via iPhone   ❤️ 2
    你要兼容到多老的浏览器?阿里云的购物车页面把整个商品信息 get 请求到下一个页面,255 的限制是很老的浏览器了
    Tetsuchou
        5
    Tetsuchou  
       2018-12-04 12:56:36 +08:00 via iPhone
    压缩一下?
    qgy18
        6
    qgy18  
       2018-12-04 13:02:12 +08:00 via iPhone
    最古老的 IE 允许的 URL 长度难道不是 2083 字节么?
    nikoo
        7
    nikoo  
    OP
       2018-12-04 13:02:18 +08:00
    @loading 谢谢,当然可以使用 JS,receive.html 只是不支持服务端脚本,如 PHP 之类
    nikoo
        8
    nikoo  
    OP
       2018-12-04 13:03:59 +08:00
    @GDC 谢谢,很有收获,所以说 255 字节的 URL 限制目前做前端开发并不需要考虑是吗?
    loading
        9
    loading  
       2018-12-04 13:06:32 +08:00 via Android   ❤️ 1
    简单就是用 js,然后跳 receive.html#aaaaaa

    如果长度不够,能利用第三方短链接服务。
    新浏览器长度已经不是 255 了。
    nikoo
        10
    nikoo  
    OP
       2018-12-04 13:08:24 +08:00
    @fe619742721 测试可行,,,这个操作真的非常秀!用在生产环境会有什么毛病吗?
    nikoo
        11
    nikoo  
    OP
       2018-12-04 13:10:54 +08:00
    @loading 谢谢,若用 js 最终还是 URL 参数跳转那和 form get 没什么区别吧?
    wuhaoworld
        12
    wuhaoworld  
       2018-12-04 13:11:56 +08:00   ❤️ 1
    GDC
        13
    GDC  
       2018-12-04 13:30:45 +08:00 via iPhone   ❤️ 1
    @nikoo

    用 hash 并不会把 # 后面的内容传给后端,而且 js 并没有原生获取 get 参数的方法,只能对整个 url 做解析。

    总的来说你这个情况,最简单的方法就是把要传给的内容放在一个 json 对象中,转成字符串,再 base64 解决一下字符问题,然后一起放在 # 后面给下一个页面。
    GDC
        14
    GDC  
       2018-12-04 13:38:33 +08:00   ❤️ 1
    @nikoo 或者如果你只有一个参数要传递、而且只是文字内容,就直接用 btoa() 函数套个 base64 传给下一页。后面的页面用 window.location.hash 就能读取到 # 后面的内容,用 atob() 解析一下 base64 就好啦
    DOLLOR
        15
    DOLLOR  
       2018-12-04 15:47:05 +08:00
    sessionStorage
    localStorage
    cookie
    DOLLOR
        16
    DOLLOR  
       2018-12-04 15:50:34 +08:00 via Android
    没看清楚,要跨域的话,可能要用 HASH 更好了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3044 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:58 · PVG 21:58 · LAX 05:58 · JFK 08:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.