Update element fill to replace file URIs in image tags

This commit is contained in:
Kyle Carberry 2019-03-06 00:06:44 +00:00
parent 2b3d2933eb
commit 414eb7076f
No known key found for this signature in database
GPG Key ID: 42E8F51E81E8201C

View File

@ -25,18 +25,37 @@ const newCreateElement = <K extends keyof HTMLElementTagNameMap>(tagName: K): HT
// tslint:disable-next-line:no-any // tslint:disable-next-line:no-any
return oldCreateElement.call(document, tagName as any); return oldCreateElement.call(document, tagName as any);
}; };
// tslint:disable-next-line:no-any
const getPropertyDescriptor = (object: any, id: string): PropertyDescriptor | undefined => {
let op = Object.getPrototypeOf(object);
while (!Object.getOwnPropertyDescriptor(op, id)) {
op = Object.getPrototypeOf(op);
}
return Object.getOwnPropertyDescriptor(op, id);
};
if (tagName === "img") {
const img = createElement("img");
const oldSrc = getPropertyDescriptor(img, "src");
if (!oldSrc) {
throw new Error("Failed to find src property");
}
Object.defineProperty(img, "src", {
get: (): string => {
return oldSrc!.get!.call(img);
},
set: (value: string): void => {
value = value.replace(/file:\/\//g, "/resource");
oldSrc!.set!.call(img, value);
},
});
return img;
}
if (tagName === "style") { if (tagName === "style") {
const style = createElement("style"); const style = createElement("style");
// tslint:disable-next-line:no-any
const getPropertyDescriptor = (object: any, id: string): PropertyDescriptor | undefined => {
let op = Object.getPrototypeOf(object);
while (!Object.getOwnPropertyDescriptor(op, id)) {
op = Object.getPrototypeOf(op);
}
return Object.getOwnPropertyDescriptor(op, id);
};
const oldInnerHtml = getPropertyDescriptor(style, "innerHTML"); const oldInnerHtml = getPropertyDescriptor(style, "innerHTML");
if (!oldInnerHtml) { if (!oldInnerHtml) {
throw new Error("Failed to find innerHTML property"); throw new Error("Failed to find innerHTML property");