tetsunosukeのnotebook

tetsunosukeのメモです

Greasemonkeyの練習

Google Reader上で選択中のエントリのドメインを調べる。もともとニーズ的には社内からショートカットvでviewすると、閲覧禁止サイトとしてblogが開かれてしまうことがあるので、それを前もって防ごう、という意図。

そもそも選択中のエントリである必要ないよね・・・とか思ったけど、とりあえずは無理矢理でも動作する状態になったので記念保存。

XPathって昔から使えたっけ?これ使えれば相当いろいろなものが楽できるので、これを応用して他のものをさっさと作ろうと思う。

// ==UserScript==
// @name           gr domain checker
// @namespace      kidd-number5
// @include        http://www.google.com/reader/*
// ==/UserScript==
(function() {
	document.addEventListener(
		'keydown',
		function(event) {
			var key = String.fromCharCode(event.keyCode);
			if (key.toLowerCase() == 'd') {
			    link =getFocusedLink();
				span = document.createElement("div");
				span.innerHTML= getDomain(link);
				appendComments(span,'//div[@id="current-entry"]//div[@class="collapsed"]');
			}
		},
		false
	);

	function getFocusedLink() {
		return getStringByXPath('//div[@id="current-entry"]//a[@class="entry-title-link"]/@href');
	};

	function getStringByXPath(xpath, node) {
		var node = node || document
		var doc = node.ownerDocument ? node.ownerDocument : node
		var str = doc.evaluate(xpath, node, null,
			XPathResult.STRING_TYPE, null)
		return (str.stringValue) ? str.stringValue : ''
	};
	
	function getDomain(url) {
			url =url.substring(url.lastIndexOf("http"))
			url =url.replace("%3A",":");
			console.info(url);
			reg =new RegExp("http(s?)://(.*)/");
			res =url.match(reg);
			return res[2].split("/")[0];
	};
	function appendComments(element,xpath){
		var currentEntry = document.evaluate(xpath,document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
		var currentItem = currentEntry.snapshotItem(0);
		currentItem.appendChild(element);
	};


})();