chrome扩展开发:[10]消息传递

2023-11-02

转自:http://jingyan.baidu.com/article/414eccf616e2c56b431f0a97.html

工具/原料

  • chrome浏览器

  • 文本编辑器

概述

  1. 1

    前面几篇文章我们介绍了browser action 、background pages、content scripts。

    他们是在不同的上下文中运行的,不能彼此直接访问,有什么办法在他们之间传递数据或消息吗?答案是:消息传递(Message Passing).下面是官方文档的截图:

  2. 2

    消息分为三种,一次性消息、长效消息、扩展间消息,就是文档中所说的, one-time requests, long-lived connections, cross-extension messages

  3. 3

    一次性消息(one-time requests)

    从content script发送给background:

    chrome.runtime.sendMessage({cmd: "mycmd"}, function(response) {  console.log(response); });

    从background向content script发送消息:

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {  chrome.tabs.sendMessage(tabs[0].id, {cmd: "mycmd"}, function(response) {    console.log(response);  }); });

    接收方代码:

    chrome.runtime.onMessage.addListener(  function(request, sender, sendResponse) { 

    console.log(sender.tab ?  "from a content script:" + sender.tab.url :                "from the extension");

     if (request.cmd== "mycmd") 

          sendResponse( "ok"); 

      });

  4. 4

    长效消息(long-lived connections)是现在消息的收发双方建立通道,然后通过这个通道收发消息。

    连接主动方:

    var port = chrome.runtime.connect({name: "con1"}); port.postMessage({cmd: "mycmd"}); port.onMessage.addListener(function(msg) {  

    if (msg.recmd== remycmd") 

        port.postMessage({cmd: "mycmd2"}); 

      else if (msg.recmd== "remycmd2") 

        port.postMessage({cmd: "mycmd3"}); 

    });

    连接被动方:

    chrome.runtime.onConnect.addListener(function(port) {  console.assert(port.name == "con1");  port.onMessage.addListener(function(msg) {

        if (msg.cmd== "mycmd")     

     port.postMessage({recmd: "remycmd"});

        else if (msg.cmd == "mycmd2") 

          port.postMessage({recmd: "remycmd2"});

        else if (msg.cmd== "mycmd3")

          port.postMessage({recmd: "remycmd3"});

      });

     });

  5. 5

    扩展间消息(cross-extension messages)是在不同的扩展之间收发消息。

    下面是官方文档的代码示例:

    END

一次性消息的例子

  1. 我们修改下前面几节的代码,演示一下one-time requests的机制。

    基本思路是:

    cs1.js获取到新闻列表后发送给background,background将其保存到变量中

    popup每次弹出时向background获取其保存的列表,然后显示到弹出窗口中。

  2. cs1.js中发送新闻列表的代码:

    var newsArray=[];

    for(var i=0;i<len;i++){

    newsArray.push($(alist[i]).attr('title'));

    }

    chrome.extension.sendMessage({cmd: "setNewsArr",'arr':newsArray},function(response) {

    });

  3. background.js中处理消息的代码:

    chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {

    if(request.cmd=='setNewsArr'){

    console.log(request.arr)

    g_newsArr=request.arr;

    }else if(request.cmd=='getNewsArr'){

    sendResponse({'arr':g_newsArr});

    }

    })

  4. popup.js中,获取新闻列表的代码:

    chrome.extension.sendMessage({cmd: "getNewsArr"},function(response) {

    if(response.arr){

    var len=response.arr.length;

    for(var i=0;i<len;i++){

    $('body').append("<br>"+response.arr[i]+'<br>');

    }

    }

    });

  5. 重新加载扩展,打开csdn首页,几秒钟后点击扩展图标。

    END

注意事项

  • 示例代码下载地址:http://pan.baidu.com/s/1eQijCga#dir/path=%2F%E7%BD%91%E7%BB%9C%E5%85%B1%E4%BA%AB%2Ftest%20-%20%E6%B6%88%E6%81%AF%E4%BC%A0%E9%80%92

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

