ラベル Greasemonkey の投稿を表示しています。 すべての投稿を表示
ラベル Greasemonkey の投稿を表示しています。 すべての投稿を表示

2010-12-29

GreasemonkeyスクリプトをChromeに対応させる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
図書館サイトを便利にするGreasemonkeyスクリプトである図書ぶらはFirefoxでしか動かなかったのですが、Chromeでも動くようにしてみました。

今回、Chromeで動かすためにやったことは以下のことです。

(1)jQueryの読み込み方法の変更
chromeで動くGresemonkeyスクリプトでjQueryを利用するを見てください。

(2)クロスドメインでXMLHttpRequestを利用できるようにする
Access-Control-Allow-Originをどこで出力すればよいのか迷ってみたを見てください。

(3)GM_*のラッパー関数を作成
図書ぶらでは、以下のGreasemonkeyで拡張されている関数を利用しています。
GM_setValue
GM_getValue
GM_xmlhttpRequest
これはchromeでは使えないので、以下のような関数を作成しました。
GM_setValue、GM_getValueは以下のような感じです。

function GM_setValue(key,value) {
 localStorage[ key ] = value;
}

function GM_getValue(key,def) {
 if( localStorage[ key ] == undefined && def != undefined ){
  GM_setValue( key , def );
 }
 return localStorage[ key ] ;
}
ここでの注意は、localStorageは文字列しか保存してくれない気配です。
GM_*のときはBooleanはBooleanで保存できていたのですが、localStorageではBooleanを文字列に変換していました。

GM_xmlhttpRequestの方は、完全互換でなくてGM_xmlhttpRequest風な以下のものを用意しました。
function GM_xmlhttpRequest(url,onload){
 var xhr=new XMLHttpRequest();
 xhr.open("get",url);
 onload&&(xhr.onload=function(){onload(this)});
 xhr.send();
}

そんなに使っていないので完全に置き換えてもよかったのですが、なんとなくこんなのを用意してみました。

とりあえずこんな感じでchromeでも動くGreasemonkeyスクリプト(chromeの場合はユーザスクリプトと言った方よいのかな)図書ぶらとなりました。

2010-12-27

chromeで動くGresemonkeyスクリプトでjQueryを利用する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
jQueryがステキなのでGreasemonkeyスクリプトでもjQueryを利用しています。

Firefoxだけで動くGreasemonkeyスクリプトでは以下のように書いていました。
(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($) {
    //ここに処理を書く
    alert("There are " + $('a').length + " links on this page.");
});

でもこれではChromeでは動かなかったのです。
理由はよくわかりませんが、
unsafeWindow.jQuery
がずっと
undefined
になっているせいのようです。

Chromeでも動くGreasemonkeyスクリプトでjQueryを利用するには以下のように書くとよい感じです。
function addJQuery(callback) {
  var script = document.createElement("script");
  script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
  script.addEventListener('load', function() {
    var script = document.createElement("script");
    script.textContent = "(" + callback.toString() + ")();";
    document.body.appendChild(script);
  }, false);
  document.body.appendChild(script);
}

function main() {
  //ここに処理を書く
  alert("There are " + $('a').length + " links on this page.");
}

addJQuery(main);

こちらは動きました。もちろんFirefoxでも動きます。
最初のFirefoxでしか動かない版だと、すでにjQueryが読み込まれていればjQueryの読み込み処理を行わないっぽいのでよい感じなのですが、FirefoxでもChromeでも動くというのを重視することにしてみました。


2010-11-07

「図書ぶら」というのを作ってみました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
図書館サイトの検索結果ページに、その本に関連する本のリストとAmazonへのリンクを追加するGreasemonkeyスクリプト「図書ぶら」というのを作ってみました。

私は、図書館をよく利用しています。
探す本がわかっているときはいいのですが、なんとなく本を探したいというときには、図書館サイトはむかないつくりになっています。
amazonさんの場合は本に関連する本を紹介してくれるので、参考にしちゃっています。
なのでそのamazonさんの関連本を図書館サイトの方にも表示させるようにしたら便利かもしれないと思い作ってみたのが「図書ぶら」です。

図書館で本を使う方は使ってみていただけるとうれしいです。

現在は、東京23区だけの対応になっていますがご要望があれば他の図書館にも対応したいと思っています。

