Skip to content

Commit 1dcbc7e

Browse files
committed
Fixed meta refresh inside <NOSCRIPT> emulation breaking Firefox's built-in refresh blocking.
1 parent 24f7383 commit 1dcbc7e

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

src/content/onScriptDisabled.js

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,26 @@
11
function onScriptDisabled() {
2+
let refresh = false;
23
for (let noscript of document.querySelectorAll("noscript")) {
34
// force show NOSCRIPT elements content
45
let replacement = createHTMLElement("span");
56
replacement.innerHTML = noscript.innerHTML;
67
noscript.parentNode.replaceChild(replacement, noscript);
78
// emulate meta-refresh
8-
let meta = replacement.querySelector('meta[http-equiv="refresh"]');
9+
let meta = replacement.querySelector('meta[http-equiv="refresh"]');
910
if (meta) {
10-
let content = meta.getAttribute("content");
11-
if (content) {
12-
let [secs, url] = content.split(/\s*;\s*url\s*=\s*/i);
13-
let urlObj;
14-
if (url) {
15-
try {
16-
urlObj = new URL(url.replace(/^(['"]?)(.+?)\1$/, '$2'), document.URL);
17-
if (!/^https?:/.test(urlObj.protocol)) {
18-
continue;
19-
}
20-
} catch (e) {
21-
continue;
22-
}
23-
window.setTimeout(() => location.href = urlObj, (parseInt(secs) || 0) * 1000);
24-
}
25-
}
11+
refresh = true;
12+
document.head.appendChild(meta);
2613
}
2714
}
28-
15+
if (refresh) {
16+
let html = document.documentElement.outerHTML;
17+
window.addEventListener("load", e => {
18+
let document = window.wrappedJSObject.document;
19+
document.open();
20+
document.write(html);
21+
document.close();
22+
});
23+
}
2924
{
3025
let eraser = {
3126
tapped: null,

0 commit comments

Comments
 (0)