如何实现同一浏览器多个标签页之间的通信(二)——cookie+setInterval

news/2024/5/18 13:28:49 标签: js, 客户端存储, cookie, 多页面通信

二、cookie
(1)cookie是什么?
HTTP Cookie,通常直接叫做cookie,最初是在客户端用于存储回话信息的。该标准要求服务器对任意HTTP请求发送Set-Cookie HTTP头作为响应的一部分,其中包含回话信息。浏览器会存储这样的回话信息,并在这之后,通过每个请求添加Cookie HTTP头将信息发回服务器。
(2)cookie怎么用?
在JavaScript中,cookie的接口即document.cookie不太友好,可以自己封装相应的接口。
基本cookie操作:读取、写入、删除

js javascript">js-comment">//代码来源于JavaScript高级程序设计
js-keyword">var CookieUtil={
            get:js-function">js-keyword">functionjs-params">(name){
                js-keyword">var cookieName=js-built_in">encodeURIComponent(name)+js-string">"=",
                    cookieStart=document.cookie.indexOf(cookieName),
                    cookieValue=js-literal">null;
                js-keyword">if(cookieStart>-js-number">1){
                    js-keyword">var cookieEnd=document.cookie.indexOf(js-string">";",cookieStart);
                    js-keyword">if(cookieEnd==-js-number">1){
                        cookieEnd=document.cookie.length;
                    }
                    cookieValue=js-built_in">decodeURIComponent(document.cookie.substring(cookieStart+cookieName.length,cookieEnd));
                }
                js-keyword">return cookieValue;
            },
            set:js-function">js-keyword">functionjs-params">(name,value,expires,path,domain,secure){js-comment">//cookie的构成:名称、值、失效时间(何时应停止向浏览器发送cookie)、路径(向服务器发送cookie的特定域的路径)、域(cookie对于哪个域是有效的)、安全标志(指定后只能在使用SSL连接时才发送到服务器)
                js-keyword">var cookieText=js-built_in">encodeURIComponent(name) + js-string">"=" +js-built_in">encodeURIComponent(value);
                js-keyword">if(expires js-keyword">instanceof js-built_in">Date){
                    cookieText += js-string">"; expires="+expires.toGMTString();js-comment">//时间为GMT格式,注意信息之间用“; ”分割
                }
                js-keyword">if(path){
                    cookieText += js-string">"; path="+path;
                }
                js-keyword">if(domain){
                    cookieText += js-string">"; domain="+domain;
                }
                js-keyword">if(secure){
                    cookieText += js-string">"; secure";
                }

                document.cookie = cookieText;
            },
            unset:js-function">js-keyword">functionjs-params">(name,path,domain,secure){js-comment">//没有直接删除cookie的方法
                js-keyword">this.set(name,js-string">"",js-keyword">new js-built_in">Date(js-number">0),path,domain,secure);js-comment">//使用相同路径、域、安全选项再次设置cookie,并将失效时间设置为过去的时间
            }
        };

使用:

js cs">        js-comment">//设置cookie
        CookieUtil.js-keyword">set(js-string">"name",js-string">'lwf');
        CookieUtil.js-keyword">set(js-string">"age",js-number">21);

        js-comment">// 读取cookie
        console.log(CookieUtil.js-keyword">get(js-string">"name"));
        console.log(CookieUtil.js-keyword">get(js-string">"age"));

        js-comment">// 删除cookie
        CookieUtil.unset(js-string">"name");
        CookieUtil.unset(js-string">"age");

(3)怎么使用cookie实现多标签之间的通信?
index.html

js xml"> js-tag"><js-title">input js-attribute">type=js-value">"text">
 js-tag"><js-title">button js-attribute">id=js-value">"btn">Clickjs-tag"></js-title">button>
    js-tag"><js-title">script>
        window.onload=js-function">js-keyword">functionjs-params">(){
            js-keyword">var oBtn=document.getElementById(js-string">"btn");
            js-keyword">var oInput=document.getElementsByTagName(js-string">"input")[js-number">0];
            oBtn.onclick=js-function">js-keyword">functionjs-params">(){
                js-keyword">var val=oInput.value;
               CookieUtil.set(js-string">"name",val);
               console.log(CookieUtil.get(js-string">"name"));
            } 
            js-keyword">var cookieUtil={js-comment">//...}
        }
    <script>

test.html

js javascript">window.onload=js-function">js-keyword">functionjs-params">(){
            js-keyword">var  getCookie  = js-function">js-keyword">functionjs-params">( keyName){
                js-keyword">var items = [] , json = {};
                js-keyword">var cookie = document.cookie;
                js-keyword">if( cookie.length > js-number">0 ){
                    items = cookie.split(js-string">';');
                    js-keyword">for(js-keyword">var i = js-number">0;i < items.length;i++){
                        json[items[i].split(js-string">'=')[js-number">0]] = items[i].split(js-string">'=')[js-number">1] ;
                    }
                    js-keyword">return js-built_in">unescape(json[keyName]);    
                }js-keyword">else{
                    js-keyword">return js-string">'';
                }
            }

            setInterval(js-function">js-keyword">functionjs-params">(){    
                console.log(js-string">"name=" + getCookie(js-string">"name"));    
            }, js-number">10000);    
        };  

