Skip to content

Instantly share code, notes, and snippets.

@Griever
Created May 1, 2009 16:12
Show Gist options
  • Save Griever/105112 to your computer and use it in GitHub Desktop.
Save Griever/105112 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Delayed_Document_Write_Execution.js
// @namespace http://d.hatena.ne.jp/Griever/
// @include http://*
// @exclude http://*cgiboy.com/*
// @exclude http://mail.google.com/a/livedoor.com/*
// ==/UserScript==
(function(){
var lastScriptElement = null;
var scripts = [];
var d_write = document.write;
function getScript(e){
lastScriptElement = e.element;
}
document.write = function(str){
var elem = lastScriptElement;
if (arguments.length > 1)
str = arguments.join('');
if ('str' in elem){
elem.str += str;
}else{
elem.str = str;
scripts.push(elem);
}
}
opera.addEventListener('BeforeScript', getScript, false);
opera.addEventListener('AfterEvent.DOMContentLoaded', function (e){
opera.removeEventListener(e.type, arguments.callee, false);
opera.removeEventListener('BeforeScript', getScript, false);
// 挿入されたスクリプト要素が使う document.write
document.write = function(str){
if (arguments.length > 1)
str = arguments.join('');
var range = document.createRange();
range.selectNodeContents(document.body);
var df = range.createContextualFragment(str);
document.body.appendChild( df );
}
scripts.forEach(function(elem){
// 広告フィルター
if (!/<(script|iframe|object|embed)|counter|analyze|amazon\.|\[(PR|AD)\]|スポンサーサイト|width=\"?(728|468)\"?/i.test(elem.str)){
var range = document.createRange();
range.selectNodeContents(document.body);
var df = range.createContextualFragment(elem.str);
elem.parentNode.insertBefore( df, elem.nextSibling );
}
/*
// ブロックされた HTML
else{
var div = document.createElement('div');
div.style.cssText = 'font-size:10pt; border-top:1px solid green;';
div.appendChild(document.createTextNode(elem.str));
document.documentElement.appendChild(div);
}
*/
});
// document.write を戻す
setTimeout(function(){
document.write = d_write;
}, 1000);
}, false);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment