notify USO earlier in install.js by relaying xhr
This commit is contained in:
parent
98c34da9e7
commit
aa5fc9f640
|
@ -33,6 +33,7 @@ globals:
|
|||
getStylesSafe: false
|
||||
saveStyleSafe: false
|
||||
sessionStorageHash: false
|
||||
download: false
|
||||
# localization.js
|
||||
template: false
|
||||
t: false
|
||||
|
|
|
@ -86,6 +86,12 @@ function onRuntimeMessage(request, sender, sendResponse) {
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'download':
|
||||
download(request.url)
|
||||
.then(sendResponse)
|
||||
.catch(() => sendResponse(null));
|
||||
return KEEP_CHANNEL_OPEN;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
48
install.js
48
install.js
|
@ -18,19 +18,16 @@ function waitForBody() {
|
|||
if (!document.body) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.disconnect();
|
||||
|
||||
rebrand([{addedNodes: [document.body]}]);
|
||||
new MutationObserver(rebrand)
|
||||
.observe(document.body, {childList: true, subtree: true});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function _() {
|
||||
document.removeEventListener('DOMContentLoaded', _);
|
||||
chrome.runtime.sendMessage({
|
||||
method: 'getStyles',
|
||||
url: getMeta('stylish-id-url') || location.href
|
||||
}, checkUpdatability);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
@ -71,7 +68,9 @@ function sendEvent(type, detail = null) {
|
|||
// because USO tries to use a global "event" variable deprecated in Firefox
|
||||
detail = cloneInto(detail, document); // eslint-disable-line no-undef
|
||||
}
|
||||
onDOMready().then(() => {
|
||||
document.dispatchEvent(new CustomEvent(type, detail));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
@ -121,20 +120,11 @@ function getMeta(name) {
|
|||
|
||||
|
||||
function getResource(url) {
|
||||
if (url.startsWith('#')) {
|
||||
return Promise.resolve(document.getElementById(url.slice(1)).textContent);
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.onloadend = () => resolve(xhr.status < 400 ? xhr.responseText : null);
|
||||
if (url.length > 2000) {
|
||||
const [mainUrl, query] = url.split('?');
|
||||
xhr.open('POST', mainUrl, true);
|
||||
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
||||
xhr.send(query);
|
||||
if (url.startsWith('#')) {
|
||||
resolve(document.getElementById(url.slice(1)).textContent);
|
||||
} else {
|
||||
xhr.open('GET', url);
|
||||
xhr.send();
|
||||
chrome.runtime.sendMessage({method: 'download', url}, resolve);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -148,17 +138,18 @@ function rebrand(mutations, observer) {
|
|||
observer.disconnect();
|
||||
const elements = document.getElementsByClassName('install-status');
|
||||
for (let i = elements.length; --i >= 0;) {
|
||||
const el = elements[i];
|
||||
if (!el.textContent.includes('Stylish')) {
|
||||
continue;
|
||||
}
|
||||
const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);
|
||||
const walker = document.createTreeWalker(elements[i], NodeFilter.SHOW_TEXT);
|
||||
while (walker.nextNode()) {
|
||||
const node = walker.currentNode;
|
||||
const text = node.nodeValue;
|
||||
if (text.includes('Stylish') && node.parentNode.localName != 'a') {
|
||||
const parent = node.parentNode;
|
||||
const extensionHelp = /stylish_chrome/.test(parent.href);
|
||||
if (text.includes('Stylish') && (parent.localName != 'a' || extensionHelp)) {
|
||||
node.nodeValue = text.replace(/Stylish/g, 'Stylus');
|
||||
}
|
||||
if (extensionHelp) {
|
||||
parent.href = 'http://add0n.com/stylus.html';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -213,6 +204,19 @@ function styleSectionsEqual({sections: a}, {sections: b}) {
|
|||
}
|
||||
|
||||
|
||||
function onDOMready() {
|
||||
if (document.readyState != 'loading') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
document.addEventListener('DOMContentLoaded', function _() {
|
||||
document.removeEventListener('DOMContentLoaded', _);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function orphanCheck() {
|
||||
const port = chrome.runtime.connect();
|
||||
if (port) {
|
||||
|
|
23
manage.js
23
manage.js
|
@ -558,7 +558,7 @@ class Updater {
|
|||
}
|
||||
|
||||
checkMd5() {
|
||||
return Updater.download(this.md5Url).then(
|
||||
return download(this.md5Url).then(
|
||||
md5 => (md5.length == 32
|
||||
? this.decideOnMd5(md5 != this.md5)
|
||||
: this.onFailure(-1)),
|
||||
|
@ -573,7 +573,7 @@ class Updater {
|
|||
}
|
||||
|
||||
checkFullCode({forceUpdate = false} = {}) {
|
||||
return Updater.download(this.url).then(
|
||||
return download(this.url).then(
|
||||
text => this.handleJson(forceUpdate, JSON.parse(text)),
|
||||
status => this.onFailure(status));
|
||||
}
|
||||
|
@ -620,25 +620,6 @@ class Updater {
|
|||
filterAndAppend({entry: this.element});
|
||||
}
|
||||
}
|
||||
|
||||
static download(url) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.onloadend = () => (xhr.status == 200
|
||||
? resolve(xhr.responseText)
|
||||
: reject(xhr.status));
|
||||
if (url.length > 2000) {
|
||||
const [mainUrl, query] = url.split('?');
|
||||
xhr.open('POST', mainUrl, true);
|
||||
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
||||
xhr.send(query);
|
||||
} else {
|
||||
xhr.open('GET', url);
|
||||
xhr.send();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
15
messaging.js
15
messaging.js
|
@ -306,3 +306,18 @@ function deleteStyleSafe({id, notify = true} = {}) {
|
|||
return id;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function download(url) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.timeout = 10e3;
|
||||
xhr.onloadend = () => (xhr.status == 200
|
||||
? resolve(xhr.responseText)
|
||||
: reject(xhr.status));
|
||||
const [mainUrl, query] = url.split('?');
|
||||
xhr.open(query ? 'POST' : 'GET', mainUrl, true);
|
||||
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
||||
xhr.send(query);
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user