chrome扩展开发:[10]消息传递 的相关文章

  • 为什么 Chrome 审核建议我最小化 Cookie 大小?

    如何最小化请求的 cookie 大小 Chrome 似乎 警告我 我的 cookie 大小为 41B 这根本不是很多 但是它警告我有什么原因吗 这是一个 PHPSESSID cookie 我真的不知道如何最小化它 有任何想法吗 我的请求响应
  • 如何在 Firefox 和 IE 中获得 user-modify:read-write-plaintext-only 行为

    Chrome Safari 支持 CSS webkit user modify read write plaintext only 它可以禁止用户将富文本粘贴到 contenteditable div 中 我不知道如何在 Firefox 和
  • 浏览器显示“已阻止摄像头以保护您的隐私”

    浏览器说 阻止摄像头以保护您的隐私 我的项目包括使用用户摄像头 当我从本地主机访问应用程序时 摄像头工作正常 但是当通过 IP 地址访问时 浏览器默认阻止摄像头和其他资源 我如何允许它们用于我的应用程序 我的应用程序适用于将使用 IP 地址
  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • WebUSB API 和 PC/SC 智能卡读卡器

    是否在WebUSB API 起草的there https wicg github io webusb 能够使用 PC SC 设备 例如智能卡读卡器 或许假设它们符合 CCID 标准 许多设备接近这一标准并且可以使用通用驱动程序 如果是 是否
  • 如何在asp.net mvc中创建弹出窗口?

    无需使用 javascript AJAX 单击超链接时 应该打开一个新的浏览器窗口 基本 HTML 锚元素 a href http www w3schools com target blank Visit W3Schools a ASP N
  • 如何知道浏览器空闲时间?

    如何跟踪浏览器空闲时间 我用的是IE8 我没有使用任何会话管理 也不想在服务器端处理它 这是纯 JavaScript 方法来跟踪空闲时间 并在达到一定限制时执行一些操作 var IDLE TIMEOUT 60 seconds var idl
  • 设置浏览器窗口最小化的最小尺寸限制?

    有没有办法在所有浏览器中手动设置浏览器窗口的最小尺寸 你可以试试 body min width 600px 一旦视口小于 600 像素 您将得到一个水平滚动条 这仅适用于支持 min width CSS 属性的现代浏览器 我认为不可能限制用
  • 布局引擎和javascript引擎的区别

    经过大量阅读 似乎当人们说浏览器引擎时 他们指的是诸如 gecko 或 webkit 之类的布局引擎 我还知道布局引擎基本上负责 绘制 屏幕 而javascript引擎则用于解释 但问题是 对于现代网络应用程序来说 哪一个对性能影响更大 这
  • 在 silverlight 中打开响应流

    我正在尝试使用 Silverlight 3 从服务器返回图像 服务器返回响应流 如下所示 context Response ContentType imageFactory ContentType imgStream WriteTo con
  • 能够在 WPF 网络浏览器中支持 Html5

    我的WPF浏览器不支持网页上的html5元素 我不知道如何实现对它的支持 我确实安装了 IE9 并且可以看到使用 IE 浏览的 html5 元素 非常感谢任何关于如何添加对 html5 支持的帮助 我实际上自己找到了解决方案 一切都在这个页
  • 如何在不打开浏览器的情况下查看 Android 应用程序中的网页?

    嘿 我正在开发一个 Android 应用程序 我想连接到该应用程序内的网络 不过 我在某种程度上尝试过 WebView 但它在我的目录中显示的文件很好 但当连接到 google com 时 它显示错误 然后我添加了这个文件
  • Android 浏览器缩放?

    我正在尝试为 Android 创建一个移动网站 当我将主体宽度设置为 480px 屏幕宽度 时 结果比我预期的大 50 左右 看来 android 正在缩放它所绘制的内容并弄乱了我所有的布局 有谁知道如何禁用它或解决它 我已经在使用这个 您
  • CSS 边框样式 INSET 或 GROOVE 看起来与 IE9 FF4 或 Safari5 或 Chrome2 非常不同

    抱歉 我是个白痴 但是当我尝试获得某种凹槽效果或插入效果作为边框样式时 我从不同的浏览器中得到了一些非常非常大的视觉结果 使用时 border 5px groove A00 or border 5px inset A00 Firefox 3
  • 如何使用 jQuery 禁用 Firefox 对所有图像的默认拖放行为?

    Firefox 有一个恼人的行为 它默认允许用户拖放任何图像元素 如何使用 jQuery 彻底禁用此默认行为 以下将在 Firefox 3 及更高版本中执行此操作 document on dragstart function return
  • Android 4.4 在 WebView 的 onReceivedError 中给出 ERR_CACHE_MISS 错误

    我的布局中有一个网络视图 默认情况下 会在其中打开一个搜索表单 在搜索时 搜索表单下方会出现一个列表部分 如果单击列表中的任何链接 则会打开详细信息页面 现在我想控制网络视图的后退导航 我将这段代码放在 Activity 中 Overrid
  • 为什么 Firefox 会忽略缓存标头并在刷新时重新验证?

    我有一些不可变的图像资源 可以永久缓存 Chrome 似乎尊重我的响应标头 并且不会重新验证资源 以下是 Chrome 中其中一项资源的示例 正如你所看到的 我包括cache control public max age expires e
  • 是否可以加载本地版本的 JavaScript 文件而不是服务器版本?

    只是有一个简单的问题要抛出 看看是否有解决方案 假设我无法访问服务器 我加载一个网页 发现他们有一个从子文件夹加载的 Javascript 文件 比方说 scripts js some js 现在 我想在本地对此文件进行更改 并针对整个站点
  • 如何知道 HTTP 服务器何时完成发送数据

    我正在开发一个面向浏览器 代理的项目 我需要下载网页 向 Web 服务器发送自定义 HTTP 请求后 我开始监听服务器响应 读取响应时 我检查响应标头中的 Content Length row 如果我得到其中之一 很容易确定服务器何时完成发
  • 有什么方法可以安全地在浏览器中显示视频

    有什么方法可以安全地在浏览器中显示视频 就像他的安全措施之一 视频无法下载 谢谢 我想您的意思是您不希望您的视频被下载或复制 如果是这样 那么阻止人们下载视频或多或少是不可能的 甚至有很多工具可以从 YouTube 等大型提供商那里下载 因

