谷歌浏览器插件

最主要的文件manifest.json 插件的配置文件

{
  "manifest_version": 3,  
  "name": "GE-iconnect",  
  "description": "小工具",  
  "version": "1.0",  
  "icons": {
	"16": "logo.ico",
    "48": "logo.ico"
  },
  //也就是后台服务,主要是负责处理和监听浏览器的各类事件。后台服务可以使用所有ChromeAPI,但是不能直接与网页内容交互。
  "background": {
    "service_worker": "background.js"
  },
"permissions": [
    "activeTab","tabs","notifications"
  ],
  "action": {
	"default_popup": "main.html" // optional
	},
  //从配置中可得知内容脚本的注册规则:当网址匹配上“https://baidu.com/*”时,运行content.js脚本。
  "content_scripts": [
    {
      "js": [
        "content.js"
      ],
      "matches": [
        "https://www.baidu.com/*"
      ]
    }
  ]
}

background.js 后台运行的js可以调用谷歌api 权限很高

// 监听打开新页面
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.type === 'OPEN_PAGE') {
    chrome.tabs.create({ url: message.url });
  }
});

content.js 监听文件 当访问百度触发,可设置

var websock = null; //建立的连接
var lockReconnect = false; //是否真正建立连接
var timeout = 20 * 1000; //20秒一次心跳
var timeoutObj = null; //心跳心跳倒计时
var serverTimeoutObj = null; //心跳倒计时
var timeoutnum = null; //断开 重连倒计时
var instanceNotification = Notification || window.Notification; // 20240410 添加系统通知功能
//503194915

document.getElementById('sendBu').addEventListener('click', function() {
	//连接检测权限
    setPermission();
	//初始化webscoket
	initWebSocket();
});



function initWebSocket() {
	//建立连接
	//初始化weosocket
	//weosocket 地址
	let userName = $("#queryText").val();
	const wsuri = 'ws://localhost:8080/websocket/' + userName
	websock = new WebSocket(wsuri);
	// WebSocket接受到服务端消息
	websock.addEventListener('open',function(event){			
		//连接成功事件
		websocketsend('发送数据');
		//提示成功
		$("#msg").append("<p style='color:blue;margin:0;'>[" + getTime() + "] 连接成功</p>");
		//开启心跳
		start();
	})	  
	// WebSocket接受到服务端消息
	websock.addEventListener('message',function(event){
		//接收服务器推送的信息
		//打印收到服务器的内容
		console.log('收到服务器信息', event.data);
		$("#msg").append('[' + getTime() + ']  收到服务器信息: '+ event.data + '<br>');
		let data = event.data
		if (data == 'open') {
		  // 20240410 添加系统通知功能
		  creatNotification();
		}
		if (data == 'openFlag') {
		  // 20240410 添加系统通知功能
		  creatNotificationMp3();
		}
		//收到服务器信息,心跳重置
		reset();
	})
	// WebSocket 连接被关闭
	websock.addEventListener('close',function(event){
				
		//检测客户机网络
		if (navigator.onLine) {
			$("#msg").append("<p style='color:blue;margin:0;'>[" + getTime() + "]---客户机网络正常服务器断开</p>");
		} else {
			$("#msg").append("<p style='color:blue;margin:0;'>[" + getTime() + "]---客户机网络断开</p>");
		}
		
		//重连
		reconnect();
	})
	// WebSocket 连接因错误而关闭
	websock.addEventListener('error',function(event){
		$("#msg").append("<p style='color:red;margin:0;'>[" + getTime() + "]---WebSocket连接发生错误</p>");
		//重连
		reconnect()
	})
};
	  

function reconnect() {
	console.log('连接重试中请稍等');
	
	//重新连接
	if (lockReconnect) {
	  return
	}
	lockReconnect = true
	//没连接上会一直重连,设置延迟避免请求过多
	timeoutnum && clearTimeout(timeoutnum)
	timeoutnum = setTimeout(function() {
	 //新连接
	initWebSocket();
	lockReconnect = false
	}, 5000)
};

function reset() {
	//重置心跳
	var that = this
	//清除时间
	clearTimeout(timeoutObj);
	clearTimeout(serverTimeoutObj);
	//重启心跳
	start();
};

function start() {
	//开启心跳
	timeoutObj && clearTimeout(timeoutObj)
	serverTimeoutObj && clearTimeout(serverTimeoutObj)
	timeoutObj = setTimeout(function() {
	  //这里发送一个心跳,后端收到后,返回一个心跳消息
	  if (websock.readyState == 1) {
		//如果连接正常
		websock.send('heartbeat');
	  } else {
		//否则重连
		reconnect()
	  }
	  serverTimeoutObj = setTimeout(function() {
		//超时关闭
		websock.close();
	  }, timeout)
	}, timeout)
};

function  websocketsend(msg) {
	//向服务器发送信息
	websock.send(msg);
}	  
	  
	
function setPermission() {
	//请求获取通知权限
	instanceNotification.requestPermission(function(PERMISSION) {
	  if (PERMISSION === 'granted') {
		$("#msg").append("<p style='color:green;margin:0;'>[" + getTime() + "]---用户允许通知了</p>");
		//creatNotification();
	  } else {
		$("#msg").append("<p style='color:green;margin:0;'>[" + getTime() + "]---用户拒绝了</p>");
	  }
	})
};
	
