Chrome扩展及应用开发 入门笔记(五)消息机制

简介

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


1.  runtime.sendMessage、runtime.onMessage(可以在content_scripts中运行,所以扩展的其他页面也可以同content_scripts相互通信)
2.  runtime.connect和runtime.onConnect(不可以在content_scripts中运行为更高级的接口,在http://developer.chrome.com/extensions/extension得到有关这两个接口的完整官方文档。)


runtime.sendMessage完整的方法为:

chrome.runtime.sendMessage(extensionId, message, options, callback)
其中extensionId为所发送消息的目标扩展,如果不指定这个值,则默认为发起此消息的扩展本身;

1. Content script 给 popup.js发消息(二者之间通信)

content.js
<pre style="font-family: 宋体; font-size: 9pt; background-color: rgb(255, 255, 255);"><pre name="code" class="javascript">function test() {
   chrome.extension.sendMessage({cmd: "fromcontentscript"}, function (response) {
      alert( "fromcontentscript");
      if (response.frompopup) {
         alert(response.frompopup);
      }

   });
}
 
 
 
 
 
popop.js
chrome.extension.onMessage.addListener(//直接接受popup发来的消息
		function(request, sender, sendResponse) {
			if (request.cmd == "fromcontentscript")
				sendResponse({frompopup: "popup 接受到了来自contetn script的消息"})
			else
				sendResponse({frompopup: "不告诉你"})
		});
注:  发送方的  cmd: "fromcontentscript" 与 接收方的   request.cmd == "fromcontentscript" 对应;
         发送发收到的消息回复 response.frompopup 与 接收方的响应 sendResponse({frompopup: "popup 接受到了来自contetn script的消息"}) 对应
 

2. popup.js 给 Content script  发消息(二者之间通信)

popup.js
function clearRequest() {

	chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
		chrome.tabs.sendMessage(tabs[0].id, {message:"clear"}, function(response) {// popup直接给contentscript发消息
			if(response.result=="ok"){
				//$('#localstorage').innerHTML="";
				var p = document.getElementsByTagName("p");
				p[0].innerHTML="";

			}
		});
	});

}
content.js
chrome.extension.onMessage.addListener(//直接接受popup发来的消息
		function(request, sender, sendResponse) {
			if (request.message == "clear") {
				test();
				sendResponse({result: clearLocalStorage()})
			}
			else
				sendResponse({result: "不告诉你"})
		});
 

3.  Content script 给 popup.js发消息(通过background作为中转)

作用: content 使用消息  setNewsArr 将数据     newsArray ,   newsArrayCookie 传递给 popUp。
content.js
chrome.extension.sendMessage({cmd: "setNewsArr",'arr':newsArray,'arrCookie':newsArrayCookie},function(response) {
	});
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>');
			}
		}
		if(response.arrCookie){//localstorage
			var lenCookie=response.arrCookie.length;


			for(var i=0;i<lenCookie;i++){
				$('#localstorage').append("<br>"+response.arrCookie[i]+'<br>');
			}

		}
	});//

background.js 先将content发来的内容暂存,再将其转发给popup
$(document).ready(function(){
	//getCurIp();
	try{
	g_newsArr=JSON.parse(''+localStorage['newsArr']);// background.html 页面的localStorage['newsArr']内容
		g_newsArrCookie=JSON.parse(''+localStorage['newsArrCookie']);// background.html 页面的localStorage['newsArr']内容
		g_setclearLocalStorage=localStorage['setclearLocalStorage'];
	}catch(c){}
	chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
		if(request.cmd=='setNewsArr'){
			console.log(request.arr)
			g_newsArr=request.arr;
			g_newsArrCookie=request.arrCookie;
			//g_newsArr+="zpp";//
			localStorage['newsArrCookie']=JSON.stringify(g_newsArrCookie);

			localStorage['newsArr']=JSON.stringify(g_newsArr);



		}else if(request.cmd=='getNewsArr'){
			sendResponse({'arr':g_newsArr,'arrCookie':g_newsArrCookie});
		}
	})
});

参考:

4. popup给background发消息

popop.js
chrome.runtime.sendMessage('Hello', function(response){
    document.write(response);
});

background.js
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
    if(message == 'Hello'){
        sendResponse('Hello from background.');
    }
});


结果 : 点击popup时,出现 Hello from background

更多例子:

现在在 popup.js (连接到按钮的操作)我有:

function getURL()
{
   chrome.extension.sendMessage({greeting: "GetURL"}, 
          function(response) { tabURL = response.navURL });

   $("#tabURL").text(tabURL);
}

在 背景.js 我有:
chrome.runtime.onMessage.addListener( function(request,sender,sendResponse)
{
    if( request.greeting === "GetURL" )
    {
        var tabURL = "Not set yet";
        chrome.tabs.query({active:true},function(tabs){
            if(tabs.length === 0) {
                sendResponse({});
                return;
            }
            tabURL = tabs[0].url;
            sendResponse( {navURL:tabURL} );
        });        
    }
}

ps:

1]   

chrome.runtime.sendMessage({cmd: "setNewsArr2"},function(response) {
chrome.extension.sendMessage({cmd: "setNewsArr"},function(response) {

给background 发消息;

background中可以相互使用接收消息
2]  消息分类
A :一次性消息(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);  }); });


接受消息时一致;



B: 长效消息(long-lived connections)是现在消息的收发双方建立通道,然后通过这个通道收发消息。
连接主动方:
var port = chrome.runtime.connect({name: "con1"}); port.postMessage({cmd:


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

5、(非消息形式,实现消息目的)popup可以直接调用background中的JS方法

chrome扩展chrome.extension.getBackgroundPage()方法调用_qq_38469220的博客-CSDN博客

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
chrome扩展应用开发.pdf》是一本介绍如何使用Chrome浏览器开发扩展和应用程序的技术指南。本书深入浅出地介绍了Chrome扩展和应用的基本原理、开发环境的搭建、开发工具的使用以及常见功能的实现方法。通过学习本书,读者可以掌握Chrome扩展和应用的开发技术,快速实现自己的创意和想法。 本书首先介绍了Chrome扩展和应用的基本概念和原理,包括扩展和应用的区别、开发所需的基本知识和技能等。然后,本书详细介绍了如何搭建Chrome扩展和应用的开发环境,包括安装Chrome浏览器、配置开发者工具等。接着,本书逐步介绍了如何使用HTML、CSS和JavaScript等技术来开发各种类型的Chrome扩展和应用,并通过实例代码和案例分析帮助读者理解和掌握开发技术。 此外,本书还介绍了一些常见功能的实现方法,包括消息通信、数据存储、页面操作等。通过学习本书,读者可以了解到如何使用Chrome扩展和应用提高浏览器的功能,实现个性化定制和增强浏览体验。最后,本书还介绍了如何发布和测试Chrome扩展和应用,帮助读者将自己的作品分享和推广给更多的用户。 总之,《chrome扩展应用开发.pdf》是一本权威、实用的指南书籍,适合对Chrome扩展应用开发感兴趣的开发者和爱好者阅读学习。通过学习本书,读者可以掌握Chrome扩展应用开发的基本技术,快速实现自己的创意和想法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多则惑少则明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值