現在の位置

トップページ > userChrome.js


これは何? 編集

JavaScriptを通して、Firefoxのインターフェイスを簡単に改造するための拡張です。

操作周りに関する単機能の拡張は、かなりの部分この拡張でまかなえてしまうが、あえてスクリプトに置き換える必要はない。

開発元(MozillaZine フォーラム)

使い方 編集

インストール 編集

  1. 拡張機能userChrome.jsを本体および開発元からインストール。
  2. Firefoxを再起動。
  3. プロファイルフォルダの中のchromeフォルダにuserChrome.jsというファイルができる。
  4. 複数のスクリプトを起動できるように, 次節関連サイトに挙げているサブスクリプトローダのいずれかを,サブスクリプトローダからダウンロードしプロファイルフォルダの中のchromeフォルダ内にuserChrome.jsという名前で上書きする。
  5. 必要に応じて, windowhook.uc.jsもWindowHook(メインウインドウ以外に読む込むときに併用)からダウンロードし,プロファイルフォルダの中のchromeフォルダ内に保存する。ファイル名を000-windowhook.uc.jsのように変更し, できるだけ最初に実行されるようにする。
  6. 種々のスクリプトをダウンロードし,プロファイルフォルダの中のchromeフォルダ内に保存する。
  7. Firefoxを再起動するとスクリプトを読み込みFxに機能が追加/変更される。

    注)上記ステップの2および3は省略できる。

  • 解説

    拡張機能userChrome.jsはプロファイルフォルダの中のchromeフォルダにuserChrome.jsという名前の JavaScriptファイルを置くと、それを起動時に読み込んでFirefoxの操作周りを変更します。

    次節関連サイトに挙げているサブスクリプトローダをuserChrome.jsというファイル名でプロファイルフォルダの中のchromeフォルダに置くことで、同フォルダ内の *.uc.jsファイル(example.uc.jsといったように)や *.uc.xulファイル(または*.xulファイル)を自動で全て読み込むようになります。

使用する上での留意点 編集

セキュリテイ 編集

userChrome.js用スクリプトは, 拡張機能と同じchrome権限(Firefox本体の機能を変更することのできる権限) を持って実行される。 悪意のあるスクリプトをインストールすると, PCのファイルやパスワードを含む個人情報が危険にさらされるということである。(悪意が無くても, バグや潜在的なセキュリテイホールがある場合もある)

現状(H19.9現在)では上記セキュリテイ問題を回避できる手段はない。インストールしないことが唯一の回避手段である。

userChrome.js用スクリプトは, 信頼できる配布元から入手し, そのスクリプトがどのような動作をするものか理解した上で利用する必要がある。

userChrome.js用スクリプトは, 可能ならソースコードを読み, 外部WebサイトやPCのファイルI/Oへのアクセスの有無を確認してから利用する必要がある。

運用・管理 編集

userChrome.js用スクリプトには, 拡張機能のようにスクリプトの自動更新機能や, Firefox本体のバージョンとの互換性チェック機能などはない。

userChrome.js用スクリプトのインストール, その後の運用は全てユーザ自身が管理する必要がある。

不具合が生じた場合は, どのスクリプトに問題があるのか自分で切り分けられる程度の技能が必要である。

不具合はスクリプトの作者が対応しない限り, 自己で解決する必要がある。

その他 編集

スクリプトの内容をある程度理解し, 自分でスクリプトを書くことができるようになると, あなたのFirefoxの世界が広がることでしょう。

Firefox本体や拡張機能NoScript(類似拡張含む)の設定 編集

* UCJS Loaderと拡張機能NoScript(類似拡張含む)を併用している場合は file:// のJavaScriptを許可する必要がある。

スクリプトの文字コード 編集

* 関連する全てのファイルは, 日本語を含む場合はUTF-8(文字コードがUTF-8でBOMなし)で保存する必要がある。

スクリプトの形式(Greasemonky様メタデータの形式) 編集

userChrome.jsバージョン0.8用サブスクリプトローダ対応のスクリプトは,Greasemonky様メタデータを読み込み, そのスクリプトを適用すべきchromeウインドウを判断するようになっている。

Greasemonky様メタデータの形式は,以下の通りである。

※※.uc.js 編集

オプションウインドウに適用するスクリプトの例を以下に示す。 Code:

