過去にコメントにネタ仕込んでたことがあったので作ったけど
結局意味があったのは一回だけだったかな……。
多分もうそういうネタはないんじゃないかと思うので廃棄。
UserScript のヘッダがあるけど実際に使えたかどうか覚えてません。
過去にコメントにネタ仕込んでたことがあったので作ったけど
結局意味があったのは一回だけだったかな……。
多分もうそういうネタはないんじゃないかと思うので廃棄。
UserScript のヘッダがあるけど実際に使えたかどうか覚えてません。
[Patterns]
Name = "www.gazo-ch.net: fix image url (2015-02-26; rentan)"
Active = TRUE
URL = "www.gazo-ch.net/$TYPE(htm)"
Limit = 1000
Match = "(<a\s[^>]++href=")\1(http://img.gazo-ch.net/bbs/)\9"
Replace = "\1http://\h/i/image.exec/1/1/?size=0&img_file=\9"
作ってみただけ。
[Patterns]
Name = "pixiv Ad Killer (2015-01-07; )"
Active = TRUE
URL = "www.pixiv.net/$TYPE(htm)"
Limit = 30000
Match = "($NEST(<div,\s"
"(class=$AV(ads_area|user-ad-container|search_a2_right|hotspot|ad(\s*)+|_premium-promotion*)"
"|class=$AV(worksImageresponse)"
"|id=$AV(back-to-top|header-banner)"
")*,</div>)"
"|$NEST(<style(\s|>),*.ads_(area|anchor)*,</style>)"
"|$NEST(<iframe,*src=$AV(http://serv.ads.pixiv.org/get.php*)*,</iframe>)"
"|$NEST(<section,\sclass=$AV(popular-introduction)*,</section>)"
"|<script\sid=$AV(template-thumbnail-filter)*</script>"
"|"
"$NEST(<div,\sclass=$AV(area_new)> *<a\shref=$AV((./premium|/print/service).php*)*,</div>)"
"|"
"<a\s+href=$AV((http://www.pixiv.net|.|)/premium.php*|/setting_user.php#premium_noads)*</a>"
"|<li\sclass=$AV(info)[^>]+> <a\shref=$AV(premium.php*)*</li>"
"|"
"(<script(\s|>)*</script>&&*"
"(http://((cache|adf.send).microad.jp|ads2.pixiv.net|pagead2.googlesyndication.com)/"
"|ads_dokoiku|ads_textads_show|microadAds|ads_writed|window.pixivComicAds"
")*)"
"|"
"<a\s(target=$AV(*)|) href=$AV(http://serv.ads.pixiv.org/*)*</a>"
")$SET(#=<!-- Ad killed -->)"
"|"
"$NEST(<h1>,\s<div\sid=$AV(logoMap)*,</h1>)"
"$SET(#=<h1><a id="logo" title="pixiv" href="http://www.pixiv.net/">pixiv</a></h1>)"
"|"
"<div\sclass=$AV(ad-footer)*(<footer)\#"
"|"
"<ul\sclass=$AV(_toolmenu)>*</ul>"
Replace = "\@"
<script>
以外はスタイルシートで display: none;
を指定して非表示にした方が綺麗に書けるっぽいけど。
function hook (obj, name, func) {
var orig = obj [name];
var k = '__prox_' + name;
if (!obj [k]) {
obj [k] = orig;
}
obj [name] = func;
return orig;
}
hook (window, 'setInterval', function (h, ms) {
function f () {
try {
h ();
}
catch (e) { }
}
return window.__prox_setInterval (f, ms);
});
使ってないので設定ファイルから削除。日付古いですが、前回からちょっと変わってます。
Name = "Enemy wiki Normalizer (2011-08-18; rentan)"
Active = TRUE
URL = "www21.atwiki.jp/enemy/$TYPE(htm)"
Limit = 2000
Match = "color=$AV(#(66|80|99|C0)+{3})$SET(#=color="#800080")"
"|style=$AV((*;|) color: (#999999|#808080|rgb \((153,153,153|128,128,128)\))(;*|))$SET(#=style="color: #800080")"
"|style=$AV((*;|) background(-color|): (#ffffcc|rgb \(255,255,204\))(;*|))"
"|"
"(<br /+> )++{1,*}(<br /+> </(dt|dd|font|strong)>)\#"
"|(<br /+> </(font|strong)>)\# <br /+>"
"|</p> <p>(\s|[%c2][%a0])+(</p>)\#"
"|<p>(\s|[%c2][%a0])+</p> (<p>)\#"
"|"
"<link\srel=$AV(stylesheet) type=$AV(text/css) href=$AV(http://www21.atwiki.jp/_skin/base_006red.css*)*>"
"$SET(#=<style type="text/css">"
"dt { margin-top: 1em; }"
"</style>)"
"|"
"(<img*>&&*src=$AV(http://analyzer.dip.jp/cgi/*)*) <br /+>"
"|"
"$NEST(<div,\sid=$AV(at_social_links)*,</div>)"
Replace = "\@"
WordPress:誰かが記事をコピーしたら教えてくれるプラグインCCC(Check Copy Contents)を作ってみた。 | 着ぐるみ追い剥ぎペンギン
誰かが、あなたのブログの文章をコピーしたら、そのコピーされた箇所とページのURLを、こっそりとあなたにメールで通知します。
(リンク先より引用)
という恐ろしい WordPress プラグインがありまして、それに対する防御策の実験です。
以下のコードを実行する <script> タグをページに挿入することで、copy イベントから window.getSelection()
や document.selection.createRange()
が呼ばれた場合に警告を表示して、ダミーのデータ(「輝け」)を返します。
function hook (obj, name, func) {
var orig = obj [name];
var k = '__prox_' + name;
if (!obj [k]) {
obj [k] = orig;
}
obj [name] = func;
return orig;
}
function hookSelection () {
function msg (s) {
alert (location.href + '\n\n' + s + ' is called from oncopy event.');
}
if (window.getSelection) {
hook (window, 'getSelection', function () {
if (!window.event || window.event.type !== 'copy') {
return window.__prox_getSelection ();
}
msg ('window.getSelection');
var sel = {
anchorNode: null,
anchorOffset: 0,
focusNode: null,
focusOffset: 0,
toString: function () { return 'Shine'; }
};
return sel;
});
}
if (document.selection.createRange) {
hook (document.selection, 'createRange', function () {
if (!window.event || window.event.type !== 'copy') {
return document.selection.__prox_createRange ();
}
msg ('document.selection.createRange');
var rng = {
setStart: function () { },
setEnd: function () { },
cloneContents: function () { return document.createTextNode ('Shine'); },
text: 'Shine',
htmlText: 'Shine',
toString: function () { return 'Shine'; }
};
return rng;
});
}
}
hookSelection ();
問題のプラグインの現状のコードがダミーのデータを消化できる程度に偽のプロパティを用意してありますが、ダミーを返す代わりに問答無用で例外を投げちゃってもいいかも知れません。
あと document.getSelection()
も潰した方がいいかも。
copy イベント以外での監視には対応していないので、例えば window.setInterval()
で監視、など防御策に対する対抗措置が取られると対応が難しいです。スパイ目的ではなく動的なウェブ表現のために選択範囲の取得を行うページもあるので、全てをブロックするという訳にもいかないと思うので。
こんな面倒な方法ではなくて、単にブロックリストに以下のように追加する手もありますが、パス名を変更されるとブロックできません。
*/wp-content/plugins/check-copy-contentsccc/
ブロックリストにおいて *
から始まる URL だとハッシュ化されない、というのもマイナスポイント。
2016-02-12 イベント外から呼び出されると window.event
が null
のためエラーになるので修正しました(赤字部分)。
添付ファイル:pixiv_20130416.zip
最近この手の JavaScript を潰すとページそのものがまともに表示されなくなるサイトがいくつもあったので、しばらく前から無効にして様子を見ていたのですが、どうしても潰したいほど不便なサイトはなかったので、いっそフィルタを使わないことにしました。
というわけで最終バージョンを貼っておきます。
※ Proxomitron 以外での使用およびそれを目的とした翻案、移植、改変等を禁止します。
[Patterns]
Name = "Kill JS image viewer (2013-02-03; rentan)"
Active = TRUE
URL = "$TYPE(htm)(^sneakerbunko.jp/|www.chuable.net/|www.propeller-game.com/)"
Bounds = "<script\s*</script>"
Limit = 256
Match = "*src=$AV((*/)+"
"(jquery[._]lightbox"
"|jquery.lightpop"
"|jquery.fancybox"
"|jquery.prettyPhoto"
"|jquery.lazyload"
"|lightbox"
"|lytebox"
"|multibox"
"|highslide(-with-gallery|)"
"|shadowbox(-base|)"
"|FancyZoom(HTML|)"
")*.js(\?*|))*"
Replace = "<!-- image viewer JS killed -->"
Proximodo に手を加えてコンパイルした人が、Proximodo のライセンスを GPL から修正 BSD ライセンスに変更するよう原作者に依頼する事例が発生し、各所に波紋を呼んでいるようです。
オニギリを食べ終わった後になってから海苔が巻いてあったことに気がつくみたいな話で、そういう人が「私は有明海産の海苔しか食べないようにしています」「だからさっき食べたオニギリの海苔を有明産にして下さい」って言ってるみたいな?
ところで、FSF がコードを取り込むときはパブリックドメインとする宣言書か著作権を譲渡する書類に署名してもらうそうですが、Proximodo はそこまでしていたんでしょうか。著作権者の中に sourceforge.net のアカウントが削除されているとか、他界しているとかで連絡が取れない人がいたら勝手に変えられないような気がします。その場合ライセンスを変更できるのはコントリビュートを取り込む前のバージョンになりますね。
あと「完全に死んだプロダクト」って、プロジェクトとしては死んでるけどプロダクト単体としてはせいぜい半殺しくらいだと思う。機能的に発展してないというのはともかく、新しいOSへの対応といった面では RWIN や .. の問題は非公式の修正パッチがありますし。
チュアブルソフトの『ラブらブライド』のページに html5.js を勝手に突っ込むフィルタのテスト。IE8 用。
[Patterns]
Name = "Chuable soft lbr html5 (2013-01-12; rentan)"
Active = TRUE
URL = "www.chuable.net/lbr/$TYPE(htm)"
Limit = 500
Match = "</head>"
Replace = "<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>\n"
"</head>"
Proxomitron カテゴリーの記事を表示しています。