2017-06-02 19:40:48 +08:00
|
|
|
|
console.log('这是content script!');
|
|
|
|
|
|
2017-06-16 18:54:57 +08:00
|
|
|
|
// 注意,必须设置了run_at=document_start 此段代码才会生效
|
2017-06-02 19:40:48 +08:00
|
|
|
|
document.addEventListener('DOMContentLoaded', function()
|
|
|
|
|
{
|
2017-06-23 21:11:15 +08:00
|
|
|
|
// 注入自定义JS
|
|
|
|
|
injectCustomJs();
|
2017-06-02 19:40:48 +08:00
|
|
|
|
// 给谷歌搜索结果的超链接增加 _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('已处理谷歌超链接!');
|
|
|
|
|
}
|
2017-06-16 18:54:57 +08:00
|
|
|
|
else if(location.host == 'www.baidu.com')
|
|
|
|
|
{
|
|
|
|
|
function fuckBaiduAD()
|
|
|
|
|
{
|
2017-06-23 21:11:15 +08:00
|
|
|
|
if(document.getElementById('my_custom_css')) return;
|
2017-06-16 18:54:57 +08:00
|
|
|
|
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;}'
|
|
|
|
|
/* 难看的按钮 */
|
2017-06-23 21:11:15 +08:00
|
|
|
|
.result-op.xpath-log{display:none !important;}`;
|
2017-06-16 18:54:57 +08:00
|
|
|
|
temp.innerHTML = css;
|
|
|
|
|
console.log('已注入自定义CSS!');
|
|
|
|
|
// 屏蔽百度推广信息
|
2017-07-10 22:36:59 +08:00
|
|
|
|
removeAdByJs();
|
|
|
|
|
// 这种必须用JS移除的广告一般会有延迟,干脆每隔一段时间清楚一次
|
|
|
|
|
interval = setInterval(removeAdByJs, 2000);
|
|
|
|
|
|
2017-06-16 18:54:57 +08:00
|
|
|
|
// 重新搜索时页面不会刷新,但是被注入的style会被移除,所以需要重新执行
|
|
|
|
|
temp.addEventListener('DOMNodeRemoved', function(e)
|
|
|
|
|
{
|
|
|
|
|
console.log('自定义CSS被移除,重新注入!');
|
2017-07-10 22:36:59 +08:00
|
|
|
|
if(interval) clearInterval(interval);
|
2017-06-16 18:54:57 +08:00
|
|
|
|
fuckBaiduAD();
|
|
|
|
|
});
|
|
|
|
|
}
|
2017-07-10 22:36:59 +08:00
|
|
|
|
let interval = 0;
|
|
|
|
|
function removeAdByJs()
|
|
|
|
|
{
|
|
|
|
|
$('[data-tuiguang]').parents('[data-click]').remove();
|
|
|
|
|
}
|
2017-06-16 18:54:57 +08:00
|
|
|
|
fuckBaiduAD();
|
2017-06-23 21:11:15 +08:00
|
|
|
|
initCustomPanel();
|
|
|
|
|
initCustomEventListen();
|
2017-06-16 18:54:57 +08:00
|
|
|
|
}
|
2017-06-02 19:40:48 +08:00
|
|
|
|
});
|
|
|
|
|
|
2017-06-23 21:11:15 +08:00
|
|
|
|
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);
|
|
|
|
|
};
|
2017-07-10 22:36:59 +08:00
|
|
|
|
document.body.appendChild(temp);
|
2017-06-23 21:11:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 接收来自后台的消息
|
|
|
|
|
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);
|
|
|
|
|
}
|