摘要:摘要以下总结的跨文档通信方法,均是在服务器不参与的情况下服务端无需特殊的代码实现的这里的通信,是指页面向页面传递信息大致分为以下三类通过实现双向通信通过客户端存储实现通信在页面跳转的过程中携带信息中其中第一种方法没有跨域的限制,且实现的是双
摘要
以下总结的跨文档通信方法,均是在服务器不参与的情况下(服务端无需特殊的代码)实现的
这里的通信,是指页面A向页面B传递信息
大致分为以下三类
通过 window.postMessage 实现双向通信
通过客户端存储实现通信
cookie
webStorage
indexedDB
在页面跳转的过程中携带信息
window.name
Url 中 hash
window.history.replace() && document.referrer
其中第一种方法没有跨域的限制,且实现的是双向通信;第二种方法本质上利用的是同源文档可以访问同一块数据实现通信;第三种方法只能实现定向的单次的通信,且没有跨域的限制
通过 window.postMessage 实现通信 搭建服务端const http = require("http") const fs = require("fs") http.createServer((req, res) => { fs.readFile(`.${req.url}`, (err, data) => res.end(data)) }).listen(8888)编写文档 index1.html
... index1 ...编写文档 index2.html
... index2 ...
以上代码实现了通过 index1.html,新建窗口 index2.html
index1.html 向 index2.html 发送消息 messageFromIndex1
index2.html 收到来自 index1.html 的消息,并返回消息 meesageFromIndex2
index1.html 和 index2.html 互相传递消息的过程并不需要服务端参与
测试过程启动服务器 node server.js
访问 http://localhost:8888/index1.html
先后点击 new Window 和 send Message,可以看到在 index1.html 和 index2.html 的控制台中分别出现了 messageFromIndex2 和 messageFromIndex1
补充通过 postMessage 可以实现跨域的信息传递,因此也要注意传递信息的过程中要检查信息的安全性
通过客户端存储手段实现通信将需要传递的信息保存在客户端中,只有同源的文档才能访问,具体的实现方式有
cookie
webStorage
IndexedDB
通过设置 cookie 进行通信当服务端没有设置 cookie 为 HttpOnly 时,可以在浏览器端设置和访问 cookie,而 cookie 本质上是服务器发送到用户浏览器并保存在浏览器上的一块数据,同源的文档可以访问 cookie
修改 index1.html
... index1 ...
修改 index2.html
... index2 ...
可以看到在 index2.html 的控制台中打印出了信息 "name=test"
通过 cookie 进行跨文档通信,就像同源文档访问同一个对象
通过 webStorage 进行通信webStorage 就像一个数据库,同源的文档访问同一个子数据库
具体操作方法如下
window.localStorage.setItem(key, value)
window.localStorage.getItem(key)
通过 indexedDB 进行通信indexedDB 就是一个数据库
修改 index1.html
... index1 index2.html ...
修改 index2.html
... index2 ...
如此实现在 index1.html 中修改 indexedDB 中存储的数据时,index2.html 中也可以访问到,以此来间接实现通信
indexedDB中文入门教程详解
页面跳转的过程中携带信息以下这些方法都没有域的限制,但对跳转到新页面的方式有限制
通过 window.name 进行通信设置 window.name = message
当通过 window.location.href 或 index2.html 在当前窗口载入新页面时,window.name 仍保存着上个页面所设置的信息
修改 index1.html
... index1 index2.html ...
修改 index2.html
... index2 ...
会在控制台输出 messageFromIndex1
通过在 url 中添加 hash 字段修改目标文档的 url,将想要传递的信息保存在 url 的 hash 字段中
通过 window.history.replace() 和 document.referrer设置 window.history.replaceState(window.history,state, document.title, "message")
从该页面到新页面后,通过 document.referrer 就可以看到来自上个页面的信息
修改 index1.html
... index1 index2.html ...
修改 index2.html
... index2 ...
会在控制台输出 http://localhost:8888/messageFromIndex1
这里利用的是 window.history.replaceState() 修改 url,并不会使页面重新加载,所以将信息存在 url 中
document.referrer 会保存返回跳转或打开到当前页面的那个页面的 url
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/92932.html
摘要:注为顶级域名,为二级域名,为三级域名跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但返回结果被浏览器拦截了。四总结首先在客户端注册一个,然后把的名字传给服务器。 前言 博主博客:Stillwater的博客知乎专栏:前端汪汪本文为作者原创转载请注明出处:http://hiztx.top/2017/01/15/j... 本文介绍了什么是跨域,为什么要跨域,以及跨域的一种...
摘要:共享内存是最快的方式,它是针对其他进程间通信方式运行效率低而专门设计的。套接字套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。来自的解释九什么受同源策略的限制,支持跨域一种新的通信协议标准。 第一次大公司面试的面经 此次面试说来也有点匆忙,本没想过自己会那么快就想去面试大公司,并且把自己第一次面大公司的各种不足展现得一览无余。当时11月20号左右身边...
阅读 3123·2021-11-22 15:25
阅读 3781·2021-11-17 09:33
阅读 3331·2021-11-08 13:15
阅读 3022·2021-09-22 10:56
阅读 515·2021-08-31 09:45
阅读 2725·2019-08-30 13:49
阅读 3054·2019-08-30 12:52
阅读 1123·2019-08-29 17:05