技術メモ帳 このページをアンテナに追加 RSSフィード

2006-08-13

[]Greasemonkeyで永続的に外部スクリプトを利用する 10:36 Greasemonkeyで永続的に外部スクリプトを利用するを含むブックマーク Greasemonkeyで永続的に外部スクリプトを利用するのブックマークコメント

GM_setValue / GM_getValue + unsafeWindow.eval を使って

永続的に外部スクリプトを利用する方法を考えてみた。

わざわざ DOM で script要素 を毎回注入するよりも

速いんじゃないかと思う。


Greasemonkeyには、GM_setValue / GM_getValue というのがあって、

GM_setValue("キー", "値")

上記のように入力してあげる事によって、たとえ、

Firefoxを終了させたとしても消えないデータを作成する事が出来る。


そして、それを利用して、

初回のみ XmlHttpRequest で外部スクリプトデータを取得して、

GM_setValue でスクリプトデータを永続化しておき、

二回目以降は、それを GM_getValue して eval するようにした。

以下は、永続的に

prototype.js を使用できるようにする Greasemonkey


permanent_prototype.user.js

// ==UserScript==
// @name          permanent prototype.js loader
// @namespace     null
// @description	  null
// @include       http://*
// ==/UserScript==

// 永続化したものが既に存在していたら、
// それを取得して eval する。
var permanent = GM_getValue("prototype.js");
if( typeof permanent == "undefined" ) {
  // もし存在していなかったときは、
  // XmlHttpRequestで新たに取得。
  GM_xmlhttpRequest({
     method: 'get',
     url: 'http://prototype.conio.net/dist/prototype-1.4.0.js',
     onload: function(details){
       // 取得に成功したとき、永続化する。
       GM_setValue( "prototype.js", details.responseText );

       // ついでに実行しとく。
       unsafeWindow.eval( details.responseText );
     }
   });
} else {
  unsafeWindow.eval( permanent );
}

snaka72snaka72 2008/12/28 12:48 @requireを使わない理由。または、@requireと比較して優位な点はどこにあるんでしょうか?(素直な疑問として)

snaka72snaka72 2008/12/28 13:15 今気づいた。@requireが導入される前の記事だったんですね。スンマセン。

Connection: close