ちなみに関連本を表示するためには、
Amazon Product Advertising API
を使っています。
その関連本が、その図書館に存在するかを調べるために
カーリル | 図書館API仕様書
を使っています。
これらのAPIはGoogleAppEngine上に作成したアプリがProxyして要求をかけています。
以下のような感じです。
図書ぶら-->GoogleAppEngine-->Amazon,カーリル

2010-11-06

GreasemonkeyスクリプトでGM_getValueをイベントで使おうとしたら

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Greasemonkeyスクリプトを最近、いじってあそんでいます。
GM_getValueというデータを永続化しておくことができるGreasemonkeyの関数があるのですが、
これをクリックイベントの中で使おうとしたら

Error: Greasemonkey access violation: unsafeWindow cannot call GM_getValue.

とエラーが出てしまいました。

イベントの中で普通にこのように書くとダメなのです。
 var value = "bar";
 GM_setValue("foo", value);

でも、以下のように書くとOKになります。
  var value = "bar";
  setTimeout(function() {
    GM_setValue("foo", value);
  }, 0);
setTimeoutでくくればOKなようです。なぜかはよくわかりません。

ちなみに
http://wiki.greasespot.net/0.7.20080121.0%2B_compatibility
に書いてありました。

2009-04-03

GoogleドキュメントのファイルをPDFで一括ダウンロードする方法

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Googleドキュメント上に作成したファイルをいくつかPDF化して、さらにそれを一つのPDFにして携帯で見れるようにしたいなぁとふと思ってみました。

これを実現するには、
Google Doc Download
というGreasemonkeyスクリプトを利用することで、ダウンロードしたいファイルを選択して、スクリプトを追加することで表示されるようになる「Download Your Documents」の「as PDF files」をクリックするとそれぞれのドキュメントをPDFとしてダウンロードするためのリンク集のページができあがります。

これを一つ一つぽちぽちとダウンロードしてもよいのでしょうが、このページで
DownThemAll!
というFirefoxアドオンを利用すると便利だよ。といわれます。
これを利用すると一括ダウンロードができるようになります。
通常、タイトルがそのままファイル名になるみたいなのですが、日本語タイトルのものはそのままのファイル名になってくれませんでした。

このスクリプトは、
http://www.moongift.jp/2007/07/google_docs_download/
でしりました。

そしてお次はPDFの連結です。
http://homepage3.nifty.com/e-papy/p3.html
で紹介されていた
http://homepage3.nifty.com/e-papy/p3.html
を使ってみました。使い方で悩むことはないと思うシンプルな感じでなかなかよいです。

そして携帯で見るためにはSDカードなりに書き込めばよいのですが、ちゃんと見るためには以下のルールである必要があるようです。
---------
\PRIVATE\DOCOMO\DOCUMENT\PUD001
の下に
PDFDC???.PDF(???は001~999迄の番号)
で書く
---------
参考にさせていただいたのは、
http://raycy2.seesaa.net/article/103618474.html
です。

さぁ、試してみよう!と思ったところできたPDFのサイズが大きくて持っている16Mのカードに入らなかった・・・
あと、携帯で見れるPDFのサイズ上限を調べてみた方がよいかも・・・

2009-02-11

GreasemonkeyのAutoPagerizeにサイトを対応させる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Firefoxを使っているとGreasemonkeyという任意のjavaスクリプトを実行させる環境をアドオンできるわけですが、その上でうごくAutoPagerizeというスクリプトがすごく便利なのです。
これは、次のページがある場合、先に読み込んでくれてページの下の方につなげてくれるもので次のページをがんがん画面をスクロールするだけで見ていけるものなのです。
そんな便利なツールにSOBARCOも対応させてみたいと思ってみたわけです。

本来ならば、SITEINFOというものをどっかに準備するみたいなのですが、記法もよくわからないし、どこに準備すればよいのかもいまいちわからなかったのです。

でも、SITEINFOというものがなくても対応させることができるようです。
その方法は、
http://d.hatena.ne.jp/swdyh/20070701/1183239979
が参考になります。

やるべきことは、以下のたったの二つです。
・次のページのリンク先をわかるようにする
・くっつけるブロックを指定する。
くっつけるブロックを指定したら、
最初のページのブロックのすぐ下に
次のページの先読みしたくっつけるブロックがくっつくことになります。

まず次のページのリンクには、rel="next"という属性をつけてやればよいようです。
具体的には、以下のような感じです。


くっつけるブロックの指定は、
class="autopagerize_page_element"
とつけてやればよいようです。
具体的には、

な感じでよいようです。