效果:
这里写图片描述
4、cookie能实现同一浏览器多个标签页之间通信的原理
cookiepath:一个页面产生的cookie只能被与这个页面的同一目录或者其他子目录下的页面访问。因此,通常把cookie的path设置为一个更高级别的目录,从而使更多的页面共享cookie,实现多页面之间相互通信。
补充:
pathcookie所在的目录,默认为/,即根目录, 通常用来解决同域下cookie的访问问题
domaincookie所在的域,默认为请求的地址,通过设置document.domain可以实现跨域访问
其他解决方案:如何实现同一浏览器多个标签页之间的通信(一)——localStorage


http://www.niftyadmin.cn/n/764376.html

相关文章

Cdn英文的读音音标_THE的两种读音

THE的两种读音微信订阅号又㕛叒叕改版啦&#xff0c; 若想迅速发现并阅读小白的推送内容&#xff0c;请动手设置“星标”吧。① 点击上方 “英文小白”② 点击右上角“...” ③ 点选“设为星标 ★ ”在英文中&#xff0c;冠词有3个&#xff1a;a、an与the。a、an为不定冠词&…

图片数据提取_技能篇学习笔记之自制矢量数据

又过了好久没来更了。恰好前几天同学提到了如何用三调中的道路面要素提取中心线的问题(之前这部分我是在GIS中利用ArcScan直接提取道路中心线&#xff0c;效果还可以)。很尬的是&#xff0c;当时没想起操作&#xff0c;后来百度了一番&#xff1a;其原理就是将二值化的栅格图作…

webpack,extract-text-webpack-plugin报错:Use Chunks.groupsIterable and filter by instanceof EntryPoint

一、extrack-tex-webpack-plugin作用&#xff1a; 为了抽离css样式,防止将样式打包在js中引起页面样式加载错乱的现象 二、使用 1、 npm install --save-dev extract-webpack-plugin 2、webpack.production.config.js中 const webpackrequire("webpack"); //..…

网络新闻写作_网文写作:如何处理小说素材「盘点」

同志们小可爱们&#xff0c;瓜瓜小课堂来啦~今日话题&#xff1a;如何处理素材我们都知道&#xff0c;光凭想象以及个人经验来写小说&#xff0c;写着写着就常有不知该写什么的卡文情况。解决这种情况的一个有效方法就是&#xff0c;平时积累素材。今天&#xff0c;瓜瓜就以下三…

React调试工具:react-devtools

<!DOCTYPE html> <html><head<script src"../build/react.js"></script><!--react核心库--><script src"../build/react-dom.js"></script><!--提供与DOM相关的功能--><script src"../build/b…

可以嵌入ppt的课堂点名器_一张图片可以怎么玩出精彩

上一期我们给大家介绍了如何将枯燥的文字和版面进行转换&#xff0c;这一节再给大家分享一下如何将一张孤独的图片在PPT中进行高大上的设置。具体操作步骤首先&#xff0c;找来系统自带的一张图片&#xff0c;直接插入到PPT之中&#xff0c;这个貌似是朵菊花.....然后利用插入菜…

react+webpack项目基本配置

1、npm-init 生成package.json文件 2、安装项目依赖 npm intsall --save-dev react react-dom webpack webpack-clinpm install --save-dev webpack-dev-servernpm install --save-dev babel-core babel-loader babel-preset-env babel-preset-reactnpm install --save-dev c…

ue4 classuobject没有成员beginplay_UE4渲染框架解析之InitViews上篇

之前的2篇介绍UE4渲染框架文章主要介绍了UE4中主线程和渲染线程的同步以及主线程中的数据如何同步到渲染线程&#xff0c;在UE4中为了避免主线程与渲染线程的race condition&#xff0c;会为渲染线程准备一份数据&#xff0c;比如Mage Anti&#xff1a;UE4渲染框架解析之数据更…