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

用externally_connectable实现WWW向Chrome扩展发送数据

基础概念

externally_connectable 是 Chrome 扩展的一种特性,允许网页与扩展进行双向通信。通过这种方式,网页可以调用扩展中的函数,扩展也可以向网页发送消息。这种通信机制是通过 chrome.runtime.sendMessagechrome.runtime.onMessage API 实现的。

优势

  1. 双向通信:网页和扩展之间可以进行双向通信,使得网页可以利用扩展的功能,扩展也可以获取网页的数据。
  2. 灵活性:这种通信方式非常灵活,可以传递各种类型的数据,包括复杂对象和二进制数据。
  3. 安全性:通过配置 externally_connectablematches 字段,可以限制哪些网页可以与扩展通信,从而提高安全性。

类型

externally_connectable 配置对象包含以下字段:

  • matches:一个 URL 模式数组,指定哪些网页可以与扩展通信。
  • extensions:一个扩展 ID 数组,指定哪些扩展可以与网页通信。

应用场景

  1. 网页与扩展的数据交换:例如,网页需要使用扩展中的某个功能,或者扩展需要获取网页中的某些数据。
  2. 增强网页功能:通过扩展为网页添加新的功能,如广告拦截、内容过滤等。
  3. 跨域通信:网页和扩展可以通过这种方式绕过同源策略的限制,进行跨域通信。

实现步骤

  1. 配置 externally_connectable

在扩展的 manifest.json 文件中配置 externally_connectable

代码语言:txt
复制
{
  "name": "My Extension",
  "version": "1.0",
  "manifest_version": 3,
  "externally_connectable": {
    "matches": ["<all_urls>"],
    "extensions": ["<extension_id>"]
  },
  "background": {
    "service_worker": "background.js"
  }
}
  1. 在扩展中监听消息

background.js 中监听来自网页的消息:

代码语言:txt
复制
chrome.runtime.onMessageExternal.addListener((message, sender, sendResponse) => {
  console.log('Received message from web page:', message);
  // 处理消息并发送响应
  sendResponse({ data: 'Hello from extension!' });
});
  1. 在网页中发送消息

在网页中使用 chrome.runtime.sendMessage 发送消息给扩展:

代码语言:txt
复制
chrome.runtime.sendMessage('<extension_id>', { data: 'Hello from web page!' }, (response) => {
  console.log('Received response from extension:', response);
});

可能遇到的问题及解决方法

  1. 权限问题:确保扩展的 manifest.json 文件中包含了 externally_connectable 配置,并且网页的 URL 符合 matches 字段的规则。
  2. 扩展 ID 错误:确保在 externally_connectable 配置和 chrome.runtime.sendMessage 中使用的扩展 ID 是正确的。
  3. 跨域问题:如果网页和扩展不在同一个域下,确保 matches 字段配置正确,并且扩展已经请求了相应的权限。

参考链接

通过以上步骤和配置,你可以实现 WWW 向 Chrome 扩展发送数据的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

浏览器插件开发-manifest文件解读「建议收藏」

