首页 > 其他分享 >记录使用chremo extension 扩展中的页面与其中的iframe通信

记录使用chremo extension 扩展中的页面与其中的iframe通信

时间:2024-01-28 18:23:11浏览次数:24  
标签:脚本 chremo extension chrome 扩展 iframe 注入 页面

对扩展之前并不怎么了解,简单学过一点js,刷小视频的时候突然冒出想法想做一个扩展。一开始做就遇到了麻烦,记录一下-2024.1.28

使用的版本是v3

找了挺久文档之后获得了解决方法:
其实挺简单的,通过拿到iframe的引用,调用下面的postMessage方法对iframe发送消息
var iframe = document.getElementById('myIframe');

  // 向 iframe 发送消息
  iframe.contentWindow.postMessage({type:"BANNER"},'*');

然后对iframe注入一个脚本用来接收消息
window.addEventListener("message",(event) => {//代码 })
直接就完成了操作

记录一下我遇到的问题:
1.同源访问策略的限制,因为iframe并不是我自己的内容,所以也做不到修改服务器cros
一开始是想扩展中的页面直接引用iframe的dom操作,但是被限制了
后面注入脚本,希望iframe中我注入的脚本拿到父级的dom操作,但是也被限制了,怎么去配置扩展能被跨源访问不清楚

2.脚本的注入一开始也是不懂的,还有就是注入脚本只能注入顶层,页面中的iframe并没有被注入,查了官方文档:
content_scripts: [
{
matches: ['http:///', 'https:///'],
"all_frames": true,
"match_origin_as_fallback": true,
js: ['src/contentScript/index.js'],
},
需要以上配置在manifest中,matches指定注入的范围,"all_frames": true代表注入不仅限于页面的顶层,页面中的iframe也会被逐层注入;
match_orgin_as_fallback,脚本是否应在由匹配的来源创建但其网址或来源可能与模式不直接匹配的帧中注入。其中包括采用不同架构的帧,例如 about:、data:、blob: 和 filesystem(没太懂,大佬看到能帮我解惑再好不过0.0)。js:就是要注入的脚本路径。
3.在官方文档中看到
function chrome.tabs.sendMessage<any, any>(tabId: number, message: any, responseCallback: (response: any) => void): void (+3 overloads)
这个函数的概念,用于扩展与内容脚本互相通信
通过 chrome.runtime.onMessage.addListener添加监视器;
chrome.runtime.sendMessage({ type: 'COUNT', count })这个应该是对扩展发送消息;
但是这两种都是通过上一个监视器接收消息。
还有tabID需要使用
function chrome.tabs.query(queryInfo: chrome.tabs.QueryInfo, callback: (result: chrome.tabs.Tab[]) => void): void (+1 overload)
取到。当传入的第一个参数是空对象{}时可以获取全部tab,然后自己筛分,官方文档上一些例子有教怎么通过一些参数直接query到期望的tab

另外推荐一下简单的Chrome Extension框架create-chrome-ext
https://github.com/guocaoyi/create-chrome-ext
比较适合像我一样的新手,简单易用,像plasmo这个框架,弄了一下怎么都很奇怪,总在报一些看不懂的错误,只怪我确实很捞,他应该是好用的,但是不是我的新手套。

标签:脚本,chremo,extension,chrome,扩展,iframe,注入,页面
From: https://www.cnblogs.com/yrrs/p/17993121/yrrs

相关文章

  • 四、iframe切换+alert切换+鼠标操作+js操作
    1、iframe切换iframe是什么在网页中内嵌了另一个html怎么识别iframeF12打开开发者工具,在Element面板中鼠标点击要操作的元素会显示元素的完整路径,检查里面是否存在iframe,html切换进iframe当中去driver.switch_to.frame(几种方法去......
  • fail: Microsoft.Extensions.Hosting.Internal.Host[11] Hosting failed to sta
    docker发布.net8项目#使用.NET运行时镜像作为最终镜像FROMmcr.microsoft.com/dotnet/runtime:8.0#设置工作目录WORKDIR/app#复制项目文件到工作目录COPY./appENVASPNETCORE_URLS="http://*:8003"ENVASPNETCORE_HTTP_PORTS=""#设置入口点ENTRYPOINT["dotn......
  • JS、HTML内嵌iframe第三方网页,如何通信?
    在实际使用postMessage时,如果你不确定确切的父页面或子页面的源地址(即origin),可以采取以下策略:允许任意源发送消息:如果你希望iframe子页面能够向任何父页面发送消息,或者父页面接受来自任何域的iframe消息,可以在调用postMessage时将目标源设置为通配符*://子页面向任意源发送windo......
  • iframe父子页面通信
    一、同域下父子页面的通信  1.父页面调用子iframe页面  (1)通过iframe的Id获取子页面的dom,然后通过内置属性contentWindow取得子窗口的window对象,此方法兼容各个浏览器document.getElementById('iframe_Id').contentWindow//contentWindow不能省略  (2)通过iframe的......
  • 监听iframe中的鼠标点击事件
    <iframeid="iframe1"frameborder="0"name="iframe1"scrolling="no"src="https://www.baidu.com"><p>你的浏览器不支持iframes.</p></iframe>varIframeOnClick={resolution......
  • 聊一聊为什么我要整合Microsoft.Extensions.DependencyInjection和Castle.Core
    前言如果用到动态代理,大家可能会有几种选择,排到前列的是Autofac+Castle、AspectCore和DoraInterception,我将从我当时研究的经历,以及我遇到的场景,为大家展示下聊一聊我为什么要费时费力的整合Microsoft.Extensions.DependencyInjection和Castle.Core当时遇到的场景直接上源码......
  • 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(完结篇)
    聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(完结篇) 合集-聊一聊如何整合Microsoft默认的Ioc容器和Castle.Core(4) 1.聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(二)01-122.聊一聊如何结合Microsoft.Extension......
  • 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(三)
    聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(三) 合集-聊一聊如何整合Microsoft默认的Ioc容器和Castle.Core(4) 1.聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(二)01-122.聊一聊如何结合Microsoft.Extensions.De......
  • 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(二)
    聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(二) 合集-聊一聊如何整合Microsoft默认的Ioc容器和Castle.Core(4) 1.整合Microsoft.Extensions.DependencyInjection和Castle.Core(二)01-122.聊一聊如何结合Microsoft.Extensions.DependenyI......
  • 聊一聊如何结合Microsoft.Extensions.DependenyInjection和Castle.Core
    聊一聊如何结合Microsoft.Extensions.DependenyInjection和Castle.Core 合集-聊一聊如何整合Microsoft默认的Ioc容器和Castle.Core(4) 1.聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(二)01-122.聊一聊如何结合Microsoft.Extensions.Depend......