diff options
Diffstat (limited to 'src/content/embeddingDocument.js')
-rw-r--r-- | src/content/embeddingDocument.js | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/content/embeddingDocument.js b/src/content/embeddingDocument.js index eed04b1..bc1b97f 100644 --- a/src/content/embeddingDocument.js +++ b/src/content/embeddingDocument.js @@ -1,5 +1,5 @@ if (ns.embeddingDocument) { - ns.on("capabilities", () => { + let replace = () => { for (let policyType of ["object", "media"]) { let request = { id: `noscript-${policyType}-doc`, @@ -8,7 +8,7 @@ if (ns.embeddingDocument) { documentUrl: document.URL, embeddingDocument: true, }; - + if (ns.allows(policyType)) { let handler = PlaceHolder.handlerFor(policyType); if (handler && handler.selectFor(request).length > 0) { @@ -19,9 +19,26 @@ if (ns.embeddingDocument) { if (ph.replacements.size > 0) { debug(`Created placeholder for ${policyType} at ${document.URL}`); seen.record({policyType, request, allowed: false}); + } + } + } + }; + ns.on("capabilities", () => { + if (!document.body.firstChild) { // we've been called early + setTimeout(replace, 0); + let types = { + "media": /^(?:video|audio)\//i, + "object": /^application\//i, + } + for (let [type, rx] of Object.entries(types)) { + if (rx.test(document.contentType) && !ns.allows(type)) { + window.stop(); break; } } + + } else { + replace(); } }); } |