ã¢ãã«ããµã¤ãããããã¯ããGreasemonkeyã¹ã¯ãªãã
æå®³ã£ã½ããµã¤ãã«ã¢ã¯ã»ã¹ããã¨ã
ã®ããã«ã¼ãããããã¦è¦ããªããããæªæå¹´ã®åã¯æ¯éå
¥ããã¨ããã§ããã
ã¤ã³ã¹ãã¼ã«ããã¨Webãµã¤ããè¦ããã³「調べる」ウェブサイトのカテゴリ登録を確認|ネットスター株式会社ã«ã¢ã¯ã»ã¹ããã®ã§ãã»ãã·ã§ã³IDçã®å
¥ã£ãURLçã«ã¢ã¯ã»ã¹ããªãããæ°ãã¤ããå¿
è¦ãããã
// ==UserScript== // @name Harmful Site Filter // @namespace http://d.hatena.ne.jp/javascripter/ // @include http* // ==/UserScript== function cacheManager(identifier) { var o = JSON.parse(GM_getValue(identifier, JSON.stringify({__proto__: null}))); return { has: function (key) { return key in o; }, get: function (key) { return o[key]; }, set: function (key, value) { o[key] = value; GM_setValue(identifier, JSON.stringify(o)); return value; }, remove: function (key) { delete o[key]; GM_setValue(identifier, JSON.stringify(o)); }, clear: function () { GM_deleteValue(identifier); } }; } var cache = cacheManager("cache"); GM_registerMenuCommand("Harmful Site Filter - Clear Cache", cache.clear); function harmful(url, k) { const API_URL = "http://category.netstar-inc.com/check/res.php"; function onload(res) { const EXTRACTOR = /大ã«ãã´ãªã(.*?)<br>/; var html = res.responseText; var all = EXTRACTOR.exec(html); k( cache.set(url, all && all[1].trim() == "ã¢ãã«ã") ); } var opt = { method: "post", headers: { "Content-Type": "application/x-www-form-urlencoded;" }, url: API_URL, data: "url=" + encodeURI(url), onload: onload }; if (cache.has(url)) k(cache.get(url)); else GM_xmlhttpRequest(opt); } harmful(location.href, function (isHarmful) { if (isHarmful) blur(document.body); }); var isAppended = false; function blur(element) { if (!isAppended) { document.documentElement.appendChild( E4XToDOM( <svg:svg xmlns:svg="http://www.w3.org/2000/svg" height="0"> <svg:defs> <svg:filter id="blur"> <svg:feGaussianBlur stdDeviation="3"/> </svg:filter> <svg:filter id="grayscale"> <svg:feColorMatrix values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/> </svg:filter> </svg:defs> </svg:svg> ) ); isAppended = true; } element.style.cssText += 'filter: url("#blur");'; } function E4XToDOM(xml) { return document.adoptNode( new DOMParser().parseFromString(xml.toXMLString(), "application/xml").documentElement ); }
SVGãã£ã«ã¿ãåçã«ã»ããããå ´åãelem.style.filter = 'url("#xxx")';
ã¯ä½æ
ã䏿ããããªããã¾ããsetPropertyçã使ã£ã¦ã䏿ããããªããelem.setAttribute("style", 'filter:url("#xxx");');
ããä¸ã®ã³ã¼ãã®ããã«cssTextã使ãã¨ä¸æãããã®ã§ããããããã°ã ã¨æãã
SVGã¯CSS3: What's Now, What's New and What's Not? [Slide 25 of 26: SVG ‘filter’ on HTML]ããè²°ãã¾ããã