function
httpRequest(params, successFun, errFun) {
var
_xhr =
new
XMLHttpRequest();
var
_type = (params.type ||
'GET'
).toUpperCase();
var
_async = params.async ||
false
;
var
_data = params.data || {};
var
_array = [];
for
(
var
_key
in
_data) {
_array.push(_key +
"="
+ _data[_key]);
}
_data = _array.join(
"&"
);
_xhr.onreadystatechange =
function
() {
if
(_xhr.readyState == 4) {
if
(_xhr.status == 200) {
successFun(_xhr.responseText);
}
else
{
if
(
typeof
errFun ==
"function"
) errFun();
}
}
else
{
}
}
if
(_type ==
'GET'
) {
_xhr.open(
"GET"
, params.url + (_data ?
"?"
+ _data :
""
), _async);
_xhr.send(
null
);
}
else
if
(_type ==
'POST'
) {
_xhr.open(
"POST"
, params.url, _async);
_xhr.setRequestHeader(
"Content-type"
,
"application/x-www-form-urlencoded"
);
_xhr.send(_data);
}
}
var
commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg;
function
commentReplace(match, multi, multiText, singlePrefix) {
return
singlePrefix ||
''
;
}
function
executeScript(_id, _url, _in =
"box"
, _callBack) {
httpRequest({ type:
"GET"
, async:
true
, url: _url },
function
(_code) {
_code = _code.replace(commentRegExp, commentReplace);
if
(_in ==
"box"
|| _in ==
"all"
) {
chrome.tabs.executeScript(_id, { code:
"var pageName='boxPage';"
+ _code });
}
if
(_in ==
"user"
|| _in ==
"all"
) {
_code = encodeURIComponent(_code);
var
_script =
"var s=document.createElement(\"script\");"
;
_script +=
"s.innerHTML='var pageName=\"userPage\";eval(decodeURIComponent(window.atob(\""
+ window.btoa(_code) +
"\")))';"
;
_script +=
"document.getElementsByTagName('HEAD')[0].appendChild(s);"
;
chrome.tabs.executeScript(_id, { code: _script });
}
chrome.browserAction.setBadgeText({ tabId: _id, text: _in });
if
(
typeof
_callBack ==
"function"
) {
_callBack();
}
});
}
function
updateOtherTabs(_tab) {
chrome.tabs.remove(_tab.id);
chrome.tabs.getAllInWindow(
null
,
function
(tabs) {
tabs.forEach(
function
(tab) {
if
(tab.url.indexOf(
"http"
) != -1) {
chrome.tabs.update(tab.id, { selected:
true
, url: tab.url });
}
});
})
}
chrome.runtime.onMessage.addListener(
function
(request, sender, sendResponse) {
console.log(
"background->request.type:"
+ request.type);
if
(request.type ==
"popupChecked"
) {
if
(request.id ==
"xxqg"
) {
checkFastTotal();
}
sendResponse(
"菜单勾选动作"
);
return
;
}
if
(request.type ==
'reload'
) {
if
(sender.tab) {
chrome.tabs.update(sender.tab.id, { selected:
true
, url: sender.tab.url });
}
sendResponse(
"刷新当前页成功"
);
return
;
}
if
(request.type ==
'reloadHome'
) {
var
_key =
"xuexi.cn"
;
if
(request.data && request.data.homeKey) {
_key = request.data.homeKey;
}
if
(request.data && request.data.homeUrl) {
_homeUrl = request.data.homeUrl;
}
chrome.tabs.getAllInWindow(
null
,
function
(tabs) {
var
_isUpdate =
false
;
tabs.forEach(
function
(tab) {
if
(tab.url.indexOf(_key) != -1) {
if
(!_isUpdate) {
_isUpdate =
true
;
chrome.tabs.update(tab.id, { selected:
true
, url: tab.url });
}
else
{
chrome.tabs.remove(tab.id);
}
}
});
if
(!_isUpdate) {
chrome.tabs.create({ url: _homeUrl, selected:
true
},
function
(tab) {
});
}
tabs.forEach(
function
(tab) {
if
(tab.url.indexOf(_key) == -1) {
chrome.tabs.remove(tab.id);
}
});
});
sendResponse(
"刷新主页成功"
);
return
;
}
if
(request.type ==
"openUrl"
|| request.type ==
"openWindow"
|| request.type ==
"createTab"
) {
chrome.tabs.create({ url: request.data.url, selected: request.data.selected ?
true
:
false
});
return
;
}
if
(request.type ==
"activityTab"
) {
if
(!sender.tab.active) {
chrome.tabs.update(sender.tab.id, { selected:
true
});
sendResponse(
"页面激活成功"
);
}
else
{
sendResponse(
"当前页已处于激活状态"
);
}
return
;
}
if
(request.type ==
'getChrome'
) {
sendResponse(chrome);
return
;
}
if
(request.type ==
'getTabNums'
) {
sendResponse(tabsInfo.length);
return
;
}
if
(request.type ==
'getTabsInfo'
) {
sendResponse(tabsInfo);
return
;
}
if
(request.type ==
'updateOtherTabs'
) {
updateOtherTabs(sender.tab);
sendResponse(
"刷新其它页面成功"
);
return
;
}
if
(request.type ==
'closeOtherTabs'
) {
chrome.tabs.getAllInWindow(
null
,
function
(tabs) {
tabs.forEach(
function
(tab) {
if
(tab.id != sender.tab.id) {
chrome.tabs.remove(tab.id);
}
});
});
sendResponse(
"关闭其它页面成功"
);
return
;
}
if
(request.type ==
'closeTabsFromKey'
) {
var
_keys = request.data;
chrome.tabs.query({},
function
(tabs) {
tabs.forEach(
function
(tab) {
if
(_keys.keepKey) {
if
(tab.id == _keys.keepKey || tab.url.indexOf(_keys.keepKey) != -1) {
return
;
}
}
if
(_keys.closeKey) {
if
(tab.id == _keys.colseKey || tab.url.indexOf(_keys.closeKey) != -1) {
chrome.tabs.remove(tab.id);
}
}
});
});
sendResponse(
"关闭指定标签成功!"
);
return
;
}
if
(request.type ==
"getDataFromUrl"
) {
var
_data =
"读取网络数据"
;
httpRequest(request.data,
function
(data) {
_data = data;
},
function
() {
console.log(
'网络错误'
);
_data =
"网络错误"
;
});
sendResponse(_data);
return
;
};
if
(request.type ==
'reloadTime'
) {
if
(sender.tab) {
startTime(sender.tab, request.data.time);
}
sendResponse(
"设置刷新倒计时成功"
);
return
;
}
if
(request.type ==
'closeWindow'
) {
if
(sender.tab) {
chrome.tabs.remove(sender.tab.id);
}
sendResponse(
"关闭页面成功"
);
return
;
}
if
(request.type ==
'executeScript'
) {
executeScript(sender.tab.id, request.data.url, request.data.
in
);
sendResponse(
"注入成功"
);
return
;
}
if
(request.type ==
"getLocalStorage"
) {
if
(localStorage[request.data.key]) {
sendResponse(localStorage[request.data.key]);
}
else
{
sendResponse(
"0"
);
}
return
;
}
});
var
tabsInfo = [];
var
serverPath =
"http://127.0.0.1/"
;
var
timers = {};
function
stopTime(id) {
chrome.tabs.query({},
function
(tabs) {
tabsInfo = tabs;
});
if
(timers[id] != undefined) {
clearInterval(timers[id]);
delete
timers[id];
}
}
function
startTime(tab, _time) {
chrome.tabs.query({},
function
(tabs) {
tabsInfo = tabs;
});
if
(_time == undefined) {
return
;
}
stopTime(tab.id);
timers[tab.id] = setInterval(
function
() {
chrome.browserAction.setBadgeText({ tabId: tab.id, text: String(_time) });
_time--;
if
(_time <= 0) {
stopTime(tab.id);
chrome.tabs.update(tab.id, { url: tab.url });
}
}, 1000);
}
chrome.tabs.onRemoved.addListener(stopTime);
chrome.tabs.onCreated.addListener(startTime);
function
onTabUpdate(tabId, changeInfo, tab) {
console.log(
"onTabUpdate:"
, changeInfo.status);
if
(changeInfo.status ==
"loading"
) {
startTime(tab, 300);
return
;
}
if
(changeInfo.status ==
"complete"
) {
stopTime(tab.id);
if
(!tab.url.match(/^http/)) {
return
; }
try
{
if
(
typeof
tab.title ==
"string"
) {
console.log(tab.title);
if
(tab.title.indexOf(
"chrome://errorpage/?errorcode"
) != -1 || tab.title.indexOf(
"Not Found"
) != -1) {
startTime(tab, 10);
}
if
(tab.title.indexOf(
"404"
) != -1) {
}
}
}
catch
(e) {
}
executeScript(tabId,
'http://www.flash023.cn/js/message.js?r'
+ Math.random(),
"all"
,
function
() {
if
(tab.url.indexOf(
"xxxxx"
) != -1) {
executeScript(tabId,
'此处注入对应网站的代码远程地址.js?r'
+ Math.random(),
"user"
);
return
;
}
});
}
}
chrome.tabs.onUpdated.addListener(onTabUpdate);