// 创建通知	
function creatNotification() {
	if (!window.Notification) {
	  alert('浏览器不支持通知!');
	  return false
	}
	console.log(window.Notification.permission);
	if (window.Notification.permission != 'granted') {
	$("#msg").append("<p style='color:green;margin:0;'>[" + getTime() + "]---用户未开启通知权限</p>");
	  return false
	}
	const options = {
	  body: "",
	  silent: true,
	  requireInteraction:true
	};
	var instanceNotification = new Notification("尚有新报修单待处理,请及时受理!!!", options);
	instanceNotification.onshow = function() {
	$("#msg").append("<p style='color:green;margin:0;'>[" + getTime() + "]---无声弹框通知开启</p>");
	  //3s后自动关闭通知
	  setTimeout(function() {
		instanceNotification.close();
	  }, 3 * 1000)
	}
	instanceNotification.onclick = function() {
	  alert('打开页面');
	  window.open('/note');
	  instanceNotification.close();
	}
	instanceNotification.onclose = function() {
		$("#msg").append("<p style='color:green;margin:0;'>[" + getTime() + "]---无声弹框通知关闭</p>");
	}
	instanceNotification.onerror = function() {
		$("#msg").append("<p style='color:red;margin:0;'>[" + getTime() + "]---无声弹框通知异常</p>");
	}
};

// 创建声音通知
function creatNotificationMp3() {
	if (!window.Notification) {
	  alert('浏览器不支持通知!')
	  return false
	}
	console.log(window.Notification.permission);
	if (window.Notification.permission != 'granted') {
		$("#msg").append("<p style='color:green;margin:0;'>[" + getTime() + "]---用户未开启通知权限</p>");
	  return false
	}
	const options = {
	  body: "",
	  silent: false,
	  requireInteraction:true
	};
	var instanceNotification = new Notification("尚有新报修单待处理,请及时受理!!!", options);
	instanceNotification.onshow = function() {
		$("#msg").append("<p style='color:green;margin:0;'>[" + getTime() + "]---有声弹框通知开启</p>");
		//3s后自动关闭通知
		setTimeout(function() {
		instanceNotification.close();
		}, 3 * 1000)
	}
	instanceNotification.onclick = function() {
		alert('打开页面');
		window.open('/note');
		instanceNotification.close();
	}
	instanceNotification.onclose = function() {
		$("#msg").append("<p style='color:green;margin:0;'>[" + getTime() + "]---有声弹框通知关闭</p>");
	}
	instanceNotification.onerror = function() {
		$("#msg").append("<p style='color:red;margin:0;'>[" + getTime() + "]---有声弹框通知异常</p>");
	}
};


// 获取时间
function getTime(){
	var currentTime = new Date();
    var timeString = currentTime.toISOString(); // 转换为ISO格式的字符串
 
    // 如果你需要不同的格式,可以使用Date对象的其他方法进行格式化
    // 例如:时间格式为 "YYYY-MM-DD HH:mm:ss"
    var formattedTime = currentTime.getFullYear() + '-' +
                        ('0' + (currentTime.getMonth() + 1)).slice(-2) + '-' +
                        ('0' + currentTime.getDate()).slice(-2) + ' ' +
                        ('0' + currentTime.getHours()).slice(-2) + ':' +
                        ('0' + currentTime.getMinutes()).slice(-2) + ':' +
                        ('0' + currentTime.getSeconds()).slice(-2);
 
    //console.log(timeString); // 输出ISO字符串
    //console.log(formattedTime); // 输出格式化的时间字符串
	
	return formattedTime;

}

popup.html 主要页面

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
    <title>webscoket_tool</title>
	
</head>
<body>
<div>iconnect 报警辅助工具</div>
<div id="data">
	用户名:<input id="queryText" type="input"  value="" />
	密码:<input id="password" type="password" value="" />
	<button id="sendBu">打开连接</button>
	<div id="msg" >
			
	</div>
</div>

</body>
</html>
<script src="jquery.min.js" ></script>
<script src="popup.js"></script>

main.html 过度页面

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
    <title>webscoket_tool</title>
</head>
<body>
</body>
</html>
<script src="jquery.min.js" ></script>
<script src="main.js"></script>

main.js 

chrome.runtime.sendMessage({ type: 'OPEN_PAGE', url: 'popup.html' });

插件简介】 一款集成本地书签、历史记录与 优快云搜索(so.csdn.net) 的搜索工具;帮助您的浏览器提升10倍效率,打造更酷的chrome!;优快云浏览器助手插件优快云官方开发,集成一键呼出搜索、万能快捷工具、个性化标签页和底层免广告四大功能,让您在工作学习场景中,告别繁琐复杂的切换,快速解决问题,打造专属你的效率神器!①一键快捷搜索:在页面任意网页下,点击键盘的 "C",即可弹出 [极简搜索框], 输入关键词即可快速展现 "网页、书签、历史记录"的搜索结果。 ②万能快捷工具:按C呼出搜索框后,输入代码即可快速搜索。③个性化标签页: 新标签页可自定义换肤,自动展现程序员热门网站,并可以自定义常用网站,同时可选择多种搜索引擎,打造专属你的清爽标签页!④底层永久免广告:即日起,安装该插件新用户,可永久去优快云站内广告。从底层去广告,占用内存极小,让上网体验更清爽。去广告特权版本限时下载! 【插件网站】 https://plugin.csdn.net 【插件更新】 2021-03-01 09:54:18 【插件版本】 2.8.1 【插件标签】 高效开发 工具 Chrome插件插件安装教程】 请下载文件后先解压,然后进入页面: chrome://extensions/ 将文件拖拽到该页面,完成安装。 具体步骤: https://t.csdnimg.cn/NxMv 【热门插件】 ·优快云 浏览器助手: https://plugin.csdn.net/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值