在实际问题中遇到在使用了iframe的情况下对前端路由的影响。应用的角度讲,这种方式不常用也不大会影响生活,不过浏览器如何处理这个情况确实是一个有意思的问题。遂做如下小实验:
┌─────────────────────────────────────────────────┐
│ Main window │
╞═════════════════════════════════════════════════╡
│ Keep changing iframe.src and print history │
│ +----------------------+ │
│ | | │
│ | | │
│ | iFrame | │
│ | (Print history) | │
│ | | │
│ | | │
│ +----------------------+ │
└─────────────────────────────────────────────────┘
由于安全策略的原因,history
的内容并不能直接被访问,只有一个length
属性可以看看stack的大小。所以这里所谓的print
也只是打印下length
和自己手动记录的src
值而已,除了响应操作之外并没有太多意义。
history
实例是不同的,实例下对应的model
是相同的(joint session history)划重点:
history
是所有fully active的Document
对象的所有browsing context的所有session history的合集。
简单说就是同一个session, 同一个history,甚至不同域也逃不掉(虽然依然收同源策略制约)。
history.length
看看就好没啥意义,不同浏览器初始值都不同,变化也各种没谱,还有个最大值50iframe.src
的变化会反映到history
中,同浏览器地址栏document
的路由基本不用考虑了,事件侦听和同步的成本比较大。