美文网首页基础前端
localStorage 如何跨域通信?

localStorage 如何跨域通信?

作者: CondorHero | 来源:发表于2020-04-19 01:30 被阅读0次

cookie 跨域主要记住一个单词,如下:


科瑞但寿司

看看 localStorage 如何跨域通信?

因为要跨域所以我们需要两台服务器,就直接使用 NodeJs 来调试了其中一个服务器代码如下:

const http = require("http");
const { readFile } = require("fs");



const server = http.createServer(async (req,res) => {
    console.log(req.url);
    if(req.url === "/index"){
        const result = await new Promise((resolve,reject)=>{
            readFile("./index.html",(err,res)=>{
                resolve(res.toString());
            }); 
        })
        res.end(result);
    }else{
        res.end("err");
    }
})


server.listen(3000,function(){
    console.log("服务器成功启动!");
});

现在为了跨域在重新启动一个服务器,只需要端口号不同就行了。代码如下:

const http = require("http");
const { readFile } = require("fs");



const server = http.createServer(async (req,res) => {
    console.log(req.url);
    if(req.url === "/search"){
        const result = await new Promise((resolve,reject)=>{
            readFile("./search.html",(err,res)=>{
                resolve(res.toString());
            }); 
        })
        res.end(result);
    }else{
        res.end("err");
    }
})


server.listen(8888,function(){
    console.log("服务器成功启动!");
});

好了,我们已经启动两个服务器了,现在开始了解下 localStorage 跨域请求的步骤。

  1. 在 index 使用 iframe 页面嵌入 search 页面
  2. 使用 postMessage 来进行跨页面通信
  3. 在 search 页面添加 message 事件进行监听 postMessage 发送过来的信息

页面通信详细版:

两个文档如何通信?通过 postMessage 发送 onmessage 来接收。

postMessage和onmessage

现在看看 index.html 文件的内容:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>

<body>
    <h1>index</h1>
    <button onclick="GetState()">点击</button>
    <br />
    <!-- iframe嵌入网页 -->
    <iframe src="http://127.0.0.1:8888/search" id="myFrame" width="600" height="400px"></iframe>
    <script>
        localStorage.setItem("pageName","index");
        function GetState () {
            var frame = document.getElementById ("myFrame");
            // send the 'getstate' message to the frame window
            // 要发送的消息
            var message = "getstate";
            // postMessage发送消息
            if (frame.contentWindow.postMessage) {
                frame.contentWindow.postMessage (message, "http://127.0.0.1:8888/search");
            }else {
                alert ("Your browser does not support the postMessage method!");
            }
        }

        // 接受返回消息
        Init();
        function Init () {
            if (window.addEventListener) {  // all browsers except IE before version 9
                window.addEventListener ("message", OnMessage, false);
            }
            else {
                if (window.attachEvent) {   // IE before version 9
                    window.attachEvent("onmessage", OnMessage);
                }
            }
        };

        function OnMessage (event) {
            var message = event.data;
            // 发送回来的消息
            console.log(message);
        };
    </script>
</body>

</html>

search.index 文件的内容为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>search</title>
</head>
<body>
    <h1>search</h1>
    <script>
        localStorage.setItem("pageName","search");

        window.addEventListener('message',function(event) {
            // 指定接受固定网页内容
            if(event.origin !== 'http://127.0.0.1:3000')return;
            console.log('message received:  ' + event.data);
            // 往原网页发送返回消息
            event.source.postMessage('我是发送回去的内容',event.origin);
        },false);
    </script>
</body>
</html>

当点击按钮,控制台打印出:

message received:  getstate
我是发送回去的内容

完,哈哈哈😄

2020年4月14日01点10分

相关文章

  • localStorage 如何跨域通信?

    cookie 跨域主要记住一个单词,如下: 看看 localStorage 如何跨域通信? 因为要跨域所以我们需要...

  • localstorage跨域&&跨浏览器

    localstorage无法跨域(同源策略的限制),无法跨浏览器; localstorage可通过storage ...

  • FE-interview-Q&A

    浏览器标签页通信 WebSocket (可跨域) postMessage(可跨域)iframe 父子通信np = ...

  • 通信类

    什么是同源策略及限制? —> 前后端如何通信? —> 如何创建Ajax? —> 跨域通信的几种方式? 一、什么是同...

  • 知识点---不定时更新

    cookie\session\localstorage跨域webpack手写ajax手写bind排序算法css常用...

  • 跨域问题以及解决

    一、什么是跨域问题? 1.1、什么是跨域? 均一样的情况下,才允许访问相同的cookie、localStorage...

  • postMessage 相关漏洞分析与分享

    前言 postMessage API 是在 HTML5 中引入的通信方法,可以在标签中实现跨域通信。 跨域嘛,大家...

  • 3-13 通信类

    tip:代码要多敲,不然很容易忘记 什么是同源策略以及限制 前后端如何通信 如何创建Ajax 跨域通信的几种方式 ...

  • 跨域通信

    一、跨域and同源政策 1.跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对ja...

  • 跨域通信

    阮一峰同源策略浏览器处于安全考虑实行了同源策略机制。同源指的是 协议相同 域名相同 端口相同 举例来说,http:...

网友评论

    本文标题:localStorage 如何跨域通信?

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