首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

跨标签页通信的8种方式(上)

引言--跨标签页通信是指在浏览器中的不同标签页之间进行数据传递和通信的过程。在传统的Web开发中,每个标签页都是相互独立的,无法直接共享数据。...它们可以通过构造 BroadcastChannel 来简单地“订阅”特定频道,并在它们之间进行全双工(双向)通信。通过创建一个广播频道,并在不同的标签页中监听该频道,可以实现跨标签页通信。...localStorage 的数据可以长期保留;而当页面会话结束——也就是说,当页面被关闭时,存储在 sessionStorage 的数据会被清除。...通过创建一个广播频道,并在不同的标签页中监听该频道,可以实现跨标签页通信。Service Worker:Service Worker是一种在浏览器后台运行的脚本,可以拦截和处理网络请求。...监听适用于需要共享数据并及时获取更新的场景;window.open、window.postMessage适用于需要直接传递数据或消息的场景。

78730

新窗口创建问题 | Electron 安全

版 & Github 往期文章 0x01 哪些情况下会创建新窗口 在之前的章节中,我们尝试过使用 BrowserWindow、BaseWindow 在主进程中创建窗口,同时我们尝试过在渲染进程中通过...window.open 创建新的窗口 除此之外还有两个特例,就是 a 标签和form标签,当 a标签的 target 属性被设置为 _blank 时,点击标签会创建新窗口 当 form 标签渲染的表达被提交时...(这里主要是窗口加载的内容以及安全配置),可能带来一些危害 渲染进程创建新窗口在之前的文章中出现过绕过安全限制的情况(iframe + window.open) ,但 window.open 不仅仅是绕过安全限制那么简单...该属性指定在何处显示链接的 URL,作为浏览上下文的名称(标签、窗口或 iframe) 其实就是,我在当前页面点击了一个 a 标签,标签 href 指向的是百度的地址,你想在哪里看到点击后的结果,是当前页面呢...的文章中,在进行 Discord RCE 时,使用 window.open 绕过了沙箱,具体操作是 window.open 加载和 Discord 同源或者允许的网页地址,之后立即通过 .location

