From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../using_the_stylesheet_service/index.html | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 files/ja/archive/add-ons/using_the_stylesheet_service/index.html (limited to 'files/ja/archive/add-ons/using_the_stylesheet_service/index.html') diff --git a/files/ja/archive/add-ons/using_the_stylesheet_service/index.html b/files/ja/archive/add-ons/using_the_stylesheet_service/index.html new file mode 100644 index 0000000000..9a3f80adcf --- /dev/null +++ b/files/ja/archive/add-ons/using_the_stylesheet_service/index.html @@ -0,0 +1,65 @@ +--- +title: Using the Stylesheet Service +slug: Archive/Add-ons/Using_the_Stylesheet_Service +tags: + - Add-ons + - Extensions +translation_of: Archive/Add-ons/Using_the_Stylesheet_Service +--- +

+

+

はじめに

+

Firefox 1.5 では、userContent.css ファイルや userChrome.css ファイルを使うことなくユーザスタイルシートや UA スタイルシートを 拡張機能 で扱えるようにする API が追加されました。この API は nsIStyleSheetService.idl で定義されています。 +

そのようなスタイルシートの追加や除去はページが次にロードされるときに効果を現します。登録されたスタイルシートは再起動時には登録が解除されます。 +

このサービスを使用して追加されたスタイルシートは、chrome 文書にも content 文書にも適用されます。XUL 文書にスタイルシートを適用したい場合は、正しい名前空間を宣言するのを忘れないでください。 +

この文書での例はすべて XPCOM を使った JavaScript で示します。 +

+

API の使用

+

以下の例の "chrome://myext/content/myext.css" という文字列はただの例です。それをロードしたい CSS ファイルの URL に置換してください。 +

USER_SHEETAGENT_SHEET に置き換えることもできます。これは CSS カスケードにおいてシートをどこに配置したいかによります。詳しくは CSS の仕様 をご覧ください。 +

+

スタイルシートの追加

+

スタイルシートサービスを使用するには、サービスへの参照を取得し、URI を作成し、その URI をスタイルシートサービスの loadAndRegisterSheet メソッドに渡してください。 +

+
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
+                    .getService(Components.interfaces.nsIStyleSheetService);
+var ios = Components.classes["@mozilla.org/network/io-service;1"]
+                    .getService(Components.interfaces.nsIIOService);
+var uri = ios.newURI("chrome://myext/content/myext.css", null, null);
+sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
+
+
注意:loadAndRegisterSheet は同期してスタイルシートをロードするため、ローカル URI を使ったこのメソッドしか呼び出すべきではありません。
+

シートがロードされたかどうかの判定

+

拡張機能を作成し、onload ハンドラ内でスタイルシートを追加する場合は、シートがすでに追加されているかどうかを確かめるべきです。それを確かめないと、ウィンドウがロードされるたびにシートを追加してしまうことになります。 +

+
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
+                    .getService(Components.interfaces.nsIStyleSheetService);
+var ios = Components.classes["@mozilla.org/network/io-service;1"]
+                    .getService(Components.interfaces.nsIIOService);
+var uri = ios.newURI("chrome://myext/content/myext.css", null, null);
+if(!sss.sheetRegistered(uri, sss.USER_SHEET))
+  sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
+
+

以前に登録されたスタイルシートの除去

+

以前に登録したスタイルシートを除去したい場合、単純に unregisterSheet メソッドを使用してください。 +

+
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
+                    .getService(Components.interfaces.nsIStyleSheetService);
+var ios = Components.classes["@mozilla.org/network/io-service;1"]
+                    .getService(Components.interfaces.nsIIOService);
+var u = ios.newURI("chrome://myext/content/myext.css", null, null);
+if(sss.sheetRegistered(u, sss.USER_SHEET))
+  sss.unregisterSheet(u, sss.USER_SHEET);
+
+

後方互換性

+

Firefox 1.0 (Gecko 1.7) 系のブラウザをサポートする必要がある場合、その新しいスタイルシートサービスが利用できるかどうかを確かめる必要があります。Components.classes オブジェクトにそのコントラクト ID があるかどうかを探すことで確かめることができます。たとえば: +

+
if("@mozilla.org/content/style-sheet-service;1" in Components.classes)
+{
+  // 新しいスタイルシート API が利用可能
+}
+else
+{
+  // 利用不可
+}
+
-- cgit v1.2.3-54-g00ecf