Разработано расширение для браузера Chrome
Этот коммит содержится в:
Коммит
bebbfb3ad9
70
background.js
Обычный файл
70
background.js
Обычный файл
@ -0,0 +1,70 @@
|
||||
const MODES = {
|
||||
NO_REDIRECT: 0,
|
||||
RU_TO_LOCAL: 1,
|
||||
LOCAL_TO_RU: 2,
|
||||
}
|
||||
|
||||
chrome.runtime.onInstalled.addListener(() => {
|
||||
chrome.storage.local.set({ redirectMode: MODES.NO_REDIRECT })
|
||||
})
|
||||
|
||||
chrome.storage.onChanged.addListener((changes) => {
|
||||
if (changes.redirectMode) updateRules(changes.redirectMode.newValue)
|
||||
})
|
||||
|
||||
const updateRules = (mode) => {
|
||||
chrome.declarativeNetRequest.updateEnabledRulesets({
|
||||
disableRulesetIds: ['ruleset'],
|
||||
enableRulesetIds: [],
|
||||
}, () => {
|
||||
let rulesToEnable = []
|
||||
switch (mode) {
|
||||
case MODES.RU_TO_LOCAL:
|
||||
rulesToEnable = [1]
|
||||
break
|
||||
|
||||
case MODES.LOCAL_TO_RU:
|
||||
rulesToEnable = [2]
|
||||
break
|
||||
}
|
||||
|
||||
chrome.declarativeNetRequest.updateDynamicRules({
|
||||
removeRuleIds: [1, 2],
|
||||
addRules: rulesToEnable.map(id => createRuleById(id)),
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const createRuleById = (id) => {
|
||||
const rules = {
|
||||
1: {
|
||||
id: 1,
|
||||
priority: 1,
|
||||
action: {
|
||||
type: 'redirect',
|
||||
redirect: {
|
||||
regexSubstitution: 'https://corp.tularegion.local\\1'
|
||||
},
|
||||
},
|
||||
condition: {
|
||||
regexFilter: '^https://corp\\.tularegion\\.ru(.*)$',
|
||||
resourceTypes: ['main_frame'],
|
||||
},
|
||||
},
|
||||
2: {
|
||||
id: 2,
|
||||
priority: 1,
|
||||
action: {
|
||||
type: 'redirect',
|
||||
redirect: {
|
||||
regexSubstitution: 'https://corp.tularegion.ru\\1'
|
||||
},
|
||||
},
|
||||
condition: {
|
||||
regexFilter: '^https://corp\\.tularegion\\.local(.*)$',
|
||||
resourceTypes: ['main_frame'],
|
||||
},
|
||||
},
|
||||
}
|
||||
return rules[id]
|
||||
}
|
20
main.html
Обычный файл
20
main.html
Обычный файл
@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru-RU">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>Переадресация Корпоративного портала</title>
|
||||
<link rel="stylesheet" href="/styles.css" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<h2>Переадресация Корпоративного портала</h2>
|
||||
<div id="switch-button">
|
||||
<label for="ru-to-local">RU на LOCAL</label>
|
||||
<label for="no-redirect">Отключить</label>
|
||||
<label for="local-to-ru">LOCAL на RU</label>
|
||||
</div>
|
||||
<input id="ru-to-local" type="radio" name="switch-redirect" value="ru-to-local" />
|
||||
<input id="no-redirect" type="radio" name="switch-redirect" value="no-redirect" />
|
||||
<input id="local-to-ru" type="radio" name="switch-redirect" value="local-to-ru" />
|
||||
<script src="/popup.js"></script>
|
||||
</body>
|
||||
</html>
|
28
manifest.json
Обычный файл
28
manifest.json
Обычный файл
@ -0,0 +1,28 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "Переадресация Корпоративного портала",
|
||||
"version": "1.0",
|
||||
"permissions": [
|
||||
"declarativeNetRequest",
|
||||
"storage"
|
||||
],
|
||||
"host_permissions": [
|
||||
"*://corp.tularegion.local/*",
|
||||
"*://corp.tularegion.ru/*"
|
||||
],
|
||||
"background": {
|
||||
"service_worker": "/background.js"
|
||||
},
|
||||
"action": {
|
||||
"default_popup": "/main.html"
|
||||
},
|
||||
"declarative_net_request": {
|
||||
"rule_resources": [
|
||||
{
|
||||
"id": "ruleset",
|
||||
"enabled": true,
|
||||
"path": "/rules.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
3
popup.js
Обычный файл
3
popup.js
Обычный файл
@ -0,0 +1,3 @@
|
||||
document.querySelector('#ru-to-local').onchange = () => chrome.storage.local.set({ redirectMode: 1 })
|
||||
document.querySelector('#local-to-ru').onchange = () => chrome.storage.local.set({ redirectMode: 2 })
|
||||
document.querySelector('#no-redirect').onchange = () => chrome.storage.local.set({ redirectMode: 3 })
|
1
rules.json
Обычный файл
1
rules.json
Обычный файл
@ -0,0 +1 @@
|
||||
[]
|
46
styles.css
Обычный файл
46
styles.css
Обычный файл
@ -0,0 +1,46 @@
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 1rem;
|
||||
width: 24rem;
|
||||
background-image: linear-gradient(to bottom right, blue, darkblue);
|
||||
color: white;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
input[type="radio"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#switch-button {
|
||||
display: flex;
|
||||
margin-top: 2rem;
|
||||
width: fit-content;
|
||||
border: solid .0125rem transparent;
|
||||
border-radius: 2rem;
|
||||
box-shadow:
|
||||
0 max(.25rem, .25vw) max(.5rem, .5vw) max(.1875rem, .1875vw) rgba(0, 0, 0, .15),
|
||||
0 max(.0625rem, .0625vw) max(.1875rem, .1875vw) rgba(0, 0, 0, .3);
|
||||
overflow: clip;
|
||||
}
|
||||
|
||||
#switch-button > * {
|
||||
padding: .5rem 1rem;
|
||||
background-color: white;
|
||||
color: black;
|
||||
font-weight: bold;
|
||||
opacity: .9;
|
||||
}
|
||||
|
||||
#switch-button > :hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#switch-button > :not(:first-child) {
|
||||
border-left: solid .0125rem black;
|
||||
}
|
Загрузка…
Ссылка в новой задаче
Block a user