// ==UserScript==
// @name           Test
// @namespace      http://pile0nades.wordpress.com/
// @description    Test script, pops an alert in the Options window.
// @include        chrome://browser/content/preferences/preferences.xul
// ==/UserScript==
alert("Hello from the Firefox Options!");
※※.uc.xul 編集

メインウインドウに適用するスクリプトの例を以下に示す。

<?xml version="1.0"?>
<!DOCTYPE overlay>
<!--
// ==UserScript==
// @name           Test XUL
// @namespace      http://pile0nades.wordpress.com/
// @description    Test.
// @include        main
// ==/UserScript==
 -->
<script type="application/x-javascript" xmlns="http://www.w3.org/1999/xhtml"><![CDATA[
alert("Hello from the Firefox!");
 ]]></script>
</overlay>

ここに ,"main"はメインブラウザウインドウの省略形

エラーコンソールへのエラーを表示させる方法 編集

XULやスクリプトのエラーを表示させるには, 以下の通りpreferenceを設定しておく。

user_pref("javascript.options.strict", true);
user_pref("javascript.options.showInConsole", true);

関連サイト 編集

本体および開発元 編集

サブスクリプトローダ 編集

userChrome.jsバージョン0.8用 編集

以下に示すものは何れもuc.js, uc.xulおよびGMのメタデータ仕様に対応している。

スクリプトを作成・配布しているサイト 編集

MozillaZine内userChrome.js スレ 編集

chocolateorange 編集

こんなに月も紅いのに 編集

SCRAPBLOG (xuldev.org) 編集

Days on the Moon 編集

r-Studio 編集

鳥獣保護区 編集

zoolcar9.lhukie.net 編集

かなりいっぱいある、作成中。

朝顔日記 編集

もか日記 編集

alice0775のファイル置き場 別館 編集

Code-404 編集

iMona@zuzu開発者日記 編集

  • refererChanger.uc.js
    • RefControl代替用リファラ偽装スクリプトのFake Referer、fakeReferer modの拡張版
  • ExtraConfigMenu.uc.xul
    • userScript,Chrome,Contentなどを編集する時に便利なメニューを追加

