162 lines
5.1 KiB
JavaScript
162 lines
5.1 KiB
JavaScript
console.log('这是content script!');
|
||
|
||
// 注意,必须设置了run_at=document_start 此段代码才会生效
|
||
document.addEventListener('DOMContentLoaded', function()
|
||
{
|
||
// 注入自定义JS
|
||
injectCustomJs();
|
||
// 给谷歌搜索结果的超链接增加 _target="blank"
|
||
if(location.host == 'www.google.com.tw')
|
||
{
|
||
var objs = document.querySelectorAll('h3.r a');
|
||
for(var i=0; i<objs.length; i++)
|
||
{
|
||
objs[i].setAttribute('_target', 'blank');
|
||
}
|
||
console.log('已处理谷歌超链接!');
|
||
}
|
||
else if(location.host == 'www.baidu.com')
|
||
{
|
||
function fuckBaiduAD()
|
||
{
|
||
if(document.getElementById('my_custom_css')) return;
|
||
var temp = document.createElement('style');
|
||
temp.id = 'my_custom_css';
|
||
(document.head || document.body).appendChild(temp);
|
||
var css = `
|
||
/* 移除百度右侧广告 */
|
||
#content_right{display:none;}
|
||
/* 覆盖整个屏幕的相关推荐 */
|
||
.rrecom-btn-parent{display:none;}'
|
||
/* 难看的按钮 */
|
||
.result-op.xpath-log{display:none !important;}`;
|
||
temp.innerHTML = css;
|
||
console.log('已注入自定义CSS!');
|
||
// 屏蔽百度推广信息
|
||
$('[data-tuiguang]').parents('[data-click]').remove();
|
||
// 重新搜索时页面不会刷新,但是被注入的style会被移除,所以需要重新执行
|
||
temp.addEventListener('DOMNodeRemoved', function(e)
|
||
{
|
||
console.log('自定义CSS被移除,重新注入!');
|
||
fuckBaiduAD();
|
||
});
|
||
}
|
||
fuckBaiduAD();
|
||
initCustomPanel();
|
||
initCustomEventListen();
|
||
}
|
||
});
|
||
|
||
function initCustomPanel()
|
||
{
|
||
var panel = document.createElement('div');
|
||
panel.className = 'chrome-plugin-demo-panel';
|
||
panel.innerHTML = `
|
||
<h2>injected-script操作content-script演示区:</h2>
|
||
<div class="btn-area">
|
||
<a href="javascript:sendMessageToContentScriptByPostMessage('你好,我是普通页面!')">通过postMessage发送消息给content-script</a><br>
|
||
<a href="javascript:sendMessageToContentScriptByEvent('你好啊!我是通过DOM事件发送的消息!')">通过DOM事件发送消息给content-script</a><br>
|
||
<a href="javascript:invokeContentScript('sendMessageToBackground()')">发送消息到后台或者popup</a><br>
|
||
</div>
|
||
<div id="my_custom_log">
|
||
</div>
|
||
`;
|
||
document.body.appendChild(panel);
|
||
}
|
||
|
||
// 向页面注入JS
|
||
function injectCustomJs(jsPath)
|
||
{
|
||
jsPath = jsPath || 'js/inject.js';
|
||
var temp = document.createElement('script');
|
||
temp.setAttribute('type', 'text/javascript');
|
||
// 获得的地址类似:chrome-extension://ihcokhadfjfchaeagdoclpnjdiokfakg/js/inject.js
|
||
temp.src = chrome.extension.getURL(jsPath);
|
||
temp.onload = function()
|
||
{
|
||
// 放在页面不好看,执行完后移除掉
|
||
this.parentNode.removeChild(this);
|
||
};
|
||
document.head.appendChild(temp);
|
||
}
|
||
|
||
// 接收来自后台的消息
|
||
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse)
|
||
{
|
||
console.log('收到来自 ' + (sender.tab ? "content-script(" + sender.tab.url + ")" : "popup或者background") + ' 的消息:', request);
|
||
if(request.cmd == 'update_font_size') {
|
||
var ele = document.createElement('style');
|
||
ele.innerHTML = `* {font-size: ${request.size}px !important;}`;
|
||
document.head.appendChild(ele);
|
||
}
|
||
else {
|
||
tip(JSON.stringify(request));
|
||
sendResponse('我收到你的消息了:'+JSON.stringify(request));
|
||
}
|
||
});
|
||
|
||
// 主动发送消息给后台
|
||
// 要演示此功能,请打开控制台主动执行sendMessageToBackground()
|
||
function sendMessageToBackground(message) {
|
||
chrome.runtime.sendMessage({greeting: message || '你好,我是content-script呀,我主动发消息给后台!'}, function(response) {
|
||
tip('收到来自后台的回复:' + response);
|
||
});
|
||
}
|
||
|
||
// 监听长连接
|
||
chrome.runtime.onConnect.addListener(function(port) {
|
||
console.log(port);
|
||
if(port.name == 'test-connect') {
|
||
port.onMessage.addListener(function(msg) {
|
||
console.log('收到长连接消息:', msg);
|
||
tip('收到长连接消息:' + JSON.stringify(msg));
|
||
if(msg.question == '你是谁啊?') port.postMessage({answer: '我是你爸!'});
|
||
});
|
||
}
|
||
});
|
||
|
||
window.addEventListener("message", function(e)
|
||
{
|
||
console.log('收到消息:', e.data);
|
||
if(e.data && e.data.cmd == 'invoke') {
|
||
eval('('+e.data.code+')');
|
||
}
|
||
else if(e.data && e.data.cmd == 'message') {
|
||
tip(e.data.data);
|
||
}
|
||
}, false);
|
||
|
||
|
||
function initCustomEventListen() {
|
||
var hiddenDiv = document.getElementById('myCustomEventDiv');
|
||
if(!hiddenDiv) {
|
||
hiddenDiv = document.createElement('div');
|
||
hiddenDiv.style.display = 'none';
|
||
hiddenDiv.id = 'myCustomEventDiv';
|
||
document.body.appendChild(hiddenDiv);
|
||
}
|
||
hiddenDiv.addEventListener('myCustomEvent', function() {
|
||
var eventData = document.getElementById('myCustomEventDiv').innerText;
|
||
tip('收到自定义事件:' + eventData);
|
||
});
|
||
}
|
||
|
||
var tipCount = 0;
|
||
// 简单的消息通知
|
||
function tip(info) {
|
||
info = info || '';
|
||
var ele = document.createElement('div');
|
||
ele.className = 'chrome-plugin-simple-tip slideInLeft';
|
||
ele.style.top = tipCount * 70 + 20 + 'px';
|
||
ele.innerHTML = `<div>${info}</div>`;
|
||
document.body.appendChild(ele);
|
||
ele.classList.add('animated');
|
||
tipCount++;
|
||
setTimeout(() => {
|
||
ele.style.top = '-100px';
|
||
setTimeout(() => {
|
||
ele.remove();
|
||
tipCount--;
|
||
}, 400);
|
||
}, 3000);
|
||
} |