美文网首页
新版Chrome(117), form target行为不一致问

新版Chrome(117), form target行为不一致问

作者: Demonskp | 来源:发表于2023-09-18 17:35 被阅读0次

    解析错误

    线上发版一个旧项目后发现在导入文件时,出现json解析错误。


    错误信息

    排查过程

    当前情况:

    1、在我自己电脑上无法相同操作无法复现。
    2、接口返回是完全正常的json,并不存在 < 号。
    

    经过排查发现此处发起请求的方式是通过form表单的target属性去指定iframe,将action请求结果填充在iframe里,再去读取iframe里的body。
    (ps: 好古老的请求方式)

    那么很明显,解析到的<号明显是html的标签混进来了。debug后证实了我这个猜想。

    为什么我本地无法复现

    版本问题

    一开始其实怀疑过是不是因为升级了117版本,禁用了第三方cookie导致的。但是接口完全正常所以就没有问题。通过对比不同浏览器时,发现在117版本,相比其他版本和其他浏览器,form表单提交后填充到iframe中会多一个div标签,同时填充的pre标签没有了style。

    117版本生成 其他浏览器和其他版本

    因此我本地依然是116版本的Chrome浏览器所以无法复现这个问题。升级了浏览器后成功复现,验证了这个说法。

    原理分析

    首先不得不吐槽这种请求方式太奇葩了。但是作为前端工程师确实需要多关注主要浏览器升级的消息,否则也不会这么快的定位到是版本原因。

    另一个细节是:

    接口返回(contentType: application/json):
    返回的body会用标签包裹起来再放到iframe当中(这也很正常,因为对于浏览器你发送的是格式化的数据)。
    
    接口返回(contentType: text/html):
    返回的body会直接放置在body标签中。
    
    接口返回text时填充的内容

    而这一次直接多出来了div标签则是,Chrome提供出来的美化你输出的json的按钮。

    117版本json美化

    总结

    1. 首先不应该使用这种请求的方式,有更适合的方式(ps: 这段代码可能已经非常久远了)
    2. 多关注浏览器和规范相关的更新内容。

    相关文章

      网友评论

          本文标题:新版Chrome(117), form target行为不一致问

          本文链接:https://www.haomeiwen.com/subject/qzvgvdtx.html