64510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    nodeIntegrationInSubFrames | Electron 安全

    我们只用到了一个窗口,我们一直称之为主窗口,但从逻辑角度来说,没有子窗口的存在,也就没有什么主窗口之说 大家有些时候在使用应用程序的时候,点击某个功能会跳出来一个新的窗口,这个就叫做子窗口 举个例子,我们在电脑版微信中查看公众号文章时...中的 Node.js 成功执行了,但是 iframe + window.open 打开的窗口执行的 Node.js 代码执行失败了 iframe + window.open 在 Electron 14.0...测试预加载脚本 官网还提到一个功能,就是 Preload 会被注入到每一个 iframe 我们在 Preload 中创建一个 变量/常量,让 iframe 中的脚本 alert 弹窗显示出来 preload.js...本身成功获取到了 Preload 中的内容, iframe + window.open 获取失败 iframe + window.open 在 Electron 14.0 之前版本是可以成功获取的 测试一下不同安全配置下...这听起来就很奇怪,我们测试一下就知道了 我们尝试创建子窗口,在主窗口中设置 nodeIntegrationInSubFrames: false ,并在子窗口设置渲染进程可以执行 Node.js ,咱们看看到底能不能执行

    32310

    Chrome下的打开新窗口

    一般点击打开新窗口,有几种方式: 1、超链接a  有href属性、target为_blank 2、iframe,其target为_blank 3、window.open 4、form表单提交,同样target也必须设为_blank 现在遇到一个需求: 做了一个后台运维管理系统,在点击datagrid头部一个按钮,需要打开一个新窗口...因为extjs运行效率比较低,所以选择使用chrome访问系统,而在操作些按钮的时候发现很多很奇特的现象,这些现象只出现在chrome中: 1、打开一个窗口后,些窗口不关闭,将无法打开多个窗口,即使原有窗口关闭...打开窗口的方式:window.open、form提交、iframe--表现上一致 2、页面中原本就有一个form,每次操作就修改里面一个参数,设置其值为随机数,亦不行 改用window.open还发现一个问题...,就是弹出的窗口是没有工具栏和地址栏的,且不在新选项卡中打开 后来搜索到一篇文章,有所启发,就有了如下的代码: var nwin = window.open(); nwin.location = ‘xxxx

    3.6K30

    window location href页面跳转的几种用法及其延展「建议收藏」

    top.location.href;//在顶层页面打开新页面 如果页面中自定义了frame,那么可将parent、self、top换为自定义frame的名称,效果是在frame窗口打开url地址。...区别在于是否有提交数据。...当有提交数据时,window.location.Reload()会提示是否提交,window.location.href=window.location.href;则是向指定的url提交数据....用window.open()打开新页面 但是用window.location.href=”” 却是在原窗口打开的. 有时浏览器会一些安全设置window.open肯定被屏蔽。...然而 window,open()不一定是打开新窗口 在有窗口的名称和window.open中第二个参数中的一样就会将这个窗口替换,用这个特性的话可以在iframe和frame中来代替location.href

    5.3K10

    XS-leaks信息泄露利用方法

    XS-leaks信息泄露介绍很多的一个WiKi:XS-Leaks Wiki 锚点#:~:text=xxx 相当于依据聚焦的描点,如果稳重有内容xxx的话就会滑动到对应位置 PS:这个功能在火狐没使用成功,但是在Chrom...br>aaaa Continue Guessing 当访问url#continue就会自动聚焦跳转到页尾的...,而且html页面的全部内容都会被加载到这个iframe标签里面,我们也可以通过url结尾处添加#id的方式聚焦到ifram标签里面的某个内容 onblur 事件 当用户离开输入字段时执行 JavaScript...当完成输入之后退出输入框就会执行myFunction url 当点击连接之后就会执行...的页面,访问某个链接 写一段js代码,对返回的ifram标签进行分析 进行差异化处理,如果分析返回的ifram标签发现带有某个特殊的属性,就对记录这个能返回特殊属性的链接 将返回带有特殊属性的链接进行传递

    29130

    postMessage 消息传递

    点击查看demo 前言         web开发了,除了前台与服务器交换数据,还有可能前台页面间需要进行数据传递,比如窗口间,页面和嵌套的iframe间。...参数         postMessage( data , origin , [transfer] ),接受两个参数         1.data:​需要传递的数据,html5规范中该参数可以是JavaScript...中的任意基本类型或可复制的对象,但是不是所有浏览器都能完美支持html5,所有还是用JSON将数据序列化比较好。         ...的contentWindow属性、执行window.open返回的窗口对象,或者是命名过或数值索引的window.frames....origin : 调用postMessage 时消息发送方窗口的origin source : 对发送消息窗口对象的引用,可用来在具有不同origin的两个窗口间建立双向通信。

    1K30

    nodeIntegration | Electron安全

    官方的解释是: 是否启用Node integration 官方在安全建议中是这样描述的 加载远程内容时,不论使用的是哪一种渲染器(BrowserWindow,BrowserView 或者 webview...其目的是限制您授予远程内容的权限, 从而使攻击者在您的网站上执行 JavaScript 时更难伤害您的用户。...sudo npm install -g electron@3.0.0 在 Fiddle 中添加我们自行安装的 Electron 3.0.0 点击 Run 测试是否可以正常显示 能够正常运行 按照官方手册介绍...iframe直接执行失败, window.open 执行成功 小结 在默认配置中 测试点 是/否可以执行 NodeJS 预加载脚本 是 渲染页面 是 iframe 否 iframe + window.open...1 中不能执行 NodeJS 的环境中测试 预加载脚本 肯定可以 渲染进程 成功 iframe iframe window.open 测试 在 iframe 中通过 window.open 打开页面进行执行

    1K10

    动手写 js 沙箱

    (反正不是100%就行) 设置缓存 如果上代码,每次编译一次code时,都会实例一次Proxy, 这样做会比较损性能. 所以,我们这里,可以使用closure来进行缓存。...不能创建新的弹窗和window, 比如window.open or target="_blank" 5. 不能发送表单 6. 不能加载额外插件比如flash等 7. 不能执行自动播放的tricky...."_blank" allow-pointer-lock 在iframe中可以锁定鼠标,主要和鼠标锁定有关 可以通过在sandbox里,添加允许进行的权限....script> 这里顺便插播一下关于postMessage的相关知识点. postMessage 讲解 postMessage主要做的事情有三个: 1.页面和其打开的新窗口的数据传递...== "http://example.org:8080") return; // ... } event里面,会带上3个参数: data: 传递过来的数据. e.data origin:

    2.7K01

    contextIsolation | Electron 安全

    + window.open 获取 Preload 变量的结果 Electron 5.0 总结 在 Electron 5.0 中,contextIsolation 为 true 时,可以有效隔离主进程、...经过测试,没有成功绕过 隔离效果范围小结 在 Electron 中,contextIsolation 为 true 时,可以有效隔离主进程、Preload、渲染进程、iframe 及iframe+window.open...中 window.xxx 以及 JavaScript 内置对象的内容 在 Electron 14.0.0 前 iframe + window.open 可以访问达到和渲染进程一样的效果 使用时间线描述如下...embeds Navigation restriction bypass (CVE-2020-15174) 即缺少上下文隔离,允许 iframe 嵌入,导航限制绕过 作者首先看了一下窗口创建时的配置...URL ,这个就属于是 iframe 嵌入,我是说这种功能,微信是不是这么做的暂不得知哈 Discord 支持嵌入例如 YouTube内容,当 YouTube URL 被发布时,它会自动在聊天中显示视频播放器

    52110

    javascript基础-3

    replace:一个可选布尔值 true:URL 替换浏览历史中的当前条目 false:URL 在浏览历史中创建新的条目 (2).window.close() 直接调用; eg: 在没有window.open()时,则控制台显示“无法使用脚本关闭非脚本打开窗口”; eg: var openedWindow...name="NAME名" > 即:使用相同的name,即可将两者联系起来,在同一界面中,无需重复iframe部分,至改变内容即可; 早期的iframe主要用于导航栏(navigator...传统的web交互,每次用户提交请求时,服务器都会重新返回一个完整的Html页面,这样用户需要等待而服务器资源也被浪费,于是诞生了ajax等各种服务于此的技术。...然而,在以下情况中,请使用 POST 请求: 无法使用缓存文件(更新服务器上的文件或数据库) 向服务器发送大量数据(POST 没有数据量限制) 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

    1.1K20

    检测自己网站是否被嵌套在iframe下并从中跳出

    iframe被用于将一个网页嵌套在另一个网页中,有的时候这会带来一些安全问题,这时我们就需要一些防嵌套操作了。本文分为俩部分,一部分讲解如何检测或者禁止嵌套操作,另一部分讲解如何从嵌套中跳出。...== window.top) { // 检测到嵌套时该干的事}从嵌套中跳出跳出只能是前端处理,如果使用了PHP等后端检测,可以直接返回前端JavaScript代码,或者HTML的A标签设置转跳。...JavaScript直接转跳(不推荐)不推荐是因为现在大多浏览器为了防止滥用,会阻止自动弹出新窗口。...window.open(window.location.href, '_blank');A标签点击转跳(较为推荐)当发生了用户交互事件,浏览器就不会阻止转跳了,所以这是个不错的方法。...('a');link.href = 'https://www.9kr.cc';link.target = '_blank'; // 在新窗口中打开链接link.innerText = '点击进入博客';

    1.4K40

    HTML 面试要点:跨标签页通信

    # window.open & window.opener 在使用 window.open (opens new window) 打开新窗口时,会返回新窗口对象的引用 WindowObjectReference...在 demo1.html 中,添加创建子窗口和发送消息给子窗口的逻辑,并监听来自其他窗口的消息 // 创建和收集 子窗口 let childWins = []; document.getElementById...在 demo1.html 中,创建 iframe,并发送消息给 iframe: // 通过 iframe 给其他页面发送信息 document.getElementById("btn-send-msg"...收到消息后,进行转发,传递给其他与 iframe 同域的 iframe: const bc = new BroadcastChannel('cellinlab-iframe-channel'); /...# WebSocket WebSocket 对象提供了用于创建和管理 WebSocket (opens new window) 连接,以及可以通过该连接发送和接收数据的 API。

    1.3K10

    检测自己网站是否被嵌套在iframe下并从中跳出

    iframe被用于将一个网页嵌套在另一个网页中,有的时候这会带来一些安全问题,这时我们就需要一些防嵌套操作了。 本文分为俩部分,一部分讲解如何检测或者禁止嵌套操作,另一部分讲解如何从嵌套中跳出。...== window.top) { // 检测到嵌套时该干的事 } 从嵌套中跳出 跳出只能是前端处理,如果使用了PHP等后端检测,可以直接返回前端JavaScript代码,或者HTML的A标签设置转跳...JavaScript直接转跳(不推荐) 不推荐是因为现在大多浏览器为了防止滥用,会阻止自动弹出新窗口。...window.open(window.location.href, '_blank'); A标签点击转跳(较为推荐) 当发生了用户交互事件,浏览器就不会阻止转跳了,所以这是个不错的方法。...link.target = '_blank'; // 在新窗口中打开链接 link.innerText = '点击进入博客'; //link.addEventListener('

    64120

    一文搞懂单点登录三种情况的实现方式

    ,扩展性好,是单点登录的标准做法 不同域名下的单点登录(二) 可以选择将 Session ID (或 Token )保存到浏览器的 LocalStorage 中,让前端在每次向后端发送请求时,主动将LocalStorage...的数据传递给服务端 这些都是由前端来控制的,后端需要做的仅仅是在用户登录成功后,将 Session ID(或 Token)放在响应体中传递给前端 单点登录完全可以在前端实现。...获取 token var token = result.data.token; // 动态创建一个不可见的iframe,在iframe中加载一个跨域HTML var iframe = document.createElement...,当事件被触发时,把接收到的token数据写入localStorage window.addEventListener('message', function (event) { localStorage.setItem...('token', event.data) }, false); 前端通过 iframe+postMessage() 方式,将同一份 Token 写入到了多个域下的 LocalStorage 中,前端每次在向后端发送请求之前

    5.3K20
    领券