// ==UserScript== // @name Оповещать об использовании флеш на сайтах // @namespace dev-null // @include *://* // @version 1 // @grant none // ==/UserScript== (() => { "use-strict"; const swfObjSels = [ 'param[value*=".swf"]', 'param[name="flashvars"]', 'embed[src*=".swf"]', 'object[data*=".swf"]' ].join(', '); const notify = () => alert("На странице обнаружены флеш-объекты!"); const mo = new MutationObserver(mns => { for(let mn of mns) if (!mn.addedNodes || !mn.addedNodes.length) return; isFlash().then(succes => { mo.disconnect(); notify(); }) }); const isFlash = () => { return new Promise((resolve, reject) => { let swfObj = document.querySelectorAll(':-moz-any(' + swfObjSels + ')'); if (!swfObj.length) reject(); else resolve(); }) }; window.addEventListener('load', function f() { window.removeEventListener('load', f); isFlash().then( succes => notify(), error => mo.observe(document.body, {childList: true, subtree: true, attributes: false, characterData: false}) ) }) })(); |