Griever 編集

  • keyconfig_Modoki.uc.js
    • keyconfig代替用スクリプト(各種入力欄等のページ表示領域以外の箇所にフォーカスが移っている状態では効かないので注意)
  • KeyChanger.uc.js
    • keyconfig_Modoki.uc.jsの後継版
      特徴
      メニューバー>ツール>Reload KeyChanger scriptからキー設定の再読み込みが可能。
      各種入力欄にフォーカスが移っている状態でも設定したキーの入力が可能。
      備考
      _keychanger.jsの文字コードはUTF-8に設定する。
      FireGesturesや軽量マウスジェスチャ等で利用可能なスクリプトを配布サイトのサンプルの大半と同様に記述する場合、コード内に改行がある場合は改行を消して一行化し、ダブルクォーテーション(")を使用している場合は、コード内のダブルクォーテーション(")をシングルクォーテーション(')に置き換えて記述する。
      コード内の改行を消さずに利用したい場合や、コード内にバックスラッシュ(\)を使用している場合は、コードを「"」と「";」の代わりに「function(){」と「};」で囲んで記述する。
      入力欄ではFirefox標準の編集用のキー設定が優先されるので、キー設定が重複する場合は別のキーに設定にする等して対処すると良い。

gxueの日記 編集

Cherenkovの暗中模索にっき 編集

2chで投稿されたスクリプトなど 編集

userContent.js 編集

Greasemonkey互換。

  • userContent.jsは, GM用スクリプトのほとんどが動作すると思う, ツールメニューによりスクリプトのOn/Offの制御が可能。
  • セキュリティ面から,それぞれのスクリプトは,スクリプト毎に用意されたXPCNativeWrapperでラップされた名前空間で実行するようになっている。そのため,GMの一部のスクリプト(ドキュメント内スクリプトを参照するような)は動作しないようになっています。
userMenu.js 編集

Javascript Actions拡張版。

  • userMenu.js, サブメニューのネスト, タブメニューやメインメニューなど, より拡張されている。
  • Ver0.9以降新機能にタブ毎にセキュリティ・ポリシーを設定できるタブコンテキストメニューが追加された。
  • JSAに比べセキュリティが強化されているため一部のスクリプトは修正が必要。
  • Tips(userContent.js ver. 1.0,userMenu.js ver. 0.9)

    セキュリテイからGM用スクリプトが動作できない場合, 以下の修正を行うことで動作するようになります。(ver1.0) 元のGM用スクリプトに以下に示す最初3行と最後1行を追加する。

    var namespace = new unsafeWindow.Function();
    namespace.prototype = this;
    eval((function(){ (function(){
    ......元のGM用スクリプト本体
    })(); }).toSource() + '();',new namespace());
  • Tips(userContent.js ver. 1.11,userMenu.js ver. 1.0)
  1. jsaのようにComponentsを使えるようにするには
    var global = new chromeWindow.Object();
    global.window = unsafeWindow;
    global.document = unsafeDocument;
    global._jsaCScript = _jsaCScript;
    eval('(' + function(){
    最後に↓を追加.
    }.toSource() + ')();',global);
    または
    var namespace = new unsafeWindow.Function();
    namespace.prototype = this;
    eval((function(){ (function(){
......元のJSA用スクリプト本体
})(); }).toSource() + '();',new namespace());
  1. JsActions.scriptFolderPathは,_jsaCScript.currentScriptPath.replace(/[^/\\]+$/,'')で代用
  2. windowオブジェクトをなるべく保持するようになった
    1.11ではwindowオブジェクトをなるべく保持するようになっているので,AutoPagerizeの場合, 同スクリプト内の
    if (typeof(window.AutoPagerize) == 'undefined') {
    window.AutoPagerize = {}
    window.AutoPagerize.addFilter = function(f) {
    AutoPager.filters.push(f)
    }
    window.AutoPagerize.addDocumentFilter = function(f) {
    AutoPager.documentFilters.push(f)
    }
    }
    //if (typeof(window.AutoPagerize) == 'undefined') {
    window.AutoPagerize = {}
    window.AutoPagerize.addFilter = function(f) {
    AutoPager.filters.push(f)
    }
    window.AutoPagerize.addDocumentFilter = function(f) {
    AutoPager.documentFilters.push(f)
    }
    //}
    としないと, filterが機能しないようです。これは,元のAutoPagerizeのバグと思われる。
  3. windowオブジェクト下のonloadを初めとする「on~」と言う一連のイベント用のコールバックは使えないので,unsafeWindowを使う必要があります.これはGMでも同様. window.addEventListenerは動作しますが,ver. 1.1でスクリプトの起動タイミングが遅くなったため,loadイベントの後にスクリプトが起動され,イベントを捕らえられない事があります.
  4. Exception... "'Permission denied to get property Function.__parent__' when calling method:.....
    非特権コードから特権コードを呼び出そうとして失敗したんじゃないかと. メタデータに「@privilege false」(ver1.2ではバグのためtrueとする)を追加するか,userContent.pl.jsの「USE_GM」を「2」にすれば動くと思います.
  5. ReferenceError : ※ is not defined
    極一部を除くchromeWindow下のプロパティやメソッドを,chromeWindowを省略して呼び出せなくなりました.
  6. GM_Modoki.jsl:GM_xmlhttpRequestのイベントハンドラでの例外が発生する場合, 同メソッドの該当箇所を下記のようにする。
    setTimeout(function(){
    if(typeof obj.data == 'string') req.send(obj.data);
    else req.send(null);
    }, 500);
    ※ver1.2では上記対策済み。
  7. malformed URI sequenceエラー UTF-8 でないファイルをUTF-8として扱おうとして出るエラーです. pl.jsファイル中の, USE_UTF8が「2」なら,全てのファイルをUTF-8で保存するか「1」に変更する. USE_UTF8が「1」なら,該当ファイルに適当な日本語の注釈文でも入れて自動判別が成功するようにする. USE_GMが「2」なら,*.user.jsを全てUTF-8で保存する.
adblock#.uc.js 編集

軽量版Adblock

  • adblock#.uc.js
  • 使い方
    adblock#.uc.jsのfilterの有効範囲内に
    filter: [
    'mozilla.com/img/',
    'mozilla.jp/img/'
    ], 
    等として記述する。
    詳しくはreadmeやadblock#.uc.jsのコメントを参照。
関連スレッド 編集