Skip to content

Commit 35d82bd

Browse files
committed
More accurate NOSCRIPT element emulation.
1 parent 5d92d1b commit 35d82bd

2 files changed

Lines changed: 19 additions & 8 deletions

File tree

src/content/content.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ window.addEventListener("securitypolicyviolation", e => {
102102
Messages.send("violation", {url, type});
103103
}, true);
104104

105+
105106
ns.on("capabilities", () => {
106107
seen.record({
107108
request: {

src/content/onScriptDisabled.js

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,36 @@ function onScriptDisabled() {
66
onScriptDisabled = () => {};
77
let refresh = false;
88
for (let noscript of document.querySelectorAll("noscript")) {
9+
910
// force show NOSCRIPT elements content
10-
let replacement = createHTMLElement("span");
11-
replacement.innerHTML = noscript.innerHTML;
12-
noscript.replaceWith(replacement);
11+
let replacement = document.createRange().createContextualFragment(noscript.innerHTML);
1312
// emulate meta-refresh
14-
let meta = replacement.querySelector('meta[http-equiv="refresh"]');
15-
if (meta) {
13+
for (let meta of replacement.querySelectorAll('meta[http-equiv="refresh"]')) {
1614
refresh = true;
1715
document.head.appendChild(meta);
16+
console.log(`State %s, emulating`, document.readyState, meta);
17+
}
18+
19+
if (noscript.closest("head") && document.body) {
20+
document.body.insertBefore(noscript, document.body.firstChild);
1821
}
22+
noscript.replaceWith(replacement);
1923
}
2024
if (refresh) {
2125
let html = document.documentElement.outerHTML;
22-
window.addEventListener("load", e => {
23-
if (!e.isTrusted) return;
26+
let rewrite = () => {
2427
let document = window.wrappedJSObject ? window.wrappedJSObject.document : window.document;
2528
document.open();
2629
document.write(html);
2730
document.close();
28-
});
31+
};
32+
if (document.readyState === "complete") {
33+
rewrite();
34+
} else {
35+
window.addEventListener("load", e => {
36+
if (e.isTrusted) rewrite();
37+
});
38+
}
2939
}
3040
{
3141
let eraser = {

0 commit comments

Comments
 (0)