// ==UserScript==
// @name No More Scripts
// @description Removes all scripts, images, iframes, objects, embeds, and applets, that come from a different domain to the page itself.
// @namespace http://bmky.net/
// @author szsk
// @version 1.14
// @manual http://bmky.net/product/nomorescripts/
// ==/UserScript==
( function( nms_debug ) {
// 設定ファイルが無くてもとりあえず動作させる
if( window.nms_trusted == undefined ) window.nms_trusted = [];
if( window.nms_blocked == undefined ) window.nms_blocked = [];
if( window.nms_disabled == undefined ) window.nms_disabled = [];
if( window.nms_config == undefined ) window.nms_config = {}
// デフォルト値の設定
nms_config.init = function( key, value ) {
if( this[ key ] == undefined ) this[ key ] = value;
}
nms_config.init( "block_images", false );
nms_config.init( "block_iframe", true );
nms_config.init( "block_flash", true );
nms_config.init( "block_applet", true );
nms_config.init( "block_jsurl", true );
nms_config.init( "nms_enable_inframe", true );
nms_config.init( "reload_trusted", true );
nms_config.init( "show_placeholder", true );
nms_config.init( "confirm_enabled_object", true );
nms_config.init( "position_v", "bottom" );
nms_config.init( "position_h", "right" );
// window.name から変更する設定を取得
window.name.replace( /\(([^$]+)\$([^)]+)\)/g, function( $0, name, value ) {
if( nms_config[ name ] != undefined ) {
nms_config[ name ] = ( value == "true" );
}
} );
// 条件に該当するならスクリプトを無力化
if(
// (要設定)iframe で表示されたページでは動作させない
( nms_config["nms_enable_inframe"] == true && window.parent != window )
// 常にスクリプトを無効化するページ
|| ( nms_disabled.length > 0 && checkDisablePage( nms_disabled ) )
// http 以外のプロトコル上では動作させない
|| ( location.protocol != "http:" )
// head要素が存在しないようなページでは動作させない
|| ( document.getElementsByTagName( "head" ).length == 0 )
// 画像かテキストのみ表示している場合は動作させない
|| ( location.href.match( /\.(jpe?g|gif|png|bmp|swf|js|txt)$/i ) )
// デバッグ用ページでは動作させない
|| ( window.name.indexOf( "[nmsinfo]" ) != -1 )
) {
delete nms_trusted;
delete nms_blocked;
delete nms_disabled;
return;
}
// 許可・ブロックするアドレスを登録
function Rule( loc, block, visible ) {
this.location = loc;
this.block = block;
this.type = getAddressType( loc )
this.visible = visible;
}
var Rules = new Array;
Rules.add = function( loc, block, visible ) {
if( loc == "" ) return null;
// 既に存在するなら登録しない
for( var i = 0, len = this.length; i < len; i++ ) {
var rule = this[i];
if( rule.location == loc ) {
if( rule.block == block ) {
return rule;
}
else {
rule.block = block;
rule.visible = visible;
return rule;
}
}
}
var rule = new Rule( loc, block, visible );
this.push( rule );
return rule;
};
Rules.match = function( url ) {
for( var i = 0, len = this.length; i < len; i++ ) {
var rule = this[i];
if( rule.type == "domain" ) {
var domain = escape_reg( rule.location );
var reg = new RegExp( "^http://(?:[^\\.]+\\.)?" + domain + "/", "i" );
if( reg.test( url ) ) {
rule.visible = true;
return rule;
}
}
else {
if( ( rule.type == "url-prefix"
&& url.indexOf( rule.location.slice( 0, -1 ) ) == 0 )
||
( rule.type == "url" && rule.location == url ) ) {
rule.visible = true;
return rule;
}
}
}
return this.add( get_sld( url ), true, true );
}
// 常に許可するロケーションを登録
each( nms_trusted, function( rule ) {
Rules.add( rule, false, false );
} );
// 常にブロックするロケーションを登録
each( nms_blocked, function( rule ) {
Rules.add( rule, true, false );
} );
delete nms_trusted;
delete nms_blocked;
delete nms_disabled;
var nms_config_description = {
block_images : "\u753B\u50CF\u3092\u30D6\u30ED\u30C3\u30AF\u3059\u308B"
, block_iframe : "iframe \u3092\u30D6\u30ED\u30C3\u30AF\u3059\u308B"
, block_flash : "Flash \u3092\u30D6\u30ED\u30C3\u30AF\u3059\u308B"
, block_applet : "JAVA \u3092\u30D6\u30ED\u30C3\u30AF\u3059\u308B"
, block_jsurl : "javascript \u306E URL \u3092\u30D6\u30ED\u30C3\u30AF\u3059\u308B"
, nms_enable_inframe : "iframe \u5185\u3067\u3082 No More Scripts \u3092\u6709\u52B9\u306B\u3059\u308B"
, reload_trusted : "\u8A31\u53EF\u8A2D\u5B9A\u3092\u5909\u66F4\u3057\u305F\u6642\u306B\u30EA\u30ED\u30FC\u30C9\u3059\u308B"
, show_placeholder : "\u30D6\u30ED\u30C3\u30AF\u3057\u305F\u8981\u7D20\u306E\u4EE3\u66FF\u8981\u7D20\u3092\u8868\u793A\u3059\u308B"
, confirm_enabled_object : "Flash\u7B49\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u8868\u793A\u3055\u305B\u308B\u969B\u306B\u78BA\u8A8D\u3059\u308B"
};
// \r\nこのオブジェクトを許可しようとしています。よろしいですか?
var MSG_CONFIRM = "\r\n\u3053\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8A31\u53EF\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059\u3002\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F";
// NoMoreScriptsを停止する
var MSG_DISABLE_NMS = "No More Scripts\u3092\u505C\u6B62\u3059\u308B";
// NoMoreScriptsを再開する
var MSG_ENABLE_NMS = "No More Scripts\u3092\u518D\u958B\u3059\u308B";
// 全てブロックする
var MSG_BLOCK_ALL = "\u5168\u3066\u30D6\u30ED\u30C3\u30AF\u3059\u308B";
// 一時的な設定
var MSG_INSTANCE_SETTING = "\u4E00\u6642\u7684\u306A\u8A2D\u5B9A";
// このスクリプト自体を有効化するか
var nms_enable = ( window.name.indexOf( "[disable]" ) == -1 );
// ブロックしたコンテンツ
var blocked_contents = new Array;
if( nms_debug ) {
document.title = document.title + " " + window.name;
}
// 管理メニュー用のCSS
addStyle(
'#nms, #nms *{list-style-type:none !important;font-size:12px !important;color:#000 !important;margin:0 !important;padding:0 !important;float:none !important;max-width:100% !important;min-width:0 !important;max-height:100% !important;min-height:0 !important;text-align:left !important;}#nms{position:fixed !important;border:1px solid #aaa !important;background-color:#fff !important;z-index:1024 !important;opacity:0.3 !important;line-height:24px !important;}#nms:hover{opacity:1.0 !important;}#nms #nms-icon{width:24px !important;height:24px !important;background-position:4px 4px !important;background-repeat:no-repeat !important;}#nms:hover #nms-icon{display:none !important;}#nms .nms-domains{display:none !important;border-bottom:1px solid #ddd !important;background-position:left top !important;background-repeat:repeat-x !important;height:24px !important;line-height:24px !important;font-family:monospace !important;}#nms:hover .nms-domains{display:block !important;}#nms .nms-domains.current{font-weight:bold !important;}#nms .nms-domains span{display:block !important;background-position:4px 4px !important;background-repeat:no-repeat !important;height:24px !important;line-height:24px !important;margin-right:8px !important;padding-left:24px !important;}#nms .nms-domains:hover{background-color:#eef !important;background-image:none !important;cursor:pointer !important;text-decoration:underline !important;}.nms-placeholder{background-color:grey !important;border:3px dotted lightgreen !important;color:white !important;text-decoration:none !important;overflow:hidden !important;}#nms_setting{display:none;position:fixed !important;border:1px solid #aaa !important;background-color:#fff !important;z-index:1024 !important;}#nms_setting:hover{display:block !important;}#nms_setting li{padding:0px 4px !important;}#nms_setting li:first-child{border-top-width:0px !important;}#nms_setting li input{height:20px !important;}#nms_setting li label{line-height:20px !important;letter-spacing:1px !important;margin-left:4px !important;}#nms_setting li label:hover{cursor:pointer !important;text-decoration:underline !important;}#nms .nms-domains{background-image:url( data:image/gif;base64,R0lGODlhAQAYAIQWAPPz8/P09PT09PT19PX19fb29vf39vf39/j39/n4+Pn5+Pn5+fn5+vr6+vr7+vv7+/z7+/z8/P39/f79/v7+/v///v///////////////////////////////////////yH5BAEKAB8ALAAAAAABABgAAAUUIBAIA1EUxoEkysI0zgNFkjRRVQgAOw== ) !important;}#nms .nms-domains.instance_setting span{background-image:url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAOVSURBVHjaYvz//z8DJQAggBjRBerqZgR+//7lfnd3ydWWlrltioqyka9evb589+7tNVOmNCwDKvkJxP9g6gECiAWhcbqkgAB/j5WVYdT9+0+ep6XVzFJUlImPjHQV/fXrr3ROToUCUNlhIH4CxN9g+gACiBnGcHUNWmZrax5iZqbBoKQkz2toqOtgYqLBzcbGzMDCwsTw8eMPnnfvPgkkJeWlmJk5WBw9ugdk2D+AAAJrLi3t4m5vn3dv69bT/1+9+vL/+/e//0HgL5D69+8/HLx+/fn/799//58/f+t/bGxOF1CrKEAAsRQVtWmKi0uuEhcXERcXF2JgZmZi+PHjN8P9++8YgDYysLGxMIiJ8THIyYkyiIjwgC0UFhYBuuidLyMj40qAAGJhZWWpNjDQ1dHTU2X48+cPAyhSrl69wzBz5qyXr149eW9gYCptZ+fE+w8YbIqKomADli5d9XPTpmXLgUwOgABi9vEJnyAmJsH/D6iClZUZaCM7w4EDh/+2tZVOuHv3+uqjR/fufv/+vay+vpmUtLQoAxMTI9Cif0wvX75ll5aWfw4QQEwfPrxhefv2LcPDhy8ZPn/+BpT8zaCgoMAsLCwmDLThARDvO3fueMaFC+e///sHiXUHBzOmtWvXWIuIiJcABBDzyZMH99y7d4PHxMRKT0JCDKxATEyEQVlZW5uZme2vqqr6Hz09Ey97e3tLFRVZJpBXvn79yfD+/RegN6fcBwggFqCNN3V0TP4ICPACo4uF4devP0BvMDK4u7tyGRjo53z8+CFHUlKcQVZWCij3D+jS5wyvXn0GhtNlhlu3rlwHCCCWyMgkTjk5BS9Q4L1//xkckKDoFQP6ABgzwNCXYmAEuvzHj58MXFwcDF++fGOYNKnt7dGj+05+/vxpF0AAsSxfPu+DtLRMjaSkzKyXL18Bo+4N0PmqQMVc4Cj8+fM3w6dP3xh+//4ODBsZYFSKMrx58/LjixdPVwBtugMQQKCk/P/p0yfLGxsLpb5//ybCwsLMUFHRma6oqMj67dtPhps3bzPcuHGNQV/fiOHfPzaGvXu3/z916sghoL5XQPwYIIBgeeHbq1fPJ4PCD4g5Hzy46X/3roosFxc3Q19f890TJw5s9vIKDgQmHNbt29dv/v37916gumdA/B4ggJBzIyhfsAIxEycnpx0XF48f0Lm6d+/eOgoMlyNA8d9AzAfEH4H4OTRTfQQIMABdD3nQGHebyAAAAABJRU5ErkJggg== ) !important;}#nms .nms-domains.enablescript span{background-image:url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMeSURBVHjaYpRwWfSQk5nx1f2rr9sZ2Jm3MTAx/mBgZWJg+P8PiBkYGNiYGRh+A9kgDiMQswD5f/9B5NnYGAACiNnaPaV7cberDBsPW/iNBx8tf7z//ouBhfE6AyNQByNQHzPQsH8gk4AAxGcCGf4fYiAzMwNAADFL6EbWpkbrMlubyzLYWioosXCzBd1/8snl56fvrxn+/bvPwMbyD58BAAHELK4XVWtgpsZ88SlQnpOTwdJCjtHKQlHuHzNz5Ms3X61/fPzxgYGR8TlQ809sBgAEELOITlStDtCA++8ZGJ68Y2C49wboYqBB+kbyDPqGCorM7KxhL19/svj96dsnoKZbwDD4j2wAQAAxC2hF1cobqDHfA2r+8IOB4dMvBoZnHxkYHgMN/M3ByaCkLcekoaeo+J+FJejj+y/Ov7/+eA004BkwsH+DDAAIIGYezahaQXU15rtvgQZ8hxryk4HhPZB+AbTzIVD8EzMng7SWPLO0mpwC0KDIL+8/G//9+u0jAyvrfYAAYpQJ3vzLNMKH9QHQBYzAmGFkZEAFQP4/oDgoIoE+Y+BhZ2D49vYDw/0z1369vHL1KEAAsYAC+PdfRCBjAyBDgbEPVvcB6MW/jKwMTGwsbEAJDoAAYgFpYgQGLCtQBRMzkq7/CBcwswIxCwPD5zcfGJ5fusHw9vqN47/fvpvCwMGxFiCAWFiAmvm5gKaCNPyDOuM/1FAOiKEfX31muHf88t9nF26e//nhUx8DE8M2oP8/gpwGEEAsIAWCPBAbQKkTBNiA/mQB8l8//8hw88SN/3fP3Dj9/eXbKQzMjCuAGn+D/QQKGGB0AgQQCyhd8AJdwMEOSeYsQPr10y8MZ7dfYbh+4saZL68+TGRgZdnFwM7+iuH/X6gL/8N9ChBALMCoZJAUgwTUk/ufGI5uufn/1L5rF788f9cPzDzrGDjZvgA9gnAeGgAIIBZuDmZGhh/fGXZtuMpwYMvVE5+evp/HwMqwDGjrV3DuIwAAAohRyHnxMw525vfP7rzuBTptHTB1fUBoBGVfJga4C0AYlDv/Q70BdD5AgAEAoLEm4Zth7egAAAAASUVORK5CYII= ) !important;}#nms .nms-domains.blockall span{background-image:url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAOaSURBVHjaYvz//z8DJQAggFhAxFJGRoZfDAyaoqpqi4Xs7I0fb1y/7f2bN1F/GRg+goz/w8DAzcnLu0gxLCzo2alTNx5dvhz3j4HhdAPQcoAAYgC5YCFQ81Zjkxsf79z+///5/f8vTpz6v0hC8uBEoMYJDAys04SEd9zff+D/30d3/394eP//AgfHBzUMDKYgvQABBDZgs7rGxU+3gZrntf3/qSn+///edf+fnz3/f5aI6N7J3DxbHh45+v/r4d3/L0qI/X/cUPr/zeNH/6cbGN4F6QUIILABx1LS/v9/eR+omf//JymG/28V2f7/3Ln2/6Ojx//f27///+cDu/5fFOf9f4qT4f8hNub/X69c/L+lpOQ/SC9AADGBwuDxtq27Xtx+xsA2ZT7Db3YOht8/fzG8SIpk4P/4nEGQ8RfDvfAghl9fPzP8ZGRiUJk9k+Hd738MV9auOwHSCxBAYBfMZWAQWSQpdfD5xcv/f+1Y8/+BNNv/OyIM/28ocP2/LM/7/wwvw//DQNufzJ35/xnQqx3KyqeLGBhkQHoBAgjsAmYGhjefnz/z2exgt/s5rxSD4MxlDH94eBl+fPnG8PPzZ4Zf7OwMcjOBrjM0Y5hva3v0xd277qwMDE9AegECsEjHKACAMAwAAy7W///URZvaGsRCtgyB62OcCqVV5DoMZB/Y1RBydHm5psMMGYGl26rz/8EVQGAXAOOZl0NYZL3fjl2+ogw/GB7FhjH8eveB4RcTK8NvZnaG3x+/M1yOiWVgvHOLIfHAAWchKaktQANEQHoBAghsAKeo2ALPVSvdhf5+ZrgfEcTw+8sXhh9A26X7ZjIozFzE8BNk0K/fDKcSEhn+Xr/OELtqlZ2QtPRKkF6AAAIboOjnFySrrsRwJySc4fuHLwzf/zAzKE6ZzfBf34jht5wCg+aiRQy/WFgZfv36xXAgNpaBl4eHQT8iwgmkFyCAwAY8P3Xqzpc/TAxCWakMv9h4GZRnzGBgtLJlWObre3qht/cBRlU1BiOgIT+AGpXi4xkYBAUZ7h49+hSkFyCAwNHYxsBgssDR6f7bRw//f7104f/jixf/dyopnS4E+jOfgYGrRlLy4I3jJ/4/PXf+/9MHD/73+vk9i2VgcADpBQggRhDRBcxMXxgYzCX19RfKObuoX1m18vCLJ08i2RkYngKDAiQnICAqskI/Jtb97rFjD6+dPJkIlNs/D6gXIIAYKc3OAAEGAO4Npy5hgueqAAAAAElFTkSuQmCC ) !important;}#nms .nms-domains.trust span{background-image:url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAPESURBVHjaAEEAvv8BAEsbAAAA9QAACfIAAAv+BwDyAD4C8Q9lFwYlPhULGA4CAAEB6+/v8+jp7cj9+v+bAAECvAAFBPcACQcAAP//AAKIEW4A+0cZBq7/XWbKhpFxFqkMDtpODOKCogxAAxhefXjHcPjcCYaFGzYwHD1ycR0DM3spAx/XPYa//xgAAogBbIAnnxxjONPxnA3x/199u/MfF3j37cH/8nm1/1n19a4yaBgoMxgaMwAEEDODCi8Hw7+vE+IiPb0agysZ2Fl5GX4yfGf4x/CfAQT+Mfxl+AXkf2f4yMDA+pfB3FCJ4TPXa9HTB+8oMTAxbwEIIBaGX/9sxDUEY4zsxBm+MHxm+AHUyMXAB9YO0gox5DdQHGLIX6B3DXxYGGR3c/g8PsPoARBAzMzq/F12vtJa/PJfGXhZxRj4WISAiv4AMYj8BdT6Heiir0DyK5D9k+HRz5sMl7/tZWBhZmW4c/KvKEAAsQiIsNmoaosw/P3/g+Hshz0Mf4V+MUixqTKwM/AwMDOwAIOQAWzUD6ABL3/dY7jw4RDD7z9/GFQMeBhEJP8ZAgQQC48wMx+vABsDGxsrwz/G3wzXfh5leMV4j0GIRZqBk5EHqJ0RqPkLw7s/zxne/nrG8Jv5OwMXEy/DHwEmBh4hFnaAABTQwQ3AIBADQZ/viOm/S955oEgBYRpYjbbYF/QITRst5VBh1ovhCC24gW3Bnx/UBdLb1kSaxog4AlBIbikAg0AMjDRK3fvfU5C1FMVHJN8ZBhK2UX1NZrO7eMRLQ5I+kQWIAmxFgPCj03UrlffE5w9aWf0IIKZ3r76ceHLnEwMPUCM7CwcDBzAG2IGYk0EAiIWAWBgoJgQWA2E2oCt5gOqe32BiePP062WAAGL685Fl1sntLxkYf4A0cwIDjhPoAl6gYpgBIM38QMwLdBXQEqAq1r88DCfWv2f4+e3XDIAAYmJgY9p/cd/rtYdXfwQq4wcrYAZikDdAruACGgAykAkoxg42VoDh5PrvDGf3PNkH5G4GCCBmBnnx3wyf2c/cOPrFlY9bUFRLU4qBn5kfqIkbrBwYP0AD/wDZwKT15x/D3rWPGeZ3nL3//f+vGGCAPQEIIGYGPjUGBjb293++/dhx9tBjpbs3PqlzsAIdzs8HjpG///4wfPrwleHciQcM8yacYFg99+yu7z9/xDLwcNwA5UaAAGJkMDVkAKeWr/8YGH794QayPDk42LMkZISNRESA+YSRkeHd2y8/nz9+c+X7tx/TgbGyERjanxk4WcHZGSDAAMyhUSpfaf0ZAAAAAElFTkSuQmCC ) !important;}#nms .nms-domains.block span{background-image:url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAN2SURBVHjaYsxhYGD4B8TMQMwORN8ZGOx+MTCkcgoL23GLivIxMDIyfnr9+vO7N29O/GFgmA1UtoeVgeE7UC3DfyAGCCAWBigAGiLzl4GhS11DI9I4KopB2dOTgVdGBqSf4fOzZxw39+zxPbR4se/Fy5fXAdWVMjIw3AMZABBADCAXZDAwyBUwMBzf6eX1//vhw///f//+HwP8/Pn/x4kT/zcHBf2PZWC4GsHAoBwH1AsQQMwmDAwcQBMneOnqenlkZTGwiIgwMPz4AXQS0E3/gXb8Anro40cGhpcvGVh+/mRQA7qK/fFj0QtPnigBXbEFIIBYgP6ykWNgiDECOeftW2AoAH335w9E89evDEA/QAx8/x5sCMObNwwWQMNPMTD43GRg8AAIIGYzZuYuGw4OLQmgZjZBQYgL/gLdBLSN4ds3BoZPnyCaX79mYHj3juHnuXMMX/bsYWBmZma4zsgoChBALPwcHDYqrKwMTB8+MHzesIGBGWgrqxHQPWJiDAxsbJAQ/v0bbPOf8+cZPu/axfAfaLAKLy+DMAuLIUAAsfAxM/PxAm0EKWUC2vYHaAjT6dMMzIqKDAwg14C8AHTBv7t3GX4/ecLAAvQeUISBEagHqJcdIIBYWIAK2IH+5YDGKRtQgvHRIwaGFy9QXMAEDEyQOiYg9w/IAJA4ExMjQACxAMP4y192dk7Oz5/BtjFycTEw8PAA4wZoJDMzNJH8Awck05cvDGxA57MB+T+A8l///fsFEEAsH378OPGYi8tXAuRUkCag38CYkxMSIyAAikqQa5iYGBhBhn3/zvAAKPfyw4fLAAHE9P3Xr1lHgf76xc/PwAAMTLBGbm4GBhBfQICBARgzYDZIDCQHNOgvHx/DQaBXf/74MQMggJhY///ff+7jx7V7hYQgGkCGgGwGaYAZAPMSCwvYdQeFhRlOf/q0j+3//80AAcRsDAyin3//nrn865crh4SEqAJQMTPIAFBYAG0CawKlCaAr/wLDZD8QL3727D4wjcQAPfUEIICYtYFeBNr5/sfv3zsufPyo9ICFRZ0VqJEHaDsL0M//gCH/GYivAv29Ehgzmx8+3PX727dYoPE3QJkJIIAYE6FR8h0YiH/+/we6m8GTjYMjS1xQ0IifjY0DJPfh16+frz58uPLj+/fpQO5GVkbGzxxAQ0EGAAQYALoATpZS+Ly6AAAAAElFTkSuQmCC ) !important;}#nms .nms-domains.disablescript span, #nms #nms-icon.enablescript{background-image:url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ9SURBVHjaYpRwXnjPyVhK5P////+YGBkY3n3+xb339NM5v779zmQACTAC8f//DEyszP1OJlLZEoKc3//8+/efmZmJ6cCFFx8AAohFTV5Qtr/FheXvPwYGVhYGhis33jMcT1wj/+vDd6AAM9AAJgYGoCQLH4diXrIJq7WpJOuPnwwMHBwMDFH5OzkBAlA4hjgAgwAMPEHY/9+1B6AQZA7ExMwWYKVUnWgvDc8nnRf8E4IFuYohJma8xwd27O+puVMMHeIB94uWAGL59IuB4dxzoCuBKpiBlj1/DdINBExIGOQLIH373X+G30C1f/8ADWJlYPj0g4EBIIBYPgNNu/QSYgUT0Mb3b4EK/kNthxkABP+Bhtx9B9T0EmIAM8gAoOUAAcTyE8h59AHiApB3v30GKmBEtR3mjRdAua9Atf9ABgC9+B1oAEAAsYAs+w9xAFjdP4R6CIAaAHIBTC1MPYgGCCAmNHVg/J8BP0BWCxBATAwUAoAAYmFAchaMzYhDMbp3QWyAAGIBMZih7mBkhrL/Y8csQDkWoJp/0CgHJVKAAGJhB7pBkh+cWsEGfATGLRMjpmaQkBAvA4MIUO3fv5BYeMDGwAAQQGADpIURprJ/h0b9XyS//INQIkADZIQhKRGUkDiAegECiIUDyJAVAVryF5KQWL6hueAfxDBGIC0GtF0WaMAfoAGsQNs5gRgggFg4OZgYVWUhiQNkKssvZgam/8B0+BtqOxPUgP//WWXFmBhU5YAGADMTKzAzcXMwMgIEEMuzx++fz+46KAAMA3B2/vT5JzdQ/imDACfUKQzgAPrHwvR48/Lzf47u4v727++//0zMTIwP7735DBBgAAaE21DiH3bEAAAAAElFTkSuQmCC ) !important;}#nms #nms-icon{background-image:url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALiSURBVHjaYvz//z8DJQAggJgYKAQAAcSA7IIprKzJKzQ0bkkzMkYAuVzIFjwLlMm9ls9zz1CAGUUOIIDABrQyMLDPFRZuex4f/+d/fv7/S/b2Pww4OCYA5YUmqklzvUyVmfR7F+u//3sZ/r9vZfoRosDYB5QTA2JmgABiBBmwVVn5sEtqqg37r18MDM+fMzD8/cvw4917hoQN2zcVZ7JxmnZ+cGV4BnTpLaCWL0D8mYGhso9he8c1hkSAAAI7Q+P5cxv2PXsYGP78YWDg5AQq+srw7egpBn7xf66vJb85MNwFav4NVMgGxF+B+BEDgwkPgz6QpQAQQCwgA359//6LYe9eNoZ79xj+aesyXN6zm2GxDQfD5wlmnFPuPGV4tfk+Q4LWX6BCoOJzQPyDgeHjTwZQ4AkDBBDYgN8QsxkY7t9nOP/8IcPSMmcG4QYtBoFvdxgeMPAzLGSUY7h1/QVD2avvDAIgL3AzMPz7BQ5EJoAAAnthHgND+UmI4xgOWAswCNe5MqgyCjD8/vmPgfXfPwZZWR6G2fxyDIfeMjMwcDAwbDzO8Lb8JsNqoPLvAAEEdsFEBobpR4H2FzIwtP/9+1v55NWFDF8EZBi4+VgZPv5gYth55R/Du9dMDGzfmRga9/+91vSIYeE/BobrQK1PAQIIHAuMjIxAoxl4RBkYlAQjBKaZlctaMPz4zfCHiYNh44W/DN9/AtV8/88g03pz7+NPf5ZBgpHhHhC/BAggWEIBhhDDp9cMDDfuMP+Y9+rRFwZublaGT19+MXz/BbSLg5Hh/8Wf3x5//rsPFFIMENufgOIEIIAYsOQFLkY7lgzjPplXvkd0/jNO1P3PYC15H+jMJqCcDxArMsACHQgAAgibASBX8TNIc3gIxcheY1IXBIYvQyYQewCxKiQOGBhhigECCBYG2AwBpXcJIJYE4j+gAAPiV0D8E4jhtgIEEC4DGKC2gJzKCdXwDZJkUAFAgAEAv0UAkT3j1wsAAAAASUVORK5CYII= ) !important;}#nms .instance_setting:hover + #nms_setting {display : block;}'
+ "#nms{"
+ nms_config["position_v"] + ":0 !important;"
+ nms_config["position_h"] + ":0 !important;"
+ "border-" + nms_config["position_v"] + "-width : 0 !important;"
+ "border-" + nms_config["position_h"] + "-width : 0 !important;"
+ '}' );
if( nms_enable ) {
// window.name から許可/ブロックするドメインを取得
window.name.replace( /<([^$]+)\$([^>]+)>/g, function( $0, loc, block ) {
Rules.add( loc, ( block == "block" ), false );
} );
// ソースに埋め込まれたスクリプト等をブロックするか
var block_inline = Rules.match( location.href ).block;
// block external script <script src="...">
opera.addEventListener( "BeforeExternalScript", function( e ) {
if( Rules.match( e.element.src ).block ) {
blocked_contents.push( e.element.src );
e.preventDefault( );
}
}, false );
// block inline script <script>hogehoge( );</script>
opera.addEventListener( "BeforeScript", function( e ) {
if( block_inline ) {
blocked_contents.push( location.href + "#inline_script" );
e.preventDefault( );
}
}, false );
// block javascript url <a href="javascript:...">
if( nms_config["block_jsurl"] == true ) {
opera.addEventListener( "'BeforeJavascriptURL", function( e ) {
if( block_inline ) e.preventDefault( );
}, false );
}
}
document.addEventListener( "DOMContentLoaded", function( ) {
// block <body onload="...">
if( block_inline ) {
document.body.onload = null;
}
if( nms_enable ) {
// 画像のブロック
if( nms_config["block_images"] == true ) blockSrcElements( "//img[@src]" );
// iframe のブロック
if( nms_config["block_iframe"] == true ) blockSrcElements( "//iframe[@src]" );
// JAVA のブロック
if( nms_config["block_applet"] == true ) blockObjects( "//applet" );
// Flash のブロック
if( nms_config["block_flash"] == true ) {
blockObjects( "//object" );
blockObjects( "//embed" );
}
}
createBlockManager( );
}, false );
function createBlockManager( ) {
// ページ右下にブロックリストを表示
var dl = document.createElement( "dl" );
dl.id = "nms";
var dt = dl.appendChild( document.createElement( "dt" ) );
dt.id = "nms-icon";
if( !nms_enable ) dt.className = "enablescript";
var ddc = document.createElement( "dd" );
ddc.className = "nms-domains";
if( nms_enable ) {
// 「NoMoreScriptsを無効にする」メニュー
var dd = dl.appendChild( ddc.cloneNode( false ) );
dd.innerHTML = "<span>" + MSG_DISABLE_NMS + "</span>";
dd.className += " disablescript";
dd.addEventListener( "click", disableNMS, false );
// 「一時的な設定」メニュー
var dd = dl.appendChild( ddc.cloneNode( false ) );
dd.innerHTML = "<span>" + MSG_INSTANCE_SETTING + "</span>";
dd.className += " instance_setting";
// 一度だけ実行させて、サブメニューの表示位置を設定する
dd.addEventListener( "mouseover", function( ) {
var nmselem = $( "nms" );
var width = nmselem.offsetWidth - 1 - 12;
var height = ( nmselem.childNodes.length - 5 + 1 ) * 25;
if( nms_config["position_v"] == "top" ) height -= 25;
addStyle( "#nms .instance_setting:hover + #nms_setting {display : block;}"
+ "#nms_setting {"
+ nms_config["position_v"] + ":" + height + "px;"
+ nms_config["position_h"] + ":" + width + "px;"
+ "}" );
this.removeEventListener( "mouseover", arguments.callee, false );
}, false );
var dd = dl.appendChild( document.createElement( "dd" ) );
dd.id = "nms_setting";
dd.appendChild( createInstanceConfigManager( ) );
// 「全てブロックする」メニュー
var dd = dl.appendChild( ddc.cloneNode( false ) );
dd.innerHTML = "<span>" + MSG_BLOCK_ALL + "</span>";
dd.className += " blockall";
dd.addEventListener( "click", blockAllLocation, false );
var loc_host = location.host;
var loc_sld = get_sld( location.href );
// ブロックしたドメインを定義リストに放り込む
each( Rules, function( rule ) {
if( !rule.visible ) return;
var dd = dl.appendChild( ddc.cloneNode( false ) );
dd.innerHTML = "<span>" + rule.location + " \u3092"
+ ( rule.block ? "\u8A31\u53EF" : "\u30D6\u30ED\u30C3\u30AF" ) + "</span>";
dd.className += ( rule.block ? " block" : " trust" );
if( loc_host == rule.location || loc_sld == rule.location )
dd.className += " current";
dd.addEventListener( "click", function( ) {
var loc = this.childNodes[0].innerHTML.replace( /\s\u3092.*?$/, "" );
if( this.className.indexOf( "trust" ) != -1 )
this.className = this.className.replace( "trust", "block" );
else if( this.className.indexOf( "block" ) != -1 )
this.className = this.className.replace( "block", "trust" );
blockLocation( loc, ( this.className.indexOf( "block" ) != -1 ) );
}, false );
} );
}
else {
// 「NoMoreScriptsを有効にする」メニュー
var dd = dl.appendChild( ddc.cloneNode( false ) );
dd.innerHTML = "<span>" + MSG_ENABLE_NMS + "</span>";
dd.className += " enablescript";
dd.addEventListener( "click", enableNMS, false );
}
document.body.appendChild( dl );
}
function createInstanceConfigManager( ) {
var ul = document.createElement( "ul" );
for( var i in nms_config ) {
if( nms_config_description[i] == undefined ) continue;
var li = document.createElement( "li" );
var input = document.createElement( "input" );
input.id = "nms_set_" + i;
input.type = "checkbox";
input.checked = ( nms_config[i] == true );
input.addEventListener( "change", function( ) {
var name = this.id.replace( "nms_set_", "" );
var reg = new RegExp( "\\(" + name + "\\$(true|false)\\)" );
var option = "(" + name + "$" + ( this.checked ? "true" : "false" ) + ")";
if( window.name.match( reg ) ) {
window.name = window.name.replace( reg, option );
}
else {
window.name += option;
}
nms_config[ name ] = this.checked;
}, false );
var label = document.createElement( "label" );
label.setAttribute( "for", "nms_set_" + i );
label.innerHTML = nms_config_description[i];
li.appendChild( input );
li.appendChild( label );
ul.appendChild( li );
}
return ul;
}
function enableNMS( ) {
window.name = window.name.replace( "[disable]", "" );
reload( );
}
function disableNMS( ) {
window.name += "[disable]";
reload( );
}
function blockAllLocation( ) {
each( Rules, function( rule ) {
if( rule.visible ) {
blockLocation( rule.location, true );
}
} );
reload( );
}
function blockSrcElements( xpath ) {
var nodes = document.selectNodes( xpath );
each( nodes, function( node ) {
if( node.src != "" && Rules.match( node.src ).block ) {
blocked_contents.push( node.src );
addplaceholder( node );
}
} );
}
function blockObjects( xpath ) {
var objects = document.selectNodes( xpath );
each( objects, function( obj ) {
var source = obj.src || obj.data || obj.code || null;
if( !source ) {
for( var x = 0, len2 = obj.childNodes.length; x < len2; x++ ) {
var node = obj.childNodes[x];
if( !node.tagName ) continue;
if( node.name.match( /^data|movie|src$/ ) ) {
source = node.value;
if( source ) break;
}
}
}
if( source && source.indexOf( "http://" ) == -1 ) {
source = location.href.replace( /$\//, "" ) + "/" + source;
}
if( source && Rules.match( source ).block ) {
blocked_contents.push( source );
addplaceholder( obj );
}
} );
}
function addplaceholder( node ) {
if( nms_config["show_placeholder"] == false ) {
node.style.display = "none";
return;
}
var url2 = ( node["src"] ? node["src"] : node["data"] );
var hmm = document.createElement( "s" );
if ( node.tagName == "IMG" ) {
var url = url2;
}
else {
var url = escape( node.outerHTML );
}
var phwidth = calcdim( node, 'width', hmm ).replace( /px/, "" );
var phheight = calcdim( node, 'height', hmm ).replace( /px/, "" );
if( phwidth < 7 || phheight < 7 ) {
var style = "border:none !important;";
}
else {
var style = "";
phwidth -= 6;
phheight -= 6;
}
hmm.textContent = get_sld( url );
hmm.style = "width:" + phwidth + "px !important;"
+ "height:" + phheight + "px !important;"
+ "display:" + ( node.style.display ? node.style.display : 'inline-block' ) + ";"
+ style;
hmm.setAttribute( "url", url );
hmm.nodetag = node.tagName;
hmm.title = "Click to unblock this url : " + url2 + " \r\nwidth : " + phwidth + ", height : " + phheight;
hmm.className = "nms-placeholder";
hmm.addEventListener( "click", function( ) {
if( this.nodetag.match( /img/i ) || ( nms_config["confirm_enabled_object"] == true
&& window.confirm( this.getAttribute( "url" ) + MSG_CONFIRM ) ) ) {
bringback( this.getAttribute( "url" ), this, true );
}
return false;
}, false );
node.parentNode.replaceChild( hmm, node );
}
// ブロックしたコンテンツの復元
function bringback( url, placeholder, click ) {
url = unescape( url );
if ( !url.match( /^(\<|\x3c)/ ) ) {
var hmm = document.createElement( "img" );
hmm.src = url;
placeholder.parentNode.replaceChild( hmm, placeholder );
}
else {
placeholder.outerHTML = url;
}
if( !click ) return;
var nodes = document.selectNodes( '//s[contains(@url,"' + url + '")]' );
each( nodes, function( node ) {
bringback( url, node, false );
} );
}
function calcdim( node, attr, hmm ) {
if( attr == "width" ) {
var width = node.width || node.offsetWidth || getComputedStyle( node ).width;
if( width === 0 || width === 1 ) {
hmm.textContent = "_";
return "20px";
}
return ( node.hasAttribute( "width" ) ? node.getAttribute( "width" )
: ( getComputedStyle( node ).width ? getComputedStyle( node ).width
: getComputedStyle( node ).maxWidth ) )
}
else {
var height = node.height || node.offsetHeight || getComputedStyle( node ).height;
if( height === 0 || height === 1 ) {
hmm.textContent = "_";
return "20px";
}
return ( node.hasAttribute( "height" ) ? node.getAttribute( "height" )
: ( getComputedStyle( node ).height ? getComputedStyle( node ).height
: getComputedStyle( node ).maxHeight ) )
}
}
function blockLocation( domain, block ) {
var reg = new RegExp( "<" + escape_reg( domain ) + "\\$(block|trust)>" );
var option = "<" + domain + "$" + ( block ? "block" : "trust" ) + ">";
if( window.name.match( reg ) ) {
window.name = window.name.replace( reg, option );
}
else {
window.name = window.name + option;
}
reload( );
}
function getAddressType( addr ) {
return addr.match( /\*$/ ) ? "url-prefix"
: addr.indexOf( "http" ) == 0 ? "url"
: "domain";
}
// ページのURLが常に無効化する対象か
function checkDisablePage( addrs ) {
var disabled = false;
each( addrs, function( addr ) {
if( getAddressType( addr ) == "domain" )
var reg = new RegExp( escape_reg( addr ) );
else
var reg = new RegExp( "^" + escape_reg( addr ).replace( "\\*", ".*" ) + "$" );
if( location.href.match( reg ) )
disabled = true;
} );
return disabled;
}
function escape_reg( loc ) {
return loc.replace( /([-_.*+$^?|(){}\[\]])/g, "\\$1" );
}
// セカンドレベルドメインを取得
function get_sld( str ) {
return str
.replace( /^https?:\/\//, "" )
.replace( /^([^/]+).*$/, "$1" )
.replace( /^(?:[\w-]+\.)*([\w-]+\.[\w-]{2}\.[\w-]{2,})$|^(?:[\w-]+\.)*([\w-]{3,}\.[\w-]{2,})$/i
, function( $0, $1, $2 ) { return $1 || $2 } );
}
function reload( ) {
if( nms_config["reload_trusted"] == true ) {
location.href = location.href;
}
}
function log( str ) {
if( nms_debug ) opera.postError( str );
}
function each(a,f){
var c = 0;
var len = a.length;
var i = len % 8;
if (i>0) do {
f(a[c],c++,a);
} while (--i);
i = parseInt(len >> 3);
if (i>0) do {
f(a[c],c++,a);f(a[c],c++,a);
f(a[c],c++,a);f(a[c],c++,a);
f(a[c],c++,a);f(a[c],c++,a);
f(a[c],c++,a);f(a[c],c++,a);
} while (--i);
};
function addStyle( style ) {
var link = document.createElement( "link" );
link.rel = "stylesheet";
link.href = 'data:base64,' + style;
link.type = "text/css";
document.getElementsByTagName( "head" )[0].appendChild( link );
}
function $( id ) {
return document.getElementById( id );
}
document.addEventListener( "load", function( ) {
if( !nms_debug ) return;
// Shift+ダブルクリックでブロックしたコンテンツを表示
document.addEventListener( "dblclick", function( e ) {
if( !e.shiftKey ) return;
var win = window.open( );
win.name = "[nmsinfo]";
var html = new Array;
html.push( "<h3>blocked Items</h3>" );
html.push( "<ol>" );
each( blocked_contents, function( contents ) {
html.push( '<li><a href="' + contents + '">' + contents + "</a></li>" );
} );
html.push( "</ol>" );
html.push( "<h3>Rules</h3>" );
html.push( "<table>" );
each( Rules, function( rule ) {
if( !rule.visible ) return;
html.push( "<tr>"
+ "<td>" + rule.location + "</td>"
+ "<td>" + ( rule.block ? "block" : "trust" ) + "</td>"
+ "<td>" + ( rule.visible ? "visible" : "hidden" ) + "</td>"
+ "</tr>" );
} );
html.push( "</table>" );
html.push( "<h3>option</h3>" );
html.push( "<ul>" );
for( var i in nms_config ) {
if( typeof nms_config[i] == "Boolean" ) {
var val = ( nms_config[i] == true ? "true" : "false" );
}
else {
var val = nms_config[i];
}
html.push( "<li>" + i + " : " + val );
}
html.push( "</ul>" );
win.document.write( html.join( "\r\n" ) );
win.document.close( );
}, false );
}, false );
} )( true );