ListenOne / js /background.js
CatPtain's picture
Upload 83 files
765bc42 verified
/* eslint-disable no-unused-vars */
/* global GithubClient */
chrome.browserAction.onClicked.addListener((tab) => {
chrome.tabs.create(
{
url: chrome.extension.getURL('listen1.html'),
},
(new_tab) => {
// Tab opened.
}
);
});
function hack_referer_header(details) {
const replace_referer = true;
let replace_origin = true;
let add_referer = true;
let add_origin = true;
let referer_value = '';
let origin_value = '';
let ua_value = '';
if (details.url.includes('://music.163.com/')) {
referer_value = 'https://music.163.com/';
}
if (details.url.includes('://interface3.music.163.com/')) {
referer_value = 'https://music.163.com/';
}
if (details.url.includes('://gist.githubusercontent.com/')) {
referer_value = 'https://gist.githubusercontent.com/';
}
if (details.url.includes('.xiami.com/')) {
add_origin = false;
add_referer = false;
// referer_value = "https://www.xiami.com";
}
if (details.url.includes('c.y.qq.com/')) {
referer_value = 'https://y.qq.com/';
origin_value = 'https://y.qq.com';
}
if (
details.url.includes('i.y.qq.com/') ||
details.url.includes('qqmusic.qq.com/') ||
details.url.includes('music.qq.com/') ||
details.url.includes('imgcache.qq.com/')
) {
referer_value = 'https://y.qq.com/';
}
if (details.url.includes('.kugou.com/')) {
referer_value = 'https://www.kugou.com/';
}
if (details.url.includes('.kuwo.cn/')) {
referer_value = 'https://www.kuwo.cn/';
}
if (
details.url.includes('.bilibili.com/') ||
details.url.includes('.bilivideo.com/')
) {
referer_value = 'https://www.bilibili.com/';
replace_origin = false;
add_origin = false;
}
if (details.url.includes('.migu.cn')) {
referer_value = 'https://music.migu.cn/v3/music/player/audio?from=migu';
}
if (details.url.includes('m.music.migu.cn')) {
referer_value = 'https://m.music.migu.cn/';
}
if (
details.url.includes('app.c.nf.migu.cn') ||
details.url.includes('d.musicapp.migu.cn')
) {
ua_value =
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30';
add_origin = false;
add_referer = false;
}
if (details.url.includes('jadeite.migu.cn')) {
ua_value = 'okhttp/3.12.12';
add_origin = false;
add_referer = false;
}
if (origin_value === '') {
origin_value = referer_value;
}
let isRefererSet = false;
let isOriginSet = false;
let isUASet = false;
const headers = details.requestHeaders;
const blockingResponse = {};
for (let i = 0, l = headers.length; i < l; i += 1) {
if (
replace_referer &&
headers[i].name === 'Referer' &&
referer_value !== ''
) {
headers[i].value = referer_value;
isRefererSet = true;
}
if (replace_origin && headers[i].name === 'Origin' && origin_value !== '') {
headers[i].value = origin_value;
isOriginSet = true;
}
if (headers[i].name === 'User-Agent' && ua_value !== '') {
headers[i].value = ua_value;
isUASet = true;
}
}
if (add_referer && !isRefererSet && referer_value !== '') {
headers.push({
name: 'Referer',
value: referer_value,
});
}
if (add_origin && !isOriginSet && origin_value !== '') {
headers.push({
name: 'Origin',
value: origin_value,
});
}
if (!isUASet && ua_value !== '') {
headers.push({
name: 'User-Agent',
value: ua_value,
});
}
blockingResponse.requestHeaders = headers;
return blockingResponse;
}
const urls = [
'*://*.music.163.com/*',
'*://music.163.com/*',
'*://*.xiami.com/*',
'*://i.y.qq.com/*',
'*://c.y.qq.com/*',
'*://*.kugou.com/*',
'*://*.kuwo.cn/*',
'*://*.bilibili.com/*',
'*://*.bilivideo.com/*',
'*://*.migu.cn/*',
'*://*.githubusercontent.com/*',
];
try {
chrome.webRequest.onBeforeSendHeaders.addListener(
hack_referer_header,
{
urls,
},
['requestHeaders', 'blocking', 'extraHeaders']
);
} catch (err) {
// before chrome v72, extraHeader is not supported
chrome.webRequest.onBeforeSendHeaders.addListener(
hack_referer_header,
{
urls,
},
['requestHeaders', 'blocking']
);
}
/**
* Get tokens.
*/
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.type !== 'code') {
return;
}
GithubClient.github.handleCallback(request.code);
sendResponse();
});
// at end of background.js
chrome.commands.onCommand.addListener((command) => {
const [viewWindow] = chrome.extension
.getViews()
.filter((p) => p.location.href.endsWith('listen1.html'));
switch (command) {
case 'play_next':
viewWindow.document.querySelector('.li-next').click();
break;
case 'play_prev':
viewWindow.document.querySelector('.li-previous').click();
break;
case 'play_pause':
viewWindow.document.querySelector('.play').click();
break;
default:
// console.log('不支持的快捷键')
}
});