<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OTCHY.NET &#187; greasemonkey</title>
	<atom:link href="http://www.otchy.net/tag/greasemonkey/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.otchy.net</link>
	<description>Otchy の技術ネタ。JavaScript 率と Twitter 率がやや高く、他にも PHP/Java/Perl などなど。共通点は Web。</description>
	<lastBuildDate>Wed, 01 Feb 2012 14:39:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Gmail 新デザインのフォントサイズを小さくするスクリプト</title>
		<link>http://www.otchy.net/20111207/gsmall/</link>
		<comments>http://www.otchy.net/20111207/gsmall/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 06:48:32 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[greasemonkey]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1755</guid>
		<description><![CDATA[カッとなって書いた。後悔はしていない。
ブックマークレット版
Gsmall

javascript:(function(d,s){s=d.createElement('link');s.rel='stylesheet'; [...]]]></description>
			<content:encoded><![CDATA[<p>カッとなって書いた。後悔はしていない。</p>
<p>ブックマークレット版<br />
<a href="javascript:(function(d,s){s=d.createElement('link');s.rel='stylesheet';s.type='text/css';s.href='data:text/css;base64,LnB3LC5mTiwuQmt7Zm9udC1zaXplOjkwJX0uQWssLnhZLC5uTSwudkJ7Zm9udC1zaXplOjgwJX0uV3IsLlQtSSwuSi1NLC5ha2h7Zm9udC1zaXplOjEycHh9';d.body.appendChild(s)})(document.getElementById('canvas_frame').contentWindow.document);">Gsmall</a></p>
<pre>
javascript:(function(d,s){s=d.createElement('link');s.rel='stylesheet';s.type='text/css';s.href='data:text/css;base64,LnB3LC5mTiwuQmt7Zm9udC1zaXplOjkwJX0uQWssLnhZLC5uTSwudkJ7Zm9udC1zaXplOjgwJX0uV3IsLlQtSSwuSi1NLC5ha2h7Zm9udC1zaXplOjEycHh9';d.body.appendChild(s)})(document.getElementById('canvas_frame').contentWindow.document);
</pre>
<h4>2011-12-14 追記</h4>
<p>Greasemonkey 版が上手く動いたり上手く動かなかったり、多分タイミングの問題とかあって対応が面倒なので取り下げます。<br />
個人的には Gmail 画面は一回開いたら開きっぱなしなので、ブックマークレット版だけで十分だったりするのです。<br />
それと、ブックマークレット版は CSS の短縮化と適用範囲の拡大を行いました。</p>
<p><del>Greasemonkey 版<br />
<a href="/gm/gsmall.user.js">インストール</a></del></p>
<pre><del>
// ==UserScript==
// @name           Gsmall
// @namespace      http://www.otchy.net/
// @include        https://mail.google.com/mail/*
// @version        1.0.0
// ==/UserScript==

(function (d, func) {
	var h = d.getElementsByTagName('head')[0];
	var s = d.createElement("script");
	s.textContent = '(' + func.toString() + ')(document);';
	h.appendChild(s);
})(document, function(d) {
	var d = d.getElementById('canvas_frame').contentWindow.document;
	var s = d.createElement('link');
	s.rel = 'stylesheet';
	s.type = 'text/css';
	s.href = 'data:text/css;base64,LnB3e2ZvbnQtc2l6ZTo5MCV9LnhZe2ZvbnQtc2l6ZTo4MCV9Lm5Ne2ZvbnQtc2l6ZTo4MCV9LnZCe2ZvbnQtc2l6ZTo4MCV9Lldye2ZvbnQtc2l6ZToxMnB4fS5ULUl7Zm9udC1zaXplOjEycHh9LkotTXtmb250LXNpemU6MTJweH0uYWtoe2ZvbnQtc2l6ZToxMnB4fQ==';
	d.getElementsByTagName('head')[0].appendChild(s);
});
</del></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111207/gsmall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Greasemonkey をインストールせずに試すブックマークレット</title>
		<link>http://www.otchy.net/20110822/gm-test-bookmarkle/</link>
		<comments>http://www.otchy.net/20110822/gm-test-bookmarkle/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 07:09:02 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[bookmarklet]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1390</guid>
		<description><![CDATA[Gresemonkey (など) のスクリプトをインストールすることなく任意のサイトでちょこっと試すためのブックマークレット。
起動すると、user.js の URL を聞いてくるので、入力すると今開いているページにその [...]]]></description>
			<content:encoded><![CDATA[<p>Gresemonkey (など) のスクリプトをインストールすることなく任意のサイトでちょこっと試すためのブックマークレット。<br />
起動すると、user.js の URL を聞いてくるので、入力すると今開いているページにそのスクリプトを読み込みます。<br />
単にその user.js をそのページに追加するだけの単純な仕組みなので、GM_* 等への対応はありません。</p>
<p>任意のサイトを対象とした user.js を書くにあたって、自分のテストを楽にするために書きました。</p>
<p><a href="javascript:(function(d){var%20a=prompt('Enter%20script%20URL.');if(a){var%20s=d.createElement('script');s.src=a;d.getElementsByTagName('head')[0].appendChild(s);}})(document);">GM Test</a></p>
<pre>
javascript:(function(d){var%20a=prompt('Enter%20script%20URL.');if(a){var%20s=d.createElement('script');s.src=a;d.getElementsByTagName('head')[0].appendChild(s);}})(document);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20110822/gm-test-bookmarkle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleFloatingForm Ver.1.1.0 を公開</title>
		<link>http://www.otchy.net/20110722/googlefloatingform-110-released/</link>
		<comments>http://www.otchy.net/20110722/googlefloatingform-110-released/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 02:28:20 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1377</guid>
		<description><![CDATA[現在の Google の SERPs に対応した GoogleFloatingForm を公開しました。
検索結果をスクロールしても検索窓がついてくるっていう例のアレです。
旧版までは、アニメーションとか使ってそれらしく [...]]]></description>
			<content:encoded><![CDATA[<p>現在の Google の SERPs に対応した <a href="/greasemonkey/googlefloatingform/">GoogleFloatingForm</a> を公開しました。<br />
検索結果をスクロールしても検索窓がついてくるっていう例のアレです。</p>
<p>旧版までは、アニメーションとか使ってそれらしく見せていたんですが、今バージョンからは単に position:fixed で固定しています。Google のデザインがどんどんシンプルになっていくので、それに合わせたというか、ぶっちゃけていうと DOM が大きく変わったのでそれに追随するのが面倒だったというか。</p>
<p>なので実装としては、動的に CSS を追加しているだけなので、そんなんユーザスタイルシートとかでやれよ、ってのはごもっともな指摘ですが、まあ誰でもワンクリックで適用出来るっていうメリットが大きいのでいいのです。</p>
<p>ところで、ずっと Chrome で動作確認していて、使いながらバグを取ってそろそろいいかな、と思ったので公開に踏み切ったわけですが、最後に Firefox で確認してみるとこれが予想以上にぼろぼろでした。<br />
position: fixed の挙動に関して、そんなに違いがあるんでしょうかね？</p>
<p>SERPs の DOM の入れ子の状態が、見た目から予測される入れ子と大きく違っていたせいで、色々と position をいじり倒しているせいかもしれません。<br />
なので、Firefox の方はごめんなさい。上手く動いてません。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20110722/googlefloatingform-110-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>はてブエントリーページを旧仕様っぽくする Greasemonkey</title>
		<link>http://www.otchy.net/20110608/hatebu-downgrader-101-had-released/</link>
		<comments>http://www.otchy.net/20110608/hatebu-downgrader-101-had-released/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 02:01:00 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[はてブ]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1337</guid>
		<description><![CDATA[はてブエントリーページを旧仕様っぽくする Greasemonkey である、はてブエントリーページ旧仕様化 を公開しました。
リリース直後から、様々な非難を受けていた現仕様のはてブエントリーページですが、あれほどの反応に [...]]]></description>
			<content:encoded><![CDATA[<p>はてブエントリーページを旧仕様っぽくする Greasemonkey である、<a href="/greasemonkey/hatebu-entry-page-downgrader/"">はてブエントリーページ旧仕様化</a> を公開しました。</p>
<p>リリース直後から、様々な非難を受けていた現仕様のはてブエントリーページですが、あれほどの反応にもかかわらず、リリースから 2 ヶ月経っても、旧仕様を選べるようにするなどの対応は取られていないようです。</p>
<p>個人的な感想で言うと、旧仕様の時もスターの数を頼りに流し読みする事もあったし、完全否定という立場ではないのですが、はてブの伸びを表すグラフとか良く見てたので、それが見れないのと、やはり多くの指摘にあるように、時系列でブコメを追いたい時にいちいち違うページを開くのが面倒という思いがありました。</p>
<p>そして 2 ヶ月。1 クリックごとのフラストレーションが、徐々に溜まり続けました。</p>
<p>2 ヶ月経ってもはてなからは特に動きが無いので、これはもう「こっち (運営) でやる気はないから、どうにかしたいならそっち (ユーザ) で何とかしな！」というはてなからの挑戦だと受け取り、上記のスクリプトを書きました。</p>
<p>単に、「すべてのブックマークを見る」にリダイレクトするのではなく、現状のエントリーページの中に、全てのブックマークをスムーズに統合して、出来る限り (記憶にある限り) 旧仕様に近づけているのが特徴です。<br />
「人気のブックマークコメント」情報はあっても良いかと思ったので、項目自体は残しつつ、不要な時は閉じられるように配慮しています。</p>
<p>当初、もう少し簡単に出来るかなと思っていた部分が、案外難しく、はてブ側のスクリプトの中にまで手を入れて実現している機能とかがあります。<br />
はてなで作って使っている JavaScript のライブラリに妙に詳しくなったりしつつ、試行錯誤を繰り返し、ようやく公開出来るレベルにまでなりました。</p>
<p>現仕様のエントリーページに苦々しい思いを持っている方は、是非おためし下さい。</p>
<h4>はてなの方へ</h4>
<p>上で色々と生意気な事を書きましたが、公式に対応して旧仕様を選べるようにしてもらえるのがベストに決まっています。<br />
公式に対応されればこちらでもアナウンスして、公式機能の利用を促すようにするので、サーバに負荷をかける部分もあって恐縮ですが、公式対応までの間はお目こぼし頂けるととても嬉しいです。</p>
<h4>参考にしたページなど</h4>
<p><a href="http://hatena.g.hatena.ne.jp/hatenabookmark/20110405" target="_blank">2011-04-05 &#8211; はてなブックマーク日記 &#8211; 機能変更、お知らせなど</a><br />
<a href="http://d.hatena.ne.jp/kikinight/20110407/1302178479" target="_blank">はてなブックマークのエントリーページ改良が何を狙っているのか &#8211; 没個性テーマパーク</a><br />
<a href="http://blog.livedoor.jp/manamerit/archives/65471905.html" target="_blank">はてブのエントリーページ“改良”に疑問の声 &#8211; さまざまなめりっと</a><br />
<a href="http://d.hatena.ne.jp/y-kawaz/20110405/1301981589" target="_blank">はてなブックマークのUIが大幅リニューアル(個人的に改悪)な件 &#8211; y-kawazの日記</a><br />
<a href="http://d.hatena.ne.jp/Lhankor_Mhy/20110405/1301998010" target="_blank">新しいはてブが不評と聞いたので、全てのブックマークを見るグリモンスクリプトを作ったよ！（使えるかもしれないものが出来たので追記あり） &#8211; 不動産屋のラノベ読み</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20110608/hatebu-downgrader-101-had-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Greasemonkey で 超お手軽に jQuery を使うスニペット [Chrome 対応版]</title>
		<link>http://www.otchy.net/20110607/use-jquery-on-greasemonkey-for-chrome/</link>
		<comments>http://www.otchy.net/20110607/use-jquery-on-greasemonkey-for-chrome/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 21:40:39 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1328</guid>
		<description><![CDATA[旧版である、Greasemonkey で 超お手軽に jQuery を使うスニペット は Firefox で使用する分には問題ないのですが、Chrome ではセキュリティ上の都合か、Greasemoneky 上における  [...]]]></description>
			<content:encoded><![CDATA[<p>旧版である、<a href="/20091104/use-jquery-on-greasemonkey/">Greasemonkey で 超お手軽に jQuery を使うスニペット</a> は Firefox で使用する分には問題ないのですが、Chrome ではセキュリティ上の都合か、Greasemoneky 上における unsafeWindow が unsafe では無いようで (？) unsafeWindow.jQuery などに Greasemoneky からアクセスすることが出来ません。</p>
<p>そこで、Chrome 対応版のスニペットを用意しました。<br />
ただ、いわば Chrome のセキュリティを回避した書き方になるため、旧版にあった、「該当ページですでに jQuery が読み込まれていればそれを利用」という特徴が失われてしまっています。<br />
逆に言えば、常に自分で指定したバージョンを利用できるので、jQuery の新しい機能を使ったスクリプトを書く場合などは、こちらのほうが優れています。</p>
<h4>スクリプト</h4>
<pre>
(function (d, func) {
    var h = d.getElementsByTagName('head')[0];
    var s1 = d.createElement("script");
    s1.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js");
    s1.addEventListener('load', function() {
        var s2 = d.createElement("script");
        s2.textContent = "jQuery.noConflict();(" + func.toString() + ")(jQuery);";
        h.appendChild(s2);
    }, false);
    h.appendChild(s1);
})(document, function($) {
    // ここにメインの処理を書く
    $('#button').click(function(){
        alert('clicked!');
    });
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20110607/use-jquery-on-greasemonkey-for-chrome/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[α版]はてブエントリーページを旧仕様っぽくする Greasemonkey</title>
		<link>http://www.otchy.net/20110601/hatebu-downgrader-001/</link>
		<comments>http://www.otchy.net/20110601/hatebu-downgrader-001/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 05:40:20 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[はてブ]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1316</guid>
		<description><![CDATA[はてブのエントリーページを旧仕様っぽくする Greasemonkey 書きました。
まだ超α版なので、user.js ファイルでは置きません。
Chrome でしか確認してないです。まあ Firefox でも動くんじゃな [...]]]></description>
			<content:encoded><![CDATA[<p>はてブのエントリーページを旧仕様っぽくする Greasemonkey 書きました。<br />
まだ超α版なので、user.js ファイルでは置きません。<br />
Chrome でしか確認してないです。まあ Firefox でも動くんじゃないかな？たぶん。</p>
<pre>
// ==UserScript==
// @name         Hatebu Entry Page Downgrader
// @namespace    http://www.otchy.net/
// @version      0.0.1
// @include      http://b.hatena.ne.jp/entry*
// ==/UserScript==

(function (callback) {
    var script = document.createElement(&quot;script&quot;);
    script.setAttribute(&quot;src&quot;, &quot;http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js&quot;);
    script.addEventListener('load', function() {
        var script = document.createElement(&quot;script&quot;);
        script.textContent = &quot;(&quot; + callback.toString() + &quot;)();&quot;;
        document.body.appendChild(script);
    }, false);
    document.body.appendChild(script);
})(function() {
    var isMore = (location.href.indexOf('mode=more') &gt;= 0);
    if (!isMore) {
        var iframe = $('&lt;iframe /&gt;');
        iframe.hide();
        $(document.body).append(iframe);
        var href = $('#more-link a').attr('href');
        iframe.attr('src', href);
    } else {
        var pBody = $(parent.document.body);
        var iBody = $(document.body);
        var bk = iBody.find('#new-bookmarks');
        pBody.find('#new-bookmarks').html(bk.html());
        pBody.find('ul.bookmark-list li').css({'padding': '5px 0px 5px 30px'}).find('img.profile-image').css({'width': '16px', 'height': '16px', 'margin-left': '-20px'});
        var scored = pBody.find('#scored-bookmarks');
        var sToggle = $('&lt;span /&gt;').toggle(function() {
            scored.find('.bookmark-list').hide();
            $(this).text('[開く]');
        }, function() {
            scored.find('.bookmark-list').show();
            $(this).text('[閉じる]');
        });
        scored.find('h4.entry-page-main-subtitle .inner').append(sToggle);
        sToggle.css({'cursor': 'pointer'}).click();
    }
});
</pre>
<h4>出来る事</h4>
<ul>
<li>エントリーページの「新着」ブックマークを「全ての」ブックマークに差し替え</li>
<li>ユーザのアイコンを 16 x 16 に変更</li>
<li>人気のブックマークの表示/非表示切り替え</li>
</ul>
<h4>出来ない事</h4>
<ul>
<li>コメントのみ表示チェックが効かない</li>
<li>スターが付けられない</li>
<li>グラフが見れない</li>
</ul>
<p>現状は、全てのブックマークを表示するページから HTML を親ページに流し込んでる実装です。<br />
この実装だと、上記の問題解決はかなり難しそうです。<br />
なので、全てのブックマークページをそのまま iframe で埋め込む方法に実装を変更する予定なのですが、とりあえず情報参照だけなら綺麗に動いたのでアルファ版として公開してみました。</p>
<p>フィードバック、改造報告などがあれば是非コメントに！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20110601/hatebu-downgrader-001/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleFloatingForm 修正版を公開</title>
		<link>http://www.otchy.net/20101117/googlefloatingform-had-released/</link>
		<comments>http://www.otchy.net/20101117/googlefloatingform-had-released/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 16:48:53 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1227</guid>
		<description><![CDATA[むかーし作って、ずっと放置したままになっていた、Greasemonkey ユーザスクリプトの、GoogleFloatingForm を今の Google にあわせて修正したものを公開しました。
→GoogleFloati [...]]]></description>
			<content:encoded><![CDATA[<p>むかーし作って、ずっと放置したままになっていた、Greasemonkey ユーザスクリプトの、GoogleFloatingForm を今の Google にあわせて修正したものを公開しました。<br />
→<a href="/greasemonkey/googlefloatingform/">GoogleFloatingForm</a></p>
<p>なぜ突然そんな事をする気になったかというと、<a href="http://miniature-g.blog.so-net.ne.jp/2010-05-07" target="_blank">GoogleFloatingForm改造と、検索結果CSS変更 [javascript][greasemonkey]：みにちゅあがーでん</a> とか、<a href="http://memorialbox.blog58.fc2.com/blog-entry-34.html" target="_blank">-MB-  Google仕様変更</a> とか、Google の仕様が変わっても、旧版の GoogleFloatingForm を改造しながら使い続けて下さっている方がいると分かったからです。<br />
2ch のスレッドでも時々話題になっているようでした。</p>
<p>自分の作ったスクリプトが、こうして人の手に渡って修正されながらも使い続けられていくって、嬉しいもんですね。</p>
<p>今回、修正といっても今のブラウザの仕様にあわせてほとんどを書き換えた感じです。<br />
今は、querySelector が使えるので、xpath とか使う必要が無くなりましたし、スタイルをちょっといじってフォームが浮いている事が分かりやすい感じにしました。</p>
<p>また、色々と改造して使ってくれる人がいる事も分かったので、スクリプト自体改造されやすさを意識して書いています。</p>
<p>そんなわけで、新生 <a href="/greasemonkey/googlefloatingform/">GoogleFloatingForm</a> をよろしくお願いします。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20101117/googlefloatingform-had-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tumblr の引用元を一発で開く方法</title>
		<link>http://www.otchy.net/20100928/auto-redirect-from-tumblr/</link>
		<comments>http://www.otchy.net/20100928/auto-redirect-from-tumblr/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 04:50:35 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[bookmarklet]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[tumblr]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1167</guid>
		<description><![CDATA[明示的に開くならブックマークレットで。Redirect Tumblr

javascript:(function(e){if(!e)return;location.href=e.href;})(document.quer [...]]]></description>
			<content:encoded><![CDATA[<p>明示的に開くならブックマークレットで。<a href="javascript:(function(e){if(!e)return;location.href=e.href;})(document.querySelector&#038;&#038;document.querySelector('.source%20a'));">Redirect Tumblr</a></p>
<pre>
javascript:(function(e){if(!e)return;location.href=e.href;})(document.querySelector&#038;&#038;document.querySelector('.source%20a'));
</pre>
<p>自動的に開くなら <a href="/gm/auto_redirect_from_tumblr.user.js">GreaseMonkey</a> で。</p>
<pre>
// ==UserScript==
// @name           Auto redirect from Tumblr
// @namespace      http://www.otchy.net/
// @include        http://*.tumblr.com/post/*
// ==/UserScript==
(function(e){
	if (!e) return;
	location.href = e.href;
})(document.querySelector &#038;&#038; document.querySelector('.source a'));
</pre>
<p>まあ、引用元のリンクが見えているのであんまり需要はないですかね？<br />
引用元のリンクのテキストや位置が常に変わるので、探すのが面倒という場合などにどうぞ。</p>
<p>サポートブラウザ：document.querySelector を実装しているブラウザ (IE 以外 らしい)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20100928/auto-redirect-from-tumblr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chrome 正式版 Greasemonkey でクロスドメイン POST をする方法</title>
		<link>http://www.otchy.net/20100129/chrome-greasemonkey-cross-domain-post/</link>
		<comments>http://www.otchy.net/20100129/chrome-greasemonkey-cross-domain-post/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 05:22:05 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[はてブ]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=974</guid>
		<description><![CDATA[最近公開された、Google Chrome の Ver 4 では、正式に Greasemonkey がサポートされ、以前のように特別なオプションを指定することなく、ワンクリックでユーザスクリプトがインストール出来るように [...]]]></description>
			<content:encoded><![CDATA[<p>最近公開された、Google Chrome の Ver 4 では、正式に Greasemonkey がサポートされ、以前のように特別なオプションを指定することなく、ワンクリックでユーザスクリプトがインストール出来るようになりました。<br />
それ自体は非常に嬉しい事だったんですが、バージョンアップに伴い、<a href="/greasemonkey/hatebu-with-twitter/">はてブ with Twitter</a> が動かなくなってしまっていました。(現在は修正済み)</p>
<p>以前、<a href="/20090923/send-post-method-to-cross-domain-only-use-javascript/">JavaScript だけでクロスドメインで POST メソッドを送る方法</a>で紹介したやり方が、Chrome のバージョンアップによって無効になってしまったためです。<br />
無効になったとはいえ、通常の JavaScript として使用する分には問題なく、Greasemonkey だけに問題が発生していました。<br />
動的に生成した iframe の contentWidow オブジェクトが取得出来なくなっており、セキュリティの制限が強化されたものと思われます。</p>
<p>最終的にはその制限を回避する方法を見つけたので、以下に解説します。</p>
<h4>通常 JavaScript の記述</h4>
<p>まず、Greasemonkey ではなく普通の JavaScript として<a href="/20090923/send-post-method-to-cross-domain-only-use-javascript/">JavaScript だけでクロスドメインで POST メソッドを送る方法</a>等を参考に、本来やりたい処理を記述します。<br />
この時は普通に script タグでスクリプトを読み込んで、正常動作を確認しておきます。</p>
<p>そして、正常に動作するスクリプトが作成出来たら、それを任意のサーバにアップします。</p>
<h4>Greasemonkey の記述</h4>
<p>以下のようなスクリプトを書きます。</p>
<pre>
(function() {
    var d = document;
    var s = d.createElement('script');
    s.src = 'http://www ...'; // スクリプトファイルをアップした場所
    d.body.appendChild(s);
})();
</pre>
<p>これだけで、本来の window オブジェクトから実行したかった処理が実行され、Greasemonkey の制限に掛かることなく、iframe を使用したクロスドメイン POST が実現します。</p>
<h4>でもちょっと待って</h4>
<p>Greasemonkey が実行されるたびに、自分のサーバから js ファイルがダウンロードされるなんて嫌ですよね？私は嫌です。レスポンスを考えたって好ましくないですし。</p>
<p>そこで、data スキームを使って外部スクリプト自体を Greasemonkey スクリプトの中に埋め込んでしまう事にします。(data スキームについては<a href="http://www.google.com/search?q=javascript+data+%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%A0&#038;btnG=%E6%A4%9C%E7%B4%A2" target="_blank">この辺</a>を参照して下さい。)</p>
<p>data スキームへの変換には、<a href="http://www.kawa.net/works/js/data-scheme/base64.html" target="_blank">[JavaScript] dataスキームURI生成（画像データのBase64変換）</a>を使用させていただきました。<br />
このサイトで、先ほどアップした js ファイルの URL を指定し、data スキームに変換した文字列を取得します。</p>
<p>その上で、Greasemonkey を以下のように書き換えます。</p>
<pre>
(function() {
    var data = 'data:application/x-javascript;base64,'+
        'KGZ1bmN0aW9uKCkgewoJdmFyIGQgPSBkb2N1bWVudDsKCWZ1bmN0aW9uIGdldEVsZW1lbnQoeHBh'+
        // 中略
        'fSkoKTs=';
        var d = document;
    var s = d.createElement('script');
    s.src = data;
    d.body.appendChild(s);
})();
</pre>
<p>これで、単体の Greasemonkey スクリプトでありながら、外部スクリプトを読み込んだのと同等の状況を作り出す事が出来ます。</p>
<p>これでスッキリしましたね！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20100129/chrome-greasemonkey-cross-domain-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Greasemonkey で 超お手軽に jQuery を使うスニペット</title>
		<link>http://www.otchy.net/20091104/use-jquery-on-greasemonkey/</link>
		<comments>http://www.otchy.net/20091104/use-jquery-on-greasemonkey/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 08:27:54 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=836</guid>
		<description><![CDATA[
【2011-06-07 追記】
下記の手法は Chrome の Greasemoneky では無効なため、Firefox / Chrome 両対応としたい場合は
Greasemonkey で 超お手軽に jQuery  [...]]]></description>
			<content:encoded><![CDATA[<div style="margin:0 5px; padding: 5px; border: solid 1px #f00">
【2011-06-07 追記】<br />
下記の手法は Chrome の Greasemoneky では無効なため、Firefox / Chrome 両対応としたい場合は<br />
<a href="/20110607/use-jquery-on-greasemonkey-for-chrome/">Greasemonkey で 超お手軽に jQuery を使うスニペット [Chrome 対応版]</a> を参照してください。
</div>
<p>タイトルの通りです。</p>
<h4>特徴</h4>
<ul>
<li>script タグ追加型の読み込み</li>
<li>$ 関数として利用可能</li>
<li>該当ページですでに jQuery が読み込まれていればそれを利用</li>
<li>jQuery スクリプト自体のアップは不要 (Gogole の CDN を利用)</li>
<li>ローカルのキャッシュも多分有効 (CDN が適切なヘッダを返してれば)</li>
<li>jQuery 読み込み完了を待ってから実行される</li>
</ul>
<h4>作成動機</h4>
<p>Greasemonkey で jQuery を使う方法検索してみると、GM_xmlhttpRequest で読み込んで eval する方法と、script タグを追加する方法に大別されます。<br />
前者の方がスマートなやり方ではあるのですが、スニペットとして貼り付けるにはいかんせんコードが長くなりがちなのと、jQuery が導入される名前空間の違いからか、jQuery がフル機能で利用出来ないといった制限があるようです。<br />
そこで後者を選択しようと思ったのですが、検索で上位に来るスクリプトはいまいち洗練されていなくて、二重読み込みなどの問題が解決されていなかったりします。</p>
<p>で、自分で書く事にしました。<br />
特に任意のサイトで動作させるスクリプトを書くような場合、元々のページに jQuery が導入済みでもそれに干渉しない、というのがウリでしょうか。</p>
<h4>スクリプト</h4>
<pre>
(function(d, func) {
    var check = function() {
        if (typeof unsafeWindow.jQuery == 'undefined') return false;
        func(unsafeWindow.jQuery); return true;
    }
    if (check()) return;
    var s = d.createElement('script');
    s.type = 'text/javascript';
    s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js';
    d.getElementsByTagName('head')[0].appendChild(s);
    (function() {
        if (check()) return;
        setTimeout(arguments.callee, 100);
    })();
})(document, function($) {
    // ここにメインの処理を書く
    $('#button').click(function(){
        alert('clicked!');
    });
});
</pre>
<p>重たい処理は必要ないぞ、っていう場合はこちらも参考にどうぞ。<br />
<a href="/20090120/first-five-lines-of-greasemonkey/">Greasemonkey スクリプトの冒頭に書く 5 行</a></p>
<blockquote><p>
Greasemonkey を書く時に頻繁に利用する関数をまとめたので、公開してみます。<br />
外部の JavaScript ライブラリを読み込む方法を解説したサイトもありますが、そこまで大げさな機能が必要でもなく、軽く動作させたいときに便利です。<br />
特に共通ライブラリを利用すると、Firefox 以外のブラウザの対応も無駄に読み込む事になるので、スマートじゃないなぁと思います。
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20091104/use-jquery-on-greasemonkey/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