随机推荐

  • FSDirectory介绍

    其中常用的就是FSDirectory 表示对文件系统目录的操作 RAMDirectory 内存中的目录操作 首先我们看看类FSDirectory的源代码 import java io File import java io FileInpu
  • 2019完整的大数据知识体系,大数据学习路线图

    任何学习过程都需要一个科学合理的学习路线 才能够有条不紊的完成我们的学习目标 大数据所需学习的内容纷繁复杂 难度较大 有一个合理的大数据学习路线图帮忙理清思路就显得尤为必要 在这里还是要推荐下我自己建的大数据学习交流群 199427210
  • DL-深度学习基础

    目录 过拟合与欠拟合 降低过拟合风险的方法 降低欠拟合风险的方法 过拟合与欠拟合 欠拟合指模型不能在训练集上获得足够低的训练误差 过拟合指模型的训练误差与测试误差 泛化误差 之间差距过大 反应在评价指标上 就是模型在训练集上表现良好 但是在
  • Unity实战(11):项目非启动状态下使用代码批量替换材质

    目录 前言 配置环境 一 场景准备 二 代码演示 三 效果呈现 四 关于Resources Load 的说明 前言 本文内容为unity在编辑状态 非启动状态 下使用代码批量替换材质 该方法也适用于其他在编辑状态下对物体的操作需求 配置环境
  • Python15行代码实现免费发送手机短信,推送消息

    本文主要讲如何实现发送短信的功能 全部代码只用15行 实现的功能 通过代码定时给手机推送短信 短信内容可以自定义文字 当然你也可以去别的网站爬取每日心灵鸡汤 天气预报或其它信息进行推送 首先贴出实现的效果图 后面再分两步详细描述实现过程 第
  • Postman使用_接口导入导出

    文章目录 Postman导入数据 Collections导出数据 Environments导出数据 Postman导出所有数据 Postman导入数据 可以导入collections 接口集 Environments 环境配置 通过分享的链
  • 贪心、递归、递推以及动态规划算法的分析与对比

    算法导论 贪心算法 递归算法 动态规划算法总结 一般实际生活中我们遇到的算法分为四类 一 gt 判定性问题 二 gt 最优化问题 三 gt 构造性问题 四 gt 计算性问题 而今天所要总结的算法就是着重解决 最优化问题 算法之道 对三种算法
  • 【Java】基本类型之double(九)

    特征 double 数据类型是双精度 64 位 符合IEEE 754标准的浮点数 浮点数的默认类型为double类型 double类型同样不能表示精确的值 如货币 默认值是 0 0d 例子 double d1 123 4 精度 double
  • 重绘控件

    在Qt中 paintEvent方法是进行重绘的 只要出现以下几种情况 系统就会自动调用paintEvent方法 a 当窗口部件第一次显示时 系统会自动产生一个绘图事件 b 重新调整窗口部件大小 c 当窗口部件被其他部件遮挡 然后又再次显示出
  • 亲测微信小程序备案流程,微信小程序如何备案,微信小程序备案所需准备资料

    微信小程序为什么要备案 微信官方给出如下说明 1 若微信小程序未上架 自2023年9月1日起 微信小程序须完成备案后才可上架 2 若微信小程序已上架 请于2024年3月31日前完成备案 逾期未完成备案 平台将按照备案相关规定于2024年4月
  • [C++]生产消费模型

    生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题 生产者和消费者彼此之间不直接通讯 而通过阻塞队列来进行通讯 所以生产者生产完数据之后不用等待消费者处理 直接扔给阻塞队列 消费者不找生产者要数据 而是直接从阻塞队列里取 阻塞
  • 图解 Scrum 精要,一看就会!

    互联网时代 商业环境急剧变化 客户要求越来越高 竞争对手不断涌现 企业所处理的问题越来越易变 不确定 复杂 模糊 传统管理模式不再有效 敏捷管理模式应运而生 全球市值四大的苹果 微软 亚马逊 Facebook 都不约而同地采用了不同形式的敏
  • diffusion model

    尽管diffusion model在各类任务中都有着优秀的表现 它仍还有自己的缺点 并有诸多研究对diffusion model进行了改善 为了系统地阐明diffusion model的研究进展 我们总结了原始扩散模型的三个主要缺点 采样速
  • 计算机保研面试之专业课如何复习?

    专业课的文档我们把CSDN上的所有博客 四千多篇 经验贴字问到的专业课问题做了整理归纳 总结出来的这些面试比考的 找了很多人针对难度进行标星修订重要程度 即使是明天面试把星多的准备一下也能应付面试 付费的内容包括 1 这里把操作系统16问送
  • 三种Sigmoid的区别

    文章目录 torch sigmoid torch nn sigmoid torch nn funtional sigmoid 总结 torch sigmoid 这是一个方法 拥有Parameters以及Returns 参考官网的解释 就可以
  • bash预定义变量+read(获取键盘输入)

    程序执行的返回值 最后一次执行命令的返回状态 如果正确执行 则返回0 如果返回为非零 具体数值由命令决定 则上一条命令执行不正确 执行完一条命令之后 立马敲入echo 可得到返回值 例如 ls 执行之后 再敲入echo 可以得到0 前面说到
  • 怎么快速布局一个html页面,前端入门篇(二):利用Div + CSS快速布局页面

    在各类智能手机和平板出现前的很长一段时间里 Web网页都是通过表格进行布局的 由于表格在视觉呈现上的直观 早期很多WYSIWYG 所见即所得 的网页设计软件通常也多使用表格 但是这种布局方式有很大的局限性 比如 同一行或列的单元格在长度 宽
  • 【颜色识别】【Python+OpenCV】KNN(K近邻算法)实现魔方颜色识别【 3-1】

    更多内容参考 原创文章作者 无敌三角猫 如若转载 请注明出处 古月居 https www guyuehome com 37111 1 颜色识别 该程序利用KNN实现魔方颜色识别 特征采用RGB的颜色直方图 它可以区分白 黑 红 绿 蓝 橙色
  • SO动态链接库文件的编译和使用

    做C语言开发的都知道 在Linux环境中动态链接库以 so结尾 在Windows环境中动态链接库以 dll结尾 在讲使用之前 我先来给大家补补基础 链接库分为 静态链接库 和 动态链接库 静态链接库 a库 在 编译 的时候 库函数中函数的定
  • chrome扩展开发:[10]消息传递

    转自 http jingyan baidu com article 414eccf616e2c56b431f0a97 html 工具 原料 chrome浏览器 文本编辑器 概述 1 前面几篇文章我们介绍了browser action bac