美文网首页
扩展页面间的通信

扩展页面间的通信

作者: SingleDiego | 来源:发表于2018-05-31 16:46 被阅读18次

参考原文

知识点:

  • runtime.sendMessage
  • runtime.onMessage




Chrome 提供了 4 个有关扩展页面间相互通信的接口,分别是:

  • runtime.sendMessage
  • runtime.onMessage
  • runtime.connect
  • runtime.onConnect

做为一部入门级教程,此节将只讲解 runtime.sendMessageruntime.onMessage 接口,runtime.connectruntime.onConnect 做为更高级的接口请读者依据自己的兴趣自行学习,你可以在 http://developer.chrome.com/extensions/extension 得到有关这两个接口的完整官方文档。

请注意,Chrome 提供的大部分 API 是不支持在 content_scripts 中运行的,但 runtime.sendMessageruntime.onMessage 可以在 content_scripts 中运行,所以扩展的其他页面也可以同 content_scripts 相互通信。




runtime.sendMessage 完整的方法为:

chrome.runtime.sendMessage(extensionId, message, options, callback)

参数说明:

  • extensionId 为所发送消息的目标扩展,如果不指定这个值,则默认为发起此消息的扩展本身

  • message 为要发送的内容,类型随意,内容随意,比如可以是 'Hello',也可以是 {action: 'play'}2013['Jim', 'Tom', 'Kate'] 等等

  • options 为对象类型,包含一个值为布尔型的 includeTlsChannelId 属性,此属性的值决定扩展发起此消息时是否要将 TLS 通道 ID 发送给监听此消息的外部扩展(此属性仅在扩展和网页间通信时才会用到。),有关 TLS 的相关内容可以参考 http://www.google.com/intl/zh-CN/chrome/browser/privacy/whitepaper.html#tls,这是有关加强用户连接安全性的技术,如果这个参数你捉摸不透,不必理睬它,options是一个可选参数

  • callback 是回调函数,用于接收返回结果,同样是一个可选参数。




runtime.onMessage完整的方法为:

chrome.runtime.onMessage.addListener(callback)

此处的 callback 为必选参数,为回调函数。callback 接收到的参数有三个,分别是 messagesendersendResponse,即消息内容、消息发送者相关信息和相应函数。

其中 sender 对象包含4个属性,分别是 tabidurltlsChannelIdtab 是发起消息的标签。




下面我们写一个小例子来说明。

编写 manifest.json 文件:

{
    "manifest_version": 2,
    "name": "扩展内部通信Demo",
    "version": "1.0",
    "description": "扩展内部通信Demo",
    
    "browser_action": {
        "default_popup": "popup.html"
    },

    "background": {
        "scripts": [
            "js/background.js"
        ]
    }
}

我们的 popup.html 不需写入任何内容,只需引入一段 JS:

<script src="js/popup.js"></script>

编写 popup.js 文件:

// 发送消息,回调函数把接收到的回应写到网页中
chrome.runtime.sendMessage('Hello', function(response){
    document.write(response);
});

我们在 background 接收信息并处理,现在编写 background.js 文件:

// 接收消息,如果收到的消息是 'Hello',发送回应
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
    if(message == 'Hello'){
        sendResponse('Hello from background.');
    }
});

最后插件的效果:


相关文章

  • 扩展页面间的通信

    参考原文 知识点: runtime.sendMessage runtime.onMessage Chrome 提供...

  • Chrome扩展基础---扩展页面间的通信

    有时需要让扩展中的多个页面之间,或者不同扩展的多个页面之间相互传输数据,以获得彼此的状态。比如音乐播放器扩展,...

  • 前端跨页面通信

    跨页面通信主要分两大类 同源页面间的跨页面通信 非同源页面间的跨页面通信 同源页面间的跨页面通信 1.BroadC...

  • 微信小程序跳转传参,参数过长情况

    通过EventChannel建立页面间事件通信通道页面间通信EventChannel 通过encodeURICom...

  • 页面间通信

    url 传参 index.js 路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参...

  • iframe页面间通信

    iframe父子页面间通信 相互调用对方的方法 子级页面调用父级页面 父级页面调用子级页面 localStorag...

  • WEEX页面间通信

    背景 周末,有空正在处理一个简单的需求:有两个按钮,第一个按钮点完之后跳转到一个新的页面,第二个按钮点完之后也跳转...

  • 小程序页面之间如何通讯

    首先将通信的模型列举出来, 分为以下几种 1.兄弟页面间通信2.父路径页面向子路径页面通信3.子路径页面向父路径页...

  • 前端跨tab页通信

    一、同源页面间的跨页面通信 BroadCast Channel Service WorkerService Wor...

  • flutter 数据传递与通信

    flutter 数据传递与通信 1.页面传值(页面间跳转) class GoodDetailPage extend...

网友评论

      本文标题:扩展页面间的通信

      本文链接:https://www.haomeiwen.com/subject/crtqsftx.html