Vue.js SSR和Mobile Safari:过于智能的软件带来的明显问题

前几天,我遇到了这样的问题。 服务器端生成的代码拒绝在Safari中合并。
水化是指客户端过程,在此过程中,Vue会获取服务器发送的静态HTML,并将其转换为可以响应客户端数据更改的动态DOM。 更多细节在这里
“产品”刚刚掉下,开发版本报告说dom中存在差异。 而且由于开发版本在尝试进行水合作用时不会崩溃,而只是在控制台中报告,因此错误并不明显,虽然我们发现了很长时间,但还是过去了。
Vue的一个非常有趣的策略是等待生产并停在那里!
一千五百个复杂程度不同的组件并没有简化任务。 结果,我设法看到了问题,找到了合适的设备,并通过开发者控制台结识了朋友。

结果,当连接页脚组件时,我们的应用程序崩溃了。 当他们找到正确的线时,他们根本不相信自己的眼睛。 期望除了此以外的任何东西。

原来,当您删除电话号码时,水合作用没有问题。 当他们开始挖掘时,发现Safari在接收html布局后,在电话旁边替换了一个标签,实际上造成了拨号程序。

自然,当开始水合作用时,来自服务器的页面域和新建的虚拟域不匹配。 该应用程序崩溃而没有宣战。

这个问题也出乎意料地解决了。 到目前为止,我们以通常的方式插入了电话:

<div>8 (800) 111 2 333</div> 

解决方案是使用v文本绑定:

 <div v-text=”8 (800) 111 2 333”></div> 

我对此有一个理论。 如果有人可以确认或反驳(建议提出一项新建议),我将不胜感激。 据我了解,在Safari收到文档后,Vue构建了一个虚拟dom并将其与本文档进行比较,并在对文档进行水化处理时,Safari进行了黑暗工作并将手机更改为链接。 当涉及到此字段时,带有v-text的Vue再次将div的内容替换为所需的内容。 结果,在比较时,各支点重合,飞行正常。

Source: https://habr.com/ru/post/zh-CN430618/


All Articles