解决mv3版本浏览器插件,不能注入js脚本问题

news/2025/3/12 12:18:14/

文章目录

  • 背景
  • 引入ifream
  • 解决ifream和父页面完全跨域问题
  • 参考链接

背景

浏览器插件升级mv3版本后,不能再使用content_script内容脚本向原浏览器(top)注入script标签达到注入脚本的目的。浏览器认为插入未经审核的脚本是不安全的行为。

引入ifream

由插件(扩展)插入一个ifream标签。ifream子页面中包含的script标签中脚本允许插入到top页面中。但是插入后存在跨域问题:

  1. 完全跨域(二级域名和主域名都不相同)
// 完全跨域的域名
document.domain = 'aaa.xxx.com' // 父页面域名
document.domain = 'bbb.ccc.com' // 子页面域名

在这里插入图片描述

  1. 不完全跨域
// 二级域名不同,主域名相同
document.domain = 'aaa.xxx.com' // 父页面域名
document.domain = 'bbb.xxx.com' // 子页面域名
  1. 不跨域

这里不讨论不跨域不完全跨域的问题。毕竟扩展插入的子页面大部分都是插入到别人的网站里面。
扩展创建ifream标签,引入子页面:

let ifELe = document.createElement('iframe')
ifELe.src = 'domain' // 具体的逻辑由ifream子页面处理
// ifELe.src = 'https://www.baidu.com'
ifELe.style.width = '100%'
ifELe.setAttribute('data-name', 'xxx')document.body.appendChild(ifELe)

注!引入的子页面首先要支持被其他页面嵌入或不包含一些限制。否则会被父页面阻止加载。

解决ifream和父页面完全跨域问题

跨域时,子ifream页面不能获取到父页面window document对象
可以使用消息广播进行数据传输,绕过跨域问题。

// ifream子页面:监听父页面发来的数据:ifream里面的window对象window.addEventListener('message-type', function(e){console.log(e.detail)})// top父页面:父页面的window对象window.dispatchEvent(new CustomEvent('message-type', {detail: {name: '张三',age: 18}}))

参考链接

iframe相关及跨域解决方案 - 掘金
iframe跨域解决办法_iframe跨域解决方案-CSDN博客


http://www.ppmy.cn/news/1235344.html

相关文章

计网(复习自用)

计算机网络 1.概述 1.1概念 含义 计算机网络:是一个将分散的。具有独立功能的计算机系统,通过通信设备和线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。 简单点说,计算机网络是互联的,自治的计算机集…

OpenGL 绘制点与三角形(Qt)

文章目录 一、简介二、实现代码三、实现效果一、简介 这里对OpenGL中点与三角形相关绘制操作进行封装,方便后续点云数据与模型数据的渲染。 二、实现代码 这里我们先创建一个基类Drawable,后续的点、线、面等,均会继承该类: Drawable.h #ifndef DRAWABLE_H #define DRAWABL…

查看sql语句执行计划并重建索引

晚上cpu报警显示当前cpu使用率达到90%以上,不到10%的空闲 先查询当前sql: #(ORACLE) SQL > set line 200 pages 1000 col event for a30 col program for a30 col username for a12 col sql_id for a15 col INST_ID for 9999 …

websocket与node.js实现

什么是 websocket? websoket 是一种网络通信协议,基于 tcp 连接的全双工通信协议(客户端和服务器可以同时收发信息),值得注意的是他不基于 http 协议,websocket 只有在建立连接的时候使用到 http 协议进行…

三十分钟学会Shell(上)

Shell ​ Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,是用户和Linux文件系统之间的桥梁。Shell 有自己的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux&#x…

【Leetcode合集】2342. 数位和相等数对的最大和

文章目录 2342. 数位和相等数对的最大和方案1方案2方案3方案4 2342. 数位和相等数对的最大和 2342. 数位和相等数对的最大和 代码仓库地址: https://github.com/slience-me/Leetcode 个人博客 :https://slienceme.xyz 给你一个下标从 0 开始的数组 nu…

深入解析Java 8中HashMap的底层原理

引言 HashMap是Java中常用的集合类,用于存储键值对。其底层实现经过多次优化,包括哈希算法、数组扩容、链表转红黑树等。本文将深入研究HashMap的底层原理,并详细探讨如何解决哈希碰撞的技术。 1. 哈希算法 HashMap的核心是哈希算法&#…

企业软件定制开发有哪些优势?|app小程序网站搭建

企业软件定制开发有哪些优势?|app小程序网站搭建 企业软件定制开发是一种根据企业特定需求开发定制化软件的服务。相比于购买现成的软件产品,企业软件定制开发具有许多优势。 首先,企业软件定制开发可以满足企业独特需求。每个企业都有自己独…