xenoma日記 RSSフィード

2008-12-16

ad4Uの隠しリンクを露出させるGreasemonkeyスクリプト

ソースが一部表示されていなかったようです。今は修正済みです。申し訳ありません。

ライブドア楽天が使用しているドリコム行動ターゲティング広告「ad4U」。

ブラウザに残っているサイト訪問履歴を元に広告を出してくる、プライバシーも何もあったもんじゃないアレです。で、ad4u利用サイトでは、閲覧履歴の取得のために大量の隠しリンクが埋め込まれています*1

さて、この隠しリンクをGreasemonkeyスクリプトで表示させる、というのが今回のお話。

IEにおいては、高木先生が作られたユーザースタイルシートで隠しリンクを露出させることが出来ます(http://takagi-hiromitsu.jp/diary/20081211.html#p01)。アラートを出すようにしておけば、ad4Uな広告が入っているサイトにすぐに気づけて便利です。

私も「楽天ad4U、個人ブログまで監視対象にしていた」を書くときに利用させていただきました。

しかし、この「スタイルシートを利用する」というアイデアの参考元であるところのamachang曰く「まともな CSS パーサーだとエラーにな」る手法を使っているためでしょうか、Firefoxだとうまくいきません。

私が普段使っているFirefoxでも、ad4Uを使ったサイトにすぐに気づきたいし、隠しリンクも見たい。こういうときは、グリモンだ。ということで、Greasemonkeyスクリプトを書いてみました。

このGreasemonkeyスクリプトは、隠しリンクの露出が出来るだけで、ad4Uな広告そのものをブロックできるわけではありません。ad4Uの無効化は末尾にあげた関連エントリをご覧ください。

// ==UserScript==
// @name           Show ad4U hidden links
// @namespace      http://d.hatena.ne.jp/xenoma/
// @description    Show ad4U hidden links.
// @include        http://*
// @author         xenoma
// ==/UserScript==

// ad4Uによるページ表示履歴解析を完全に無効にするわけではありません
// アラートを出し、履歴解析のターゲットになっているURLを表示するだけです
(function(){
	var bodyElement = document.body;
	var ad4u_detect = function(){
		// 履歴対象のURLリストが入っているdiv要素
		var ad4u_list = document.getElementById('ad4u_list');
		
		if(ad4u_list){				
			bodyElement.removeEventListener('DOMSubtreeModified', ad4u_detect, true);
			
			alert("Hello, ad4U!");
			var source = ad4u_list.innerHTML;
			
			// plaintext で出力するとき
			// var element = document.createElement('plaintext');
			
			// リンク形式で出力するとき
			var element = document.createElement('div');
			source = source.replace(/<a href="(.+?)">[^<]*<\/a>/gi, "<A href=\"$1\"><NOBR>$1<\/NOBR><\/A><BR \/>");
			
			element.style.cssText="overflow:scroll; border:dashed 4px red; width:290px; height:75px;";
			element.innerHTML = source;
			bodyElement.appendChild(element);
		}
	};
	bodyElement.addEventListener('DOMSubtreeModified', ad4u_detect, true);
})();

とりあえずFx3, GM0.8の環境では動いています。隠しリンクは<div id = "ad4u_list">に入っているのですが、元々は存在しておらず、後から追加されるようでした。そこで、DOM Treeの変化を手がかりにすることにしました。

余談ですが、plaintextで出力するようにすると、いくつかのdiv要素に分かれていることがわかります。この区切りはおそらく広告ジャンルです。ジャンルごとにどんなURLが見られているかも見えてきます。ジャンルの詳細は、ドリコムのプレスリリースがありますので以下に上げておきます。

髪に関するURL群は、コスメ>化粧品という扱いかな。

注意

どうぞご利用ください、といいたいところだけど、Greasemonkeyスクリプトインストールすることはリスクを伴います。悪意あるスクリプトや穴のあるスクリプトを組み込んでしまわないよう、得体の知れないサイトの言うことを信じて安易にインストールしてはいけませんよ*2

関連エントリ

追記

ソースの後半が切れていたので、表示されるよう修正。もしかして途中で<が入ると切れちゃうのか?スーパーpre記法javascript

追記2

使ってみて ad4u の発動条件について気づいたことなど

*1訪問済みのリンクの色が異なるのを利用している。未訪問のリンクと訪問済みリンクのスタイルに違いをもたせて、その違いを検出している。

*2:それでも構わないなら、どうぞご利用ください

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証