improve orphan check + cosmetics
This commit is contained in:
parent
685bf1fa3e
commit
b88a978843
|
@ -259,7 +259,7 @@
|
|||
}
|
||||
|
||||
function orphanCheck() {
|
||||
if (tryCatch(() => chrome.i18n.getUILanguage())) return;
|
||||
if (chrome.runtime.id) return;
|
||||
// In Chrome content script is orphaned on an extension update/reload
|
||||
// so we need to detach event listeners
|
||||
window.removeEventListener(orphanEventId, orphanCheck, true);
|
||||
|
|
|
@ -94,8 +94,8 @@
|
|||
function onMutation(mutations) {
|
||||
for (const {target: el} of mutations) {
|
||||
if (el.style.display === 'none' &&
|
||||
/^ik-/.test(el.name) &&
|
||||
/^#[\da-f]{6}$/.test(el.value)) {
|
||||
/^ik-/.test(el.name) &&
|
||||
/^#[\da-f]{6}$/.test(el.value)) {
|
||||
onChange({target: el});
|
||||
}
|
||||
}
|
||||
|
@ -174,7 +174,7 @@
|
|||
}
|
||||
|
||||
function orphanCheck() {
|
||||
if (chrome.i18n) return true;
|
||||
if (chrome.runtime.id) return true;
|
||||
removeEventListener(orphanEventId, orphanCheck, true);
|
||||
removeEventListener('click', onClick, true);
|
||||
removeEventListener('change', onChange);
|
||||
|
@ -185,42 +185,46 @@
|
|||
})();
|
||||
|
||||
function inPageContext(eventId, eventIdHost, styleId, apiUrl) {
|
||||
window.isInstalled = true;
|
||||
const {dispatchEvent, CustomEvent, removeEventListener} = window;
|
||||
const apply = Map.call.bind(Map.apply);
|
||||
const CR = chrome.runtime;
|
||||
const {sendMessage} = CR;
|
||||
const SEND = 'sendMessage';
|
||||
const RP = Response.prototype;
|
||||
const origJson = RP.json;
|
||||
let done, vars;
|
||||
CR.sendMessage = function (id, msg, opts, cb = opts) {
|
||||
if (id === 'fjnbnpbmkenffdnngjfgmeleoegfcffe' &&
|
||||
const ORIG = {json: RP.json, [SEND]: CR[SEND]};
|
||||
let done, orphaned, vars;
|
||||
CR[SEND] = ovrSend;
|
||||
RP.json = ovrJson;
|
||||
window.isInstalled = true;
|
||||
addEventListener(eventId, onCommand, true);
|
||||
function ovrSend(id, msg, opts, cb = opts) {
|
||||
if (!orphaned &&
|
||||
id === 'fjnbnpbmkenffdnngjfgmeleoegfcffe' &&
|
||||
msg && msg.type === 'deleteStyle' &&
|
||||
typeof cb === 'function') {
|
||||
cb(true);
|
||||
} else {
|
||||
return sendMessage(...arguments);
|
||||
return ORIG[SEND](...arguments);
|
||||
}
|
||||
};
|
||||
RP.json = async function () {
|
||||
const res = await apply(origJson, this, arguments);
|
||||
}
|
||||
async function ovrJson() {
|
||||
const res = await apply(ORIG.json, this, arguments);
|
||||
try {
|
||||
if (!done && this.url === apiUrl) {
|
||||
RP.json = origJson;
|
||||
done = true; // will be used if called by another script that saved our RP.json hook
|
||||
if (RP.json === ovrJson) RP.json = ORIG.json;
|
||||
done = true;
|
||||
send(res);
|
||||
setVars(res);
|
||||
}
|
||||
} catch (e) {}
|
||||
return res;
|
||||
};
|
||||
addEventListener(eventId, onCommand, true);
|
||||
}
|
||||
function onCommand(e) {
|
||||
if (e.detail === 'quit') {
|
||||
removeEventListener(eventId, onCommand, true);
|
||||
CR.sendMessage = sendMessage;
|
||||
RP.json = origJson;
|
||||
done = true;
|
||||
// We can restore the hooks only if another script didn't modify them
|
||||
if (CR[SEND] === ovrSend) CR[SEND] = ovrSend;
|
||||
if (RP.json === ovrJson) RP.json = ORIG.json;
|
||||
done = orphaned = true;
|
||||
} else if (/^vars:/.test(e.detail)) {
|
||||
vars = JSON.parse(e.detail.slice(5));
|
||||
} else if (e.relatedTarget) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user