Validate document nodes before use (#493)
* Validate document.body before use in loadScripts This also fixes an issue where reject wasn't being passed to loadScriptSentinel. * Validate document nodes before use in _getSiteColor * Validate document.body before use in _getViewport * Validate document.body before use in setContentScale * Validate document.body before use in docImposterCreate
This commit is contained in:
parent
51032d1eca
commit
c4ea9321dc
@ -28,6 +28,9 @@ function docSetImposterStyle(style, propertyName, value) {
|
||||
}
|
||||
|
||||
function docImposterCreate(element, isTextarea) {
|
||||
const body = document.body;
|
||||
if (body === null) { return [null, null]; }
|
||||
|
||||
const elementStyle = window.getComputedStyle(element);
|
||||
const elementRect = element.getBoundingClientRect();
|
||||
const documentRect = document.documentElement.getBoundingClientRect();
|
||||
@ -78,7 +81,7 @@ function docImposterCreate(element, isTextarea) {
|
||||
}
|
||||
|
||||
container.appendChild(imposter);
|
||||
document.body.appendChild(container);
|
||||
body.appendChild(container);
|
||||
|
||||
// Adjust size
|
||||
const imposterRect = imposter.getBoundingClientRect();
|
||||
|
@ -162,7 +162,9 @@ class DisplayFloat extends Display {
|
||||
}
|
||||
|
||||
setContentScale(scale) {
|
||||
document.body.style.fontSize = `${scale}em`;
|
||||
const body = document.body;
|
||||
if (body === null) { return; }
|
||||
body.style.fontSize = `${scale}em`;
|
||||
}
|
||||
|
||||
async getDocumentTitle() {
|
||||
|
@ -389,8 +389,13 @@ class Popup {
|
||||
|
||||
_getSiteColor() {
|
||||
const color = [255, 255, 255];
|
||||
Popup._addColor(color, Popup._getColorInfo(window.getComputedStyle(document.documentElement).backgroundColor));
|
||||
Popup._addColor(color, Popup._getColorInfo(window.getComputedStyle(document.body).backgroundColor));
|
||||
const {documentElement, body} = document;
|
||||
if (documentElement !== null) {
|
||||
Popup._addColor(color, Popup._getColorInfo(window.getComputedStyle(documentElement).backgroundColor));
|
||||
}
|
||||
if (body !== null) {
|
||||
Popup._addColor(color, Popup._getColorInfo(window.getComputedStyle(body).backgroundColor));
|
||||
}
|
||||
const dark = (color[0] < 128 && color[1] < 128 && color[2] < 128);
|
||||
return dark ? 'dark' : 'light';
|
||||
}
|
||||
@ -575,10 +580,11 @@ class Popup {
|
||||
}
|
||||
}
|
||||
|
||||
const body = document.body;
|
||||
return {
|
||||
left: 0,
|
||||
top: 0,
|
||||
right: document.body.clientWidth,
|
||||
right: (body !== null ? body.clientWidth : 0),
|
||||
bottom: window.innerHeight
|
||||
};
|
||||
}
|
||||
|
@ -31,8 +31,13 @@ const dynamicLoader = (() => {
|
||||
}
|
||||
|
||||
function loadScripts(urls) {
|
||||
return new Promise((resolve) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const parent = document.body;
|
||||
if (parent === null) {
|
||||
reject(new Error('Missing body'));
|
||||
return;
|
||||
}
|
||||
|
||||
for (const url of urls) {
|
||||
const node = parent.querySelector(`script[src='${escapeCSSAttribute(url)}']`);
|
||||
if (node !== null) { continue; }
|
||||
@ -43,12 +48,11 @@ const dynamicLoader = (() => {
|
||||
parent.appendChild(script);
|
||||
}
|
||||
|
||||
loadScriptSentinel(resolve);
|
||||
loadScriptSentinel(parent, resolve, reject);
|
||||
});
|
||||
}
|
||||
|
||||
function loadScriptSentinel(resolve, reject) {
|
||||
const parent = document.body;
|
||||
function loadScriptSentinel(parent, resolve, reject) {
|
||||
const script = document.createElement('script');
|
||||
|
||||
const sentinelEventName = 'dynamicLoaderSentinel';
|
||||
|
Loading…
Reference in New Issue
Block a user