Extension API 360浏览器的插件文档 中文, 虽然内核差不多但是不一定与 Chrome api 一致, 可以作为参考 Chrome 官方案例库 案例 如何实现网页和Chrome插件之间的通信...消息传递 manifest.json 配置说明 manifest.json 用于描述 Chrome 插件的源数据,配置信息等,基本内容如下 { "name": "名称",...(function () { }, { url: [{ urlMatches: 'http://www.baidu.com'}] // 过滤 }); 9. chrome...(tabId, details, callback) 接口中详细介绍 通信案例,通过 content_script 与页面 共享 DOM,来实现页面与扩展间的通信 // page.js 页面中触发一个...} }, false); 12. externally_connectable 这项配置直接实现网站与插件间通信,但是需要在 manifest.json 中作出如下配置 { "externally_connectable

2.5K20

chrome浏览器扩展v3版本配置项整理备忘

"https://*.csdn.net/*", "https://*.xxx.com/*" ], //动作API,原文:在 Manifest V2 中,有两种不同的 API 来实现操作...方法如下 首先,需要增加配置 externally_connectable:{matches:[“https://*.xxx.com/”]}指定允许哪些网站可以给当前插件发送消息,相当于白名单,只有在白名单中的站点发送的消息...,扩展才会监听 //onMessageExternal消息监听 chrome.runtime.onMessageExternal.addListener(function (request, sender...}); //发送消息,触发上面的onMessageExternal //第一个参数是插件Id,指定要发送给哪个插件 //第二个参数是想要传给插件的数据信息 //第三个是让插件那边调用的回调函数,触发回来...:"外部触发成功" }); 内部发送sendMessage不会触发到onMessageExternal, 外部发送sendMessage不会触发到onMessage

49240
  • Chrome Extension

    严格来讲,我们正在说的东西应该叫Chrome扩展(Chrome Extension) 什么叫Chrome插件 Chrome插件是一个Web技术开发、用来增强浏览器功能的软件,它其实就是一个由HTML、...应用也可以通过其它方式提供界面,比如加入到上下文菜单,提供一个选项页面或者一个 content script改变页面的显示等。...可以在"开发指南"中找到应用(扩展)特性的完整列表以及 实现的细节 界面列表 ? 除了这个之外,还发现两只: 右键菜 开发者工具 至于长什么样儿,看看自己的浏览器,动手找找,比如: 浏览器按钮 ?...插件中页面注入脚本的一种形式(虽然名为script,其实还可以包括css的), 借助content-scripts我们可以实现通过配置的方式轻松指定页面注入JS和CSS 最常见的比如:广告屏蔽、页面...比如第一次安装、插件更新、有content-script发送消息,等等 popup opup是点击browseraction或者pageaction图标时打开的一个小窗口网页,焦点离开网页就立即关闭

    2.8K30

    摆脱客户端?网页发起直播势在必行!

    屏幕共享 MediaDevices.getDisplayMedia Chrome 72+、Firefox 66+版本已经实现了WebRTC规范中的MediaDevices.getDisplayMedia...72以下的版本,想要实现屏幕共享的功能需要借助Chrome插件去获取screen(显示器屏幕)、application windows(应用窗口)和browser tabs(浏览器标签页)。...Chrome插件:由manifest.json和script.js组成。 manifest.json 填入一些基本数据。 background中scripts传入需执行的js文件。...通过chrome.runtime.sendMessage发送消息到Chrome插件调起屏幕共享。获取到streamId后,通过mediaDevices.getUserMedia得到stream。...屏幕共享 Web 端屏幕共享,通过创建一个屏幕共享的流来实现的。Chrome屏幕共享需要下载插件,在创建的流的时候还需要传入插件的extensionId。

    2.9K61

    进阶|Chrome还不够神,但你写的扩展程序可以很神

    插件(Plug-in) 指的是通过调用 Webkit 内核 NPAPI 来扩展内核功能的一种组件,工作在内核层面,理论上可以任何一种生成本地二进制程序的语言开发,比如 C/C++、Delphi 等。...中的微格式数据 我们可以这样理解它,在页面加载完毕之后,我们的扩展程序会这个页面注入一个或者额多个脚本,这个脚本可以获得浏览器所访问的 web 页面的详细信息。...接下来,我们的扩展要灵活地完成各种功能,最重要的就是互相间的通信! 信息数据在内容脚本、弹窗页面以及事件页面之间传递是一个扩展程序最重要的部分。...这些方法分别允许您从内容脚本扩展程序或者反过来发送可通过 JSON 序列化的消息,可选的 callback 参数允许您在需要的时候从另一边处理回应。...这里是ChokCoco的博客: http://www.cnblogs.com/coco1s/p/8004510.html 欢迎留言和转发!

    1K20

    请求模块urllib的基本使用

    ,就必须使用网络请求,只有进行了网络请求才可以对响应结果中的数据进行提取,urllib模块是python自带的网络请求模块,无需安装,导入即可使用。...96.0.4664.45 Safari/537.36" } # 创建Request对象 res = urllib.request.Request(url=url, headers=headers) # 模拟浏览器服务器发送网络请求...HTTP协议常用的请求方法 方法 描述 GET 请求指定的页面信息,并返回响应内容 POST 指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。...创建Request对象 创建具有请求头信息的Request对象,然后使用urlopen()方法“baidu”地址发送一个GET请求,利用字典添加请求头信息最常用的用法就是修改User-Agent来伪装浏览器...https://c-ssl.duitang.com/uploads/blog/202008/12/20200812094028_qzhsq.jpg' img_name = 'code2.png' # 目标网址发送网络请求并赋给一个变量

    87340

    网络协议之HTTP

    所有的WWW文件都必须遵守这个标准。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。...它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。...浏览器作为HTTP客户端通过URLHTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,客户端发送响应信息。 HTTP的特点 支持客户/服务器模式。...即SYN+ACK包,此时服务器进入SYN-RECV状态 客户端收到服务器的SYN+ACK包,服务器发送确认报ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手...分割URL和传输数据,多个参数&连接,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串BASE64加密,不安全, POST把提交的数据放置在是HTTP包的包体中

    56620

    14 上线后不想让人看到源码怎么做?

    目录 如何调试数据? 在安装了Vue Devtools之后,在chrome浏览器开发模式下,打开vue面板,选择组件,然后就可以直接查看和修改data数据: ? 修改之后,视图即刻更新。...://extensions/ 勾选"开发者模式" 单击 "加载已解压的扩展程序", 并且选择刚才编译的项目其目录下的shells/chrome文件夹 关于 persistent 选项等 如果扩展程序不能正常工作...为什么 Vue Devtools 可以修改项目的运行时数据? 在前面我们曾经使用vue面板,直接修改了vue组件的运行时数据。这是怎么做到的? 这是vue与Vue Devtools扩展通过合作完成的。...vue框架本身在开发模式下,如果察觉到自己处于浏览器宿主环境下,并且宿主环境安装了deltools(即Vue Devtools),则devtools发送一个init事件: ?...__VUE_DEVTOOLS_INSPECT__ fn && fn(this) } }) Vue Devtools通过浏览器全局注入,让vue察觉到工具扩展的存在。

    1.6K30

    python爬虫入门(一)urllib和urllib2

    浏览器发送HTTP请求的过程: 当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。...当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器...客户端发送一个HTTP请求到服务器的请求消息,包括以下格式: 请求行、请求头部、空行、请求数据 一个典型的HTTP请求 GET https://www.baidu.com/ HTTP/1.1 Host:...Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能,以后会详细讲。 11....GET请求一般用于我们服务器获取数据,比如说,我们百度搜索知乎:https://www.baidu.com/s?wd=知乎 发现GEThttps://www.baidu.com/s?

    1.9K60

    Chrome 插件特性及实战场景案例分析

    一句话总结:Chrome扩展插件是前端的技术栈,来定制浏览器的功能,改善用户体验。 可能大家还听过一个词:Chrome Plugin。...,出于安全考虑,tab的属性中没有document, 因此无法在扩展中直接获取某个标签页面中的dom元素,但是可以通过发送事件请求来实现chrome.tabs.sendRequest(tab_id,...const { url ,tabId} = details // content_script.js发送下载图片链接 chrome.tabs.sendMessage(tabId...2)如果可以修改,怎么去实现跨域请求?3)怎么实现登录授权? 如果对Chrome扩展插件熟悉,会发现Chrome就是为这量身定制,可以完美解决这些问题。...4)利用Chrome插件支持跨站请求的特性,多语言平台直接发送修改请求。

    1.8K40

    【干货】Chrome插件(扩展)开发全攻略

    扩展demo", // 图标,一般偷懒全部一个尺寸的也没问题 "icons": { "16": "img/icon.png", "48": "img/icon.png", "128"...插件中页面注入脚本的一种形式(虽然名为script,其实还可以包括css的),借助content-scripts我们可以实现通过配置的方式轻松指定页面注入JS和CSS(如果需要动态注入,可以参考下文...比如第一次安装、插件更新、有content-script发送消息,等等。...几点注意: 为了兼容,建议2种都写,如果都写了,Chrome40以后会默认读取新版的方式; 新版options中不能使用alert; 数据存储建议chrome.storage,因为会随用户自动同步;...> 0) { console.log(views[0].location.href); } popup或者bgcontent主动发送消息 background.js或者popup.js: function

    11.7K40

    【HTTP】客户端识别与cookie机制

    ​ 做数据产品时,我们会经常遇到用户隐私问题(如,禁止追踪)。...在最新的Chrome浏览器中该选项已被默认选中设置=>显示高级设置=>随浏览流量一起发送”不跟踪”请求开启该选项后,请求头中会增加DNT:1的字段。 ​...:(1)多人公用同一台电脑;(2)每次使用,动态分配IP地址;(3)共享的防火墙地址,将真实地址隐藏;(4)HTTP代理; 用户登录 为了使Web站点的登录更加简便,HTTP中包含了一种内建机制,可以WWW-Authenticate...胖URL 有些Web站点会每一个用户生成特定版本的URL(通常是真正的URL中添加一些客户端识别信息进行扩展), 我们称之为胖URL。...Set-cookie: user="ligang"; domain="xxx.com" 数据行业中,针对浏览器级别的浏览器DNT(Do Not Track,禁止追踪),使用第三方Cookie实现,是一种常规解决方案

    72920

    【HTTP】客户端识别与cookie机制

    ​ 做数据产品时,我们会经常遇到用户隐私问题(如,禁止追踪)。...在最新的Chrome浏览器中该选项已被默认选中设置=>显示高级设置=>随浏览流量一起发送”不跟踪”请求开启该选项后,请求头中会增加DNT:1的字段。 ? ​...:(1)多人公用同一台电脑;(2)每次使用,动态分配IP地址;(3)共享的防火墙地址,将真实地址隐藏;(4)HTTP代理; 用户登录 为了使Web站点的登录更加简便,HTTP中包含了一种内建机制,可以WWW-Authenticate...胖URL 有些Web站点会每一个用户生成特定版本的URL(通常是真正的URL中添加一些客户端识别信息进行扩展), 我们称之为胖URL。...Set-cookie: user="ligang"; domain="xxx.com" 数据行业中,针对浏览器级别的浏览器DNT(Do Not Track,禁止追踪),使用第三方Cookie实现,是一种常规解决方案

    1.1K61

    如何实现一个谷歌浏览器插件

    如何实现一个谷歌浏览器插件 一、什么是Chrome插件? ★Chrome插件就是我们运行在Chrome浏览器 上的扩展程序,比如说vue-devtool。...准确的说,其实更应该叫做Chrome扩展,因为插件是更偏向于底层的技术。Chrome插件本质上来说,就是利用WEB开发技术,包括HTML、CSS和JS等开发出来的web页面,用来增强浏览器的功能。...实现,右键菜单可以出现在不同的上下文,比如普通页面、选中的文字、图片、链接,等等,如果有同一个插件里面定义了多个菜单,Chrome会自动组合放到以插件名字命名的二级菜单里。...发送消息 chrome.runtime.sendMessege( message, function(response) {…} ) message:表示background发送数据...,基本类型,对象的话可以JSON序列化 function: background接受到消息后返回的信息 (2)backgroundcontent-scripts发送消息 每个tab页面都有一个自己的content-scripts

    1.4K31

    Chrome扩展 实现自动页面Video下载 demo

    最近在看一些浏览器相关的知识,然后就看到了chrome扩展开发文档,觉得很有意思,就按照文档做了一个最简单的demo实现页面上video的自动下载。...content_scripts就是本次开发的重点了,他是Chrome插件中页面注入脚本的一种形式(虽然名为script,其实还可以包括css的),借助content_scripts我们可以实现通过配置的方式轻松指定页面注入...iconUrl: 'icon.png', title: 'demo', message: '下载插件已启动' }); }); 当插件启动时,给桌面发送一个通知...const save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a'); save_link.href =...(这个是小意思了,很简单) 加载扩展: demo做完了就可以加载到chrome中,在chrome中找到扩展程序(chrome://extensions/),打开开发者模式,加载已解压的扩展程序,然后选择我们扩展的根目录即可

    1.4K60

    chrome插件 DIY

    好,假设现在你在chrome的使用上想要一个扩展功能,但各种关键字在各种可能找到答案的地方都搜索了,仍然没有看到想要的插件。这个时候,就可以考虑自己开发了。...chrome插件最常见的功能莫过到url栏右侧的那些小图标了,就是这些: ? 如果看完上入门指引小demo后,你肯定知道了怎么样实现这样一个功能。...如果用过evernote剪裁插件的人应该知道,插件可以改变chrome在页面上的右键菜单: ? 这里在哪里实现的呢?...还真有:chrome.storage。官方文档中详细介绍了其用法,以及如何在同账号不同浏览器上自动同步数据。 基于chrome.storage,本插件的各种扩展点的数据流操作图如下: ?...发送坐标消息和删除坐标的消息。

    2.2K20

    chrome插件 DIY

    好,假设现在你在chrome的使用上想要一个扩展功能,但各种关键字在各种可能找到答案的地方都搜索了,仍然没有看到想要的插件。这个时候,就可以考虑自己开发了。...chrome插件最常见的功能莫过到url栏右侧的那些小图标了,就是这些: ? 如果看完上入门指引小demo后,你肯定知道了怎么样实现这样一个功能。...如果用过evernote剪裁插件的人应该知道,插件可以改变chrome在页面上的右键菜单: ? 这里在哪里实现的呢?...还真有:chrome.storage。官方文档中详细介绍了其用法,以及如何在同账号不同浏览器上自动同步数据。 基于chrome.storage,本插件的各种扩展点的数据流操作图如下: ?...发送坐标消息和删除坐标的消息。

    3.1K60
    领券