diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 21:46:22 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 21:46:22 -0500 |
commit | a065e04d529da1d847b5062a12c46d916408bf32 (patch) | |
tree | fe0f8bcec1ff39a3c499a2708222dcf15224ff70 /files/ja/mozilla/add-ons | |
parent | 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 (diff) | |
download | translated-content-a065e04d529da1d847b5062a12c46d916408bf32.tar.gz translated-content-a065e04d529da1d847b5062a12c46d916408bf32.tar.bz2 translated-content-a065e04d529da1d847b5062a12c46d916408bf32.zip |
update based on https://github.com/mdn/yari/issues/2028
Diffstat (limited to 'files/ja/mozilla/add-ons')
23 files changed, 0 insertions, 2876 deletions
diff --git a/files/ja/mozilla/add-ons/add-on_debugger/index.html b/files/ja/mozilla/add-ons/add-on_debugger/index.html deleted file mode 100644 index e2147f4582..0000000000 --- a/files/ja/mozilla/add-ons/add-on_debugger/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: アドオンデバッガ -slug: Mozilla/Add-ons/Add-on_Debugger -translation_of: 'https://extensionworkshop.com/documentation/develop/debugging/' ---- -<div class="geckoVersionNote"> -<p>The Add-on Debugger is new in Firefox 31.</p> -</div> - -<p>Starting in Firefox 31, the Add-on Debugger lets you run the <a href="/en-US/docs/Tools/Debugger">JavaScript Debugger</a> in the context of an add-on.</p> - -<p>From Firefox 32 onwards you can also use the<a href="/en-US/docs/Tools/Web_Console"> Console</a>, to see logged messages and evaluate JavaScript in the add-on's context, and<a href="/en-US/docs/Tools/Scratchpad"> Scratchpad</a>, to conveniently evaluate multiline JavaScript in the add-on context and save it to a file.</p> - -<p>The Add-on Debugger is only available for <a href="/en-US/Add-ons/Bootstrapped_extensions">restartless</a> and <a href="/en-US/Add-ons/SDK">SDK-based add-ons</a>. It's still experimental: if you find bugs, we'd love it if you <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox&component=Developer%20Tools%3A%20Debugger&blocked=addon-dbg">filed them in Bugzilla</a>.</p> - -<p>For a quick introduction to the Add-on Debugger, see this screencast:</p> - -<p>{{EmbedYouTube("KU3Xsck7qy0")}}</p> - -<h2 id="Opening_the_Add-on_Debugger">Opening the Add-on Debugger</h2> - -<p>To enable the Add-on Debugger you need to check the "Enable chrome and addon debugging" and "Enable remote debugging" settings in Firefox.</p> - -<p>To do this, select "Toggle Tools" from the Web Developer menu in Firefox, open the <a href="/en-US/docs/Tools/Tools_Toolbox#Settings">Developer Tools Settings</a>, and check "Enable chrome and addon debugging" and "Enable remote debugging".</p> - -<p>Now open the Add-on Manager. Next to the entry for your add-on you will see a button labeled "Debug". Click this button to launch the debugger.</p> - -<p>Next you'll see a dialog asking you to accept an incoming connection. Click "OK", and the debugger will start in a separate window. Note that sometimes the debugger window is hidden by the main Firefox window.</p> - -<p>{{EmbedYouTube("DvNpUVJcG_E")}}</p> - -<h2 id="Using_the_Add-on_Debugger">Using the Add-on Debugger</h2> - -<p>The Add-on Debugger looks and behaves very much like the <a href="/en-US/docs/Tools/Browser_Toolbox">Browser Toolbox</a>, except that while the scope of the Browser Toolbox is the whole browser, the Add-on Debugger is focused on a specific add-on. Like the Browser Toolbox, a toolbar along the top lets you switch between a number of different tools. In Firefox 31 there's only one such tool, the JavaScript Debugger, but with Firefox 32 you also get the Console and Scratchpad.</p> - -<h3 id="The_JavaScript_Debugger">The JavaScript Debugger</h3> - -<p>This behaves just like the normal <a href="/en-US/docs/Tools/Debugger">JavaScript Debugger</a>, except its scope is the add-on rather than a web page. On the left-hand side it lists JavaScript sources:</p> - -<ul> - <li>at the top is <code>bootstrap.js</code>: either the one you've written if your add-on is a manually written <a href="/en-US/Add-ons/Bootstrapped_extensions">bootstrapped add-on</a>, or the one included by the SDK if your add-on is an SDK add-on.</li> - <li>next, if your add-on is an SDK add-on, you'll find your add-on's <code>main.js</code>, any <a href="/en-US/Add-ons/SDK/Guides/Module_structure_of_the_SDK#Local_Modules">local modules</a> shipping with your add-on, and any content scripts that are currently loaded</li> - <li>next, all the SDK modules used directly or indirectly by your add-on</li> -</ul> - -<h4 id="Content_scripts">Content scripts</h4> - -<p>Content scripts are only listed if they are currently loaded. Also, if you set a breakpoint in a content script, it will not be active for instances of the content script which are loaded after the breakpoint is set.</p> - -<p>For example, suppose you have an add-on that attaches a content script to every tab the user loads. The content script adds a click handler to the page. As soon as you open a tab, this content script will be listed in the debugger. If you then set a breakpoint in the content script's click handler, then execution will pause whenever you click the page. But if you open a new tab, there are now two instances of the content script, and the breakpoint will not be enabled for the second instance You'll need to set a new breakpoint now if you want to it work for the second instance.</p> - -<p>We're investigating improvements to this in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1016046">bug 1016046</a>.</p> - -<h3 id="The_Console">The Console</h3> - -<p>The Console behaves just like the <a href="/en-US/docs/Tools/Web_Console">Web Console</a>, but its scope is the add-on rather than the web page.</p> - -<p>However, note that it actually runs in the context of the add-on's <code>bootstrap.js</code>, which may not be what you expect if your add-on uses the SDK: you won't see any objects defined in your add-on's <code>main.js</code>, and you won't see <code>require()</code> either. This issue is being tracked as <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1005193">bug 1005193</a>.</p> - -<p>You can execute Console statements in the context of <code>main.js</code> while execution is paused inside <code>main.js</code>.</p> - -<h3 id="The_Scratchpad">The Scratchpad</h3> - -<p>The Scratchpad behaves just like the normal <a href="/en-US/docs/Tools/Scratchpad">Scratchpad</a>, but its scope is the add-on rather than the web page.</p> - -<p>Like the Console, the add-on Scratchpad runs in the context of the add-on's <code>bootstrap.js</code> even if the add-on uses the SDK, and as with the Console you can execute Scratchpad code in the context of <code>main.js</code> while execution is paused inside <code>main.js</code>.do</p> diff --git a/files/ja/mozilla/add-ons/add-on_guidelines/index.html b/files/ja/mozilla/add-ons/add-on_guidelines/index.html deleted file mode 100644 index f86dd2e18c..0000000000 --- a/files/ja/mozilla/add-ons/add-on_guidelines/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: アドオン ガイドライン -slug: Mozilla/Add-ons/Add-on_guidelines -tags: - - Add-ons - - アドオン -translation_of: 'https://extensionworkshop.com/documentation/publish/add-on-policies/' ---- -<div class="warning"> -<p>この文書はもはや無効です。現在のアドオンポリシー集については、 <a href="https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/AMO/Policy/Reviews">レビューポリシーの文書</a> をご覧ください。</p> -</div> - -<p>これらのアドオンガイドラインは、優れたユーザエクスペリエンスを確保する一方で、オープンかつ多様なアドオン開発者のコミュニティの育成をするために作成されました。ホストされている場所に関わらず、すべてのアドオンおよびアドオンの更新に適用されます。同様に、アドオンを使用せずに Firefox の設定をカスタマイズするインストーラにも適用されます。<a class="external text" href="https://addons.mozilla.org/" rel="nofollow">AMO</a> にホストされているアドオンは、<a href="https://addons.mozilla.org/developers/docs/policies" title="https://addons.mozilla.org/developers/docs/policies">追加のポリシー</a> に従う必要があります。</p> - -<h2 id="Be_Transparent(透明性)">Be Transparent(透明性)</h2> - -<ul> - <li>アドオンは、アドオン Web インストールシステムを使用してインストールするか、<a class="external text" href="https://blog.mozilla.org/addons/2011/08/11/strengthening-user-control-of-add-ons/" rel="nofollow">インストールのオプトインダイアログ</a> で許可されなくてはいけません。 - - <ul> - <li>インストールしているものをユーザが知り、予期しない変更によって不快な驚きを与えないようにしてください。また、それが不要になった時に何を削除するかをユーザに知らせてください。</li> - <li>アプリケーションのインストーラによってインストールされたアドオンは、<a class="external text" href="/docs/Adding_Extensions_using_the_Windows_Registry" rel="nofollow">Windows のレジストリを使用</a> するか、グローバルなインストール方法と同等とし、Firefox にオプトイン画面が表示されなければなりません。オプトイン画面は、追加情報のオーバーレイや画像で覆い隠すなど、いかなる方法でも改変されてはなりません。</li> - </ul> - </li> - <li>アドオンは、いつでもアドオンマネージャからアンインストールまたは無効化できなければなりません。 - <ul> - <li>Windows のレジストリを使用してグローバルにインストールされたアドオンやグローバルの extension ディレクトリにインストールされたアドオンは、アンインストールできません (<a class="external text" href="https://bugzilla.mozilla.org/show_bug.cgi?id=640775" rel="nofollow">bug 640775</a>) が、無効化して同じ効果を得られます。</li> - </ul> - </li> - <li>アドオンは、そのライフタイム期間 (作成されてから破棄されるまで) のすべてにおいて、<a class="external text" href="/docs/Install_manifests#id" rel="nofollow">単一のユニークな ID</a> を使用しなければなりません。 - <ul> - <li>同じ ID を複数の製品で使用したり、複数の ID を 1 つの製品で使用することは、自動更新で問題を引き起こし、ブロックリストの干渉を起こします。アドオンは所有者の変更によって ID が変更されることがあります。これは一般的にメールアドレスのような形式を使用します (例: personasplus@mozilla.com)。</li> - </ul> - </li> - <li>アドオンは、ブランド名や商標、その他のユーザを欺く用語を使用してはなりません。 Mozilla の商標を使用する場合、<a class="external text" href="https://www.mozilla.org/foundation/trademarks/policy/" rel="nofollow">Mozilla の商標ポリシー</a> に従わなくてはなりません。</li> - <li>アドオンは、その意図している目的と有効な機能および更新によって導入される新しい機能を明確に伝えるべきです。 - <ul> - <li>私たちは、製品の収益化を選択したアドオン開発者を理解しサポートしますが、ユーザのブラウザ体験に代価を求めるものであってはなりません。アドオンが、広告やアフィリエイトコード、スポンサー付きの検索結果、または類似のものを Web ページに挿入する場合、このアドオンのインストール時に、このことをユーザに承知させておくべきです。同様に、一部の機能を有料にする、または試用期間後に支払いを必要とする場合は、ユーザにこのことを承知させておくべきです。</li> - </ul> - </li> -</ul> - -<h2 id="Be_Respectful_to_Users(ユーザへの敬意)">Be Respectful to Users(ユーザへの敬意)</h2> - -<ul> - <li>アドオンは、アンインストールされた時に、導入されたコード、実行可能な機能、アプリケーションの設定変更をすべて削除しなければなりません。 - <ul> - <li>通常のアンインストール処理でアドオンをアンインストールすることで、一般的に満たされます。このガイドラインは主に、ホームページ設定や既定の検索 URL、ネットワーク設定など、諸々の設定を変更するものに適用されます。これらの設定は、アドオンがアンインストールされた時に以前の設定が復元されるべきです。ほとんどのアドオンは、<a class="external text" href="/docs/Building_an_Extension#Defaults_Files" rel="nofollow">既定の設定ファイル</a> を通して変更を行うことで、容易にこれを達成できます。</li> - </ul> - </li> - <li>アドオンは、ユーザの選択を尊重し、予期しない変更を行ったりユーザの能力を制限して変更を戻してはなりません。 - <ul> - <li>例えば、ユーザは一般的に、アドオンが Firefox のホームページ設定を変更することを期待していません。このような追加の変更を行う場合は、ユーザに確認してオプトインすることが推奨されます。</li> - <li>設定の変更が困難になったり元に戻すことが不可能な変更は禁止です。設定を変更してユーザや他のアドオン、インストーラをブロックすることも許可されていません。</li> - </ul> - </li> - <li>アドオンは、ユーザの個人情報がどのように使用されるかを明確にするべきです。 - <ul> - <li>アドオンがユーザデータをインターネット経由で送信する場合は、できるだけ簡潔で読みやすいプライバシーポリシーを提供すべきです。</li> - </ul> - </li> - <li>アドオンの開発者は、開発者への問い合わせ方法を提供するべきです。 - <ul> - <li>開発者はユーザのためのサポートチャンネルを提供する必要はありませんが、推奨されています。すべてのアドオン開発者は、問い合わせ用の公開のメールアドレスを持ち、ブロックリスト入りするようなガイドライン違反など、緊急の場合に備えて問い合わせられるようにするべきです。</li> - </ul> - </li> -</ul> - -<h2 id="Be_Safe(安全性)">Be Safe(安全性)</h2> - -<ul> - <li>アドオンは、ユーザのデータやシステム、オンライン ID を損なってはなりません。</li> - <li>アドオンは、ユーザのプライベートデータを安全でない手段で送信したり、不要な第三者に開示したりしてはなりません。 - <ul> - <li>プライベートデータは、常に安全な接続を通して送信されるべきです。これには、訪れたサイトの URL やブックマークなどのブラウジングデータも含まれます。</li> - <li>ユーザエージェント文字列にテキストを追加したりカスタムヘッダを追加することによってブラウザが簡単に指紋を残せるようにすることは、セキュリティに関わるため避けるべきです。</li> - </ul> - </li> - <li>アドオンは、アプリケーションやシステムの脆弱性を創出または露呈させてはなりません。 - <ul> - <li>セキュリティのバグは見つかるものですが、一度発見されたものはすぐに修正される必要があります。人気のアドオンにセキュリティの脆弱性があると、悪意のハッカーの標的になります。このような場合、私たちは開発者からの応答を待たずに、アドオンをすぐにブロックリストへ移動します。</li> - </ul> - </li> - <li>アドオンは、アプリケーションやブロックリストの更新システムに手を加えてはなりません。</li> - <li>アドオンは、プライベートブラウジングモード (PBM) 中は、ブラウジングデータを保存するべきではありません。 - <ul> - <li>PBM は、ブラウジング中にデータを <em>ローカル</em> に保存しないようにする機能であり、データを送信しない機能ではないことを強調しておくべきでしょう。PBM について学ぶには、<a class="external text" href="http://ehsanakhgari.org/tag/privatebrowsing" rel="nofollow">Ehsan のブログ投稿</a> をお読みください。</li> - </ul> - </li> -</ul> - -<h2 id="Be_Stable(安定性)">Be Stable(安定性)</h2> - -<ul> - <li>アドオンは、ハングアップやクラッシュの原因となるべきではありません。</li> - <li>アドオンは、アプリケーションの中心機能を壊したり無効にしてはなりません。 - <ul> - <li>これには、タブブラウジング、プライベートブラウジングモード、ロケーションバーなどの機能が含まれます。これを行わなければならない特別なアドオンは除きます。</li> - </ul> - </li> - <li>アドオンは、メモリリークの原因となったり不必要に大量のメモリーを消費するべきではありません。</li> - <li>アドオンは、アプリケーションやシステムの動作を著しく遅くするべきではありません。</li> - <li>アドオンは、通常のアプリケーションの使用に影響するほどのネットワークリソースを消費するべきではありません。 - <ul> - <li>ユーザが承知せずに大量のデータをダウンロードすることは、通常のブラウジングを妨害し、ネットワーク利用に制限のあるユーザに想定外の通信料金が請求される可能性があります (モバイル通信などの従量課金サービスなど)。</li> - </ul> - </li> -</ul> - -<h2 id="例外">例外</h2> - -<ul> - <li>アドオンは、その意図した目的があり、悪意を持ったもの (セキュリティの脆弱性を悪用するものなど) でなければ、ガイドラインを破ることができます。</li> - <li>職場や学校、キオスク、その他の場所の管理者によって配備されたアドオンは、ほとんどのガイドラインから免除されます。</li> - <li>Firefox の実行中に有効なアドオンがアンインストールされる間は、その後片付けをするコードのみが実行できます。他の状況でアドオンがアンインストールされる場合は、アドオン自身が後片付けを試みることを必要としません。アドオン無しで Firefox の設定を変更するアプリケーションのインストーラは、アンインストール時にその変更を元に戻すべきです。</li> - <li>アドオンは、自身が無効の場合に Firefox に影響しないプライベートな設定を残しておくことができます。こうしておくことで、アドオンが後で再インストールされた時に、以前のアドオンの設定が失われません。</li> -</ul> - -<p>他の例外も追加される可能性があります。</p> - -<h2 id="実施">実施</h2> - -<p>上記のガイドラインに従わないアドオンは、その違反の大きさにより、ブロックリスト入りの対象になる可能性があります。「してはならない」「しなければならない」(<em>must</em>) という制限されたガイドラインは特に重要です。これに違反したものは、すなわちブロックリスト入りの対象になります。</p> - -<p>Mozilla のアドオンチームは、アドオンの開発者との連絡に最善を尽くし、ブロックする前に、問題修正のために妥当な期間を提供します。アドオンに悪意が見られたり、その開発者と連絡が取れない、応答が無い、または違反を繰り返す場合は、即座にブロックリスト入りになります。</p> - -<p>ガイドライン違反は、<a class="external text" href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Tech%20Evangelism&component=Add-ons" rel="nofollow">Bugzilla 経由で報告</a> してください (Bugzilla の Tech Evangelism > Add-ons カテゴリ)。質問は、<a class="external text" href="irc://irc.mozilla.org/addons" rel="nofollow">#addons IRC チャンネル</a> に投稿できます。</p> - -<p>これらのガイドラインは将来変更される可能性があります。すべての更新事項は、 <a class="external text" href="https://blog.mozilla.org/addons/" rel="nofollow">Add-ons ブログ</a> でアナウンスされます。</p> diff --git a/files/ja/mozilla/add-ons/add-on_manager/addonauthor/index.html b/files/ja/mozilla/add-ons/add-on_manager/addonauthor/index.html deleted file mode 100644 index 03d58b8a15..0000000000 --- a/files/ja/mozilla/add-ons/add-on_manager/addonauthor/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: AddonAuthor -slug: Mozilla/Add-ons/Add-on_Manager/AddonAuthor -tags: - - Add-on Manager - - Add-ons -translation_of: Mozilla/JavaScript_code_modules/Add-on_Manager/AddonAuthor ---- -<p>作成者、開発者、貢献者、アドオンの翻訳者を表します。</p> - - -<h2 id="Attributes" name="Attributes">属性</h2> -<table class="standard-table"> - <tbody> - <tr> - <td class="header">属性</td> - <td class="header">型</td> - <td class="header">説明</td> - </tr> - <tr> - <td><code>name</code></td> - <td><code>string</code></td> - <td>人名</td> - </tr> - <tr> - <td><code>url</code> {{optional_inline}}</td> - <td><code>string</code></td> - <td><code>name</code> 属性で指定した人物の詳細が記載された URL</td> - </tr> - </tbody> -</table> diff --git a/files/ja/mozilla/add-ons/add-on_manager/addonscreenshot/index.html b/files/ja/mozilla/add-ons/add-on_manager/addonscreenshot/index.html deleted file mode 100644 index b3a81b55e5..0000000000 --- a/files/ja/mozilla/add-ons/add-on_manager/addonscreenshot/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: AddonScreenshot -slug: Mozilla/Add-ons/Add-on_Manager/AddonScreenshot -tags: - - Add-on Manager - - Add-ons -translation_of: Mozilla/JavaScript_code_modules/Add-on_Manager/AddonScreenshot ---- -<p>アドオンのスクリーンショット</p> -<h2 id="Attributes" name="Attributes">属性</h2> -<table class="standard-table"> - <tbody> - <tr> - <td class="header">属性</td> - <td class="header">型</td> - <td class="header">説明</td> - </tr> - <tr> - <td><code>url</code></td> - <td><code>string</code></td> - <td>スクリーンショットの URL</td> - </tr> - <tr> - <td><code>thumbnailURL</code> {{optional_inline}}</td> - <td><code>string</code></td> - <td>スクリーンショットのサムネイルの URL</td> - </tr> - <tr> - <td><code>caption</code> {{optional_inline}}</td> - <td><code>string</code></td> - <td>スクリーンショットのキャプション</td> - </tr> - </tbody> -</table> diff --git a/files/ja/mozilla/add-ons/add-on_manager/code_samples/index.html b/files/ja/mozilla/add-ons/add-on_manager/code_samples/index.html deleted file mode 100644 index 0cc6c7b6ee..0000000000 --- a/files/ja/mozilla/add-ons/add-on_manager/code_samples/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: コードの実例 -slug: Mozilla/Add-ons/Add-on_Manager/Code_Samples -tags: - - Add-on Manager - - Add-ons -translation_of: Mozilla/JavaScript_code_modules/Add-on_Manager/Code_Samples ---- -<h2 id="Getting_the_directory_where_your_addon_is_located" name="Getting_the_directory_where_your_addon_is_located">アドオンが格納されているディレクトリの取得</h2> - -<p>あなたのアドオンがインストールされているディレクトリを確認する必要がある場合、次の様なトリックを用います。コード中の <var>YOUREXTENSIONID</var> はあなたのアドオンの ID で置き換えてください。</p> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/<code><a href="/ja/Add-ons/Add-on_Manager" title="Add-on Manager">AddonManager.jsm</a></code>"); - -<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager" title="AddonManager">AddonManager</a></code>.<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#getAddonByID()" title="AddonManager.getAddonByID()">getAddonByID</a></code>("YOUREXTENSIONID", function(addon) { - var addonLocation = addon.<code><a href="/ja/Add-ons/Add-on_Manager/Addon#getResourceURI()" title="Addon.getResourceURI()">getResourceURI</a></code>("").QueryInterface(Components.interfaces.{{ Interface( "nsIFileURL" ) }}).file.path; -}); -</pre> - -<h2 id="Accessing_file_and_version_information" name="Accessing_file_and_version_information">ファイルとバージョン情報へのアクセス</h2> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/<code><a href="/ja/Add-ons/Add-on_Manager" title="Add-on Manager">AddonManager.jsm</a></code>"); - -<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager" title="AddonManager">AddonManager</a></code>.<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#getAddonByID()" title="AddonManager.getAddonByID()">getAddonByID</a></code>("my-addon@foo.com", function(addon) { - alert("My extension's version is " + addon.version); - alert("Did I remember to include that file.txt file in my XPI? " + - addon.<code><a href="/ja/Add-ons/Add-on_Manager/Addon#hasResource()" title="Addon.hasResource()">hasResource</a></code>("file.txt") ? "YES!" : "No"); - alert("Let's pretend I did, it's available from the URL " + addon.<code><a href="/ja/Add-ons/Add-on_Manager/Addon#getResourceURI()" title="Addon.getResourceURI()">getResourceURI</a></code>("file.txt").spec); -}); -</pre> - -<h2 id="Uninstall_an_addon" name="Uninstall_an_addon">アドオンの削除</h2> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/<code><a href="/ja/Add-ons/Add-on_Manager" title="Add-on Manager">AddonManager.jsm</a></code>"); - -<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager" title="AddonManager">AddonManager</a></code>.<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#getAddonByID()" title="AddonManager.getAddonByID()">getAddonByID</a></code>("youraddon@youraddon.com", function(addon) { - addon.<code><a href="/ja/Add-ons/Add-on_Manager/Addon#uninstall()" title="Addon.uninstall()">uninstall</a></code>(); -}); -</pre> - -<h2 id="Disable_an_addon" name="Disable_an_addon">アドオンの無効化</h2> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/<code><a href="/ja/Add-ons/Add-on_Manager" title="Add-on Manager">AddonManager.jsm</a></code>"); -<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager" title="AddonManager">AddonManager</a></code>.<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#getAddonByID()" title="AddonManager.getAddonByID()">getAddonByID</a></code>("youraddon@youraddon.com", function(addon) { - if (addon.isActive) addon.userDisabled = addon.isActive; -}); -</pre> - -<h2 id="Listening_for_addon_uninstall" name="Listening_for_addon_uninstall">アドオンのアンインストールのリスニング</h2> - - -<p>以下の例では、アドオンのアンインストール時にクリーンアップを実行する profile-before-change メッセージを取得する際に確認することができる変数 "beingUninstalled" を設定しています。</p> - - -<pre class="brush: js">var beingUninstalled; - -let listener = { - onUninstalling: function(addon) { - if (addon.id == "youraddon@youraddon.com") { - beingUninstalled = true; - } - }, - onOperationCancelled: function(addon) { - if (addon.id == "youraddon@youraddon.com") { - beingUninstalled = (addon.<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#Pending_operations" title="AddonManager.pendingOperations">pendingOperations</a></code> & AddonManager.PENDING_UNINSTALL) != 0; - } - } -} - -try { - Components.utils.import("resource://gre/modules/<code><a href="/ja/Add-ons/Add-on_Manager" title="Add-on Manager">AddonManager.jsm</a></code>"); - - <code><a href="/ja/Add-ons/Add-on_Manager/AddonManager" title="AddonManager">AddonManager</a></code>.<code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#addAddonListener()" title="AddonManager.addAddonListener()">addAddonListener</a></code>(listener); -} catch (ex) {} -</pre> diff --git a/files/ja/mozilla/add-ons/add-on_manager/index.html b/files/ja/mozilla/add-ons/add-on_manager/index.html deleted file mode 100644 index 292d5b739b..0000000000 --- a/files/ja/mozilla/add-ons/add-on_manager/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Add-on Manager -slug: Mozilla/Add-ons/Add-on_Manager -tags: - - Add-on Manager - - Add-ons - - NeedsEditorialReview - - NeedsTechnicalReview - - NeedsTranslation - - TopicStub -translation_of: Mozilla/JavaScript_code_modules/Add-on_Manager ---- -<p>{{ gecko_minversion_header("2.0") }}</p> - -<p>The Add-on Manager is responsible for managing all of the add-ons installed in the application. Through its APIs information about all installed add-ons can be retrieved and new add-ons can be installed. The APIs are designed to be generic and support many different types of add-ons.</p> - -<p>Many functions in the Add-on Manager interface operate asynchronously returning results through callbacks passed to the functions. The callbacks may be called immediately while the initial function is still executing or shortly after depending on when the requested data becomes available.</p> - -<h2 id="Accessing_installed_add-ons">Accessing installed add-ons</h2> - -<p>Information about installed add-ons can be retrieved through the main <code><a href="/ja/Add-ons/Add-on_Manager/AddonManager" title="AddonManager">AddonManager</a></code> API. All of its functions are asynchronous meaning that a callback function must be passed to receive the <code><a href="/ja/Add-ons/Add-on_Manager/Addon" title="Addon">Addon</a></code> instances. The callback may well only be called after the API function returns. For example:</p> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/AddonManager.jsm"); - -AddonManager.getAllAddons(function(aAddons) { - // Here aAddons is an array of <code><a href="/ja/Add-ons/Add-on_Manager/Addon" title="Addon">Addon</a></code> objects -}); -// This code will execute before the code inside the callback -</pre> - -<p>Notifications about changes to installed add-ons are dispatched to any registered <code><a href="/ja/Add-ons/Add-on_Manager/AddonListener" title="AddonListener">AddonListener</a></code>s. They must be registered through the <code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#addAddonListener()" title="AddonManager.addAddonListener()">addAddonListener()</a></code> method.</p> - -<h2 id="Installing_new_add-ons">Installing new add-ons</h2> - -<p>New add-ons can be installed by using the <code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#getInstallForFile()" title="AddonManager.getInstallForFile()">getInstallForFile()</a></code> or <code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#getInstallForURL()" title="AddonManager.getInstallForURL()">getInstallForURL()</a></code> methods on the <code><a href="/ja/Add-ons/Add-on_Manager/AddonManager" title="AddonManager">AddonManager</a></code> object. These will pass an <code><a href="/ja/Add-ons/Add-on_Manager/AddonInstall" title="AddonInstall">AddonInstall</a></code> instance to the callback which can then be used to install the add-on:</p> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/AddonManager.jsm"); - -AddonManager.getInstallForURL("http://www.foo.com/test.xpi", function(aInstall) { - // aInstall is an instance of <code><a href="/ja/Add-ons/Add-on_Manager/AddonInstall" title="AddonInstall">AddonInstall</a></code> - aInstall.install(); -}, "application/x-xpinstall"); -</pre> - -<p>The progress of <code><a href="/ja/Add-ons/Add-on_Manager/AddonInstall" title="AddonInstall">AddonInstall</a></code>s can be monitored using an <code><a href="/ja/Add-ons/Add-on_Manager/InstallListener" title="InstallListener">InstallListener</a></code>. A listener can be registered either for a specific install using the <code><a href="/ja/Add-ons/Add-on_Manager/AddonInstall#addListener()" title="AddonInstall.addListener()">addListener()</a></code> method or for all installs using the <code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#addInstallListener()" title="AddonManager.addInstallListener()">addInstallListener()</a></code> method.</p> - -<h2 id="Finding_updates">Finding updates</h2> - -<p>Add-ons can be checked for updates using the <code><a href="/ja/Add-ons/Add-on_Manager/Addon#findUpdates()" title="Addon.findUpdates()">findUpdates()</a></code> method. It must be passed an <code><a href="/ja/Add-ons/Add-on_Manager/UpdateListener" title="UpdateListener">UpdateListener</a></code> to receive information about compatibility information and new update information. Any available update is returned as an <code><a href="/ja/Add-ons/Add-on_Manager/AddonInstall" title="AddonInstall">AddonInstall</a></code> which is ready to be downloaded and installed.</p> - -<p>{{ h1_gecko_minversion("Detecting add-on changes", "7.0") }}</p> - -<p>You can also get lists of add-ons that, at startup, were changed in various ways. The <code><a href="/ja/Add-ons/Add-on_Manager/AddonManager#getStartupChanges()" title="AddonManager.getStartupChanges()">getStartupChanges()</a></code> method lets you find out which add-ons were installed, removed, updated, enabled, or disabled at application startup.</p> - -<p>For example, to take a look at the add-ons that were disabled at startup:</p> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/AddonManager.jsm"); - -let addonIDs = AddonManager.getStartupChanges(AddonManager.STARTUP_CHANGE_DISABLED); -if (addonIDs.length > 0) { - // addonIDs is now an array of the add-on IDs that have been disabled -alert("Note: " + addonIDs.length + " add-ons have been disabled."); -} -</pre> - -<h2 id="See_also">See also</h2> - -<p>{{ ListSubpages() }}</p> diff --git a/files/ja/mozilla/add-ons/amo/index.html b/files/ja/mozilla/add-ons/amo/index.html deleted file mode 100644 index 3f6d8b219f..0000000000 --- a/files/ja/mozilla/add-ons/amo/index.html +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: AMO -slug: Mozilla/Add-ons/AMO -translation_of: Mozilla/Add-ons/AMO ---- -<p> </p> - -<p><a href="https://addons.mozilla.org/en-US/firefox/">addons.mozilla.org</a> をドキュメント化しているページ:</p> - -<p>{{Listsubpages("/ja/Add-ons/AMO", 10)}}</p> - -<p> </p> diff --git a/files/ja/mozilla/add-ons/amo/policy/index.html b/files/ja/mozilla/add-ons/amo/policy/index.html deleted file mode 100644 index ce6a579e34..0000000000 --- a/files/ja/mozilla/add-ons/amo/policy/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: AMO ポリシー -slug: Mozilla/Add-ons/AMO/Policy -tags: - - AMO - - Add-ons - - Firefox - - Policies -translation_of: Mozilla/Add-ons/AMO/Policy ---- -<p>{{AddonSidebar}}</p> - -<p>Mozilla はユーザーと開発者に対して、すばらしいアドオン体験を保証することにコミットします。アドオンを登録する前に、下記のポリシーを良く読んでください。</p> - -<dl> - <dt><a href="/ja/docs/Mozilla/Add-ons/AMO/Policy/Agreement">Firefox アドオン配布契約</a></dt> - <dd>この契約は、2016年1月5日から有効になります。</dd> - <dt><a href="/ja/docs/Mozilla/Add-ons/AMO/Policy/Reviews">アドオンポリシー</a></dt> - <dd>アドオンは Firefox のコア機能を拡張し、ユーザーが Web エクスペリエンスを変更したりパーソナライズしたりできるようにします。信頼に基づいて構築された健全なアドオンエコシステムは、開発者が成功し、ユーザーが Firefox を自分のものにしても安全に感じるために不可欠です。</dd> - <dd>これらの理由から、Mozilla はすべてのアドオンが許容される慣習に関するアドオンポリシーに従うことを要求しています。これらのポリシーは、法的な助言として機能することを意図したものではなく、アドオンのプライバシーポリシーに含める包括的な用語のリストとして機能することも意図していません。</dd> - <dt><a href="https://developer.mozilla.org/Mozilla/Add-ons/AMO/Policy/Featured">Featured Add-ons</a></dt> - <dd>注目のアドオンがどのように注目されるようになり、そのプロセスに何が関与しているのか。</dd> - <dd><strong><a href="https://developer.mozilla.org/ja/Add-ons#Contact_us">我々に連絡する</a></strong> - <p>このポリシーやあなたのアドオンに関して連絡を取る方法。</p> - </dd> -</dl> diff --git a/files/ja/mozilla/add-ons/creating_custom_firefox_extensions_with_the_mozilla_build_system/index.html b/files/ja/mozilla/add-ons/creating_custom_firefox_extensions_with_the_mozilla_build_system/index.html deleted file mode 100644 index 2a8d3507c7..0000000000 --- a/files/ja/mozilla/add-ons/creating_custom_firefox_extensions_with_the_mozilla_build_system/index.html +++ /dev/null @@ -1,518 +0,0 @@ ---- -title: Mozilla ビルドシステムによるカスタム Firefox 拡張機能の作成 -slug: >- - Mozilla/Add-ons/Creating_Custom_Firefox_Extensions_with_the_Mozilla_Build_System -tags: - - Mozilla 開発 - - XPCOM - - アドオン - - ガイド - - ビルドドキュメンテーション - - 拡張機能 -translation_of: >- - Archive/Add-ons/Creating_Custom_Firefox_Extensions_with_the_Mozilla_Build_System ---- -<div class="blockIndicator warning"> -<p>Support for extensions using XUL/XPCOM or the Add-on SDK was removed in Firefox 57, released November 2017. As there is no supported version of Firefox enabling these technologies, this page will be removed by December 2020.</p> -</div> - -<p>{{LegacyAddonsNotice}}{{AddonSidebar}}</p> - -<p>Firefox 用の拡張機能を作成するための情報は<a href="/en/Extensions">豊富</a>にあります。しかし現時点でこれら全てのドキュメントは、あなたが <a href="/en/XUL" title="en/XUL">XUL</a> または <a href="/en/JavaScript" title="en/JavaScript">JavaScript</a> のみを用いて拡張機能を作成することを想定しています。複雑な拡張機能を作成するためには、これらを実現するための C++ で作成されたコンポーネントを利用する必要が出てくることでしょう。あなたの作成する拡張機能に C++ によるコンポーネントを含めなければならないケースは次のとおりです。</p> - -<ul> - <li>JavaScript のコードよりも高いパフォーマンスが要求される場合。</li> - <li>C または C++ で書かれたサードパーティ製のライブラリを利用する場合。</li> - <li><a href="/en/XPCOM" title="en/XPCOM">XPCOM</a> (例: <a href="/en/NSPR" title="en/NSPR">NSPR</a>) によって公開されていない Mozilla のインタフェースを利用する場合。</li> -</ul> - -<ul> -</ul> - -<div class="note"><strong>Note:</strong> Gecko の JIT による最新の JavaScript エンジンと <a href="/en/js-ctypes/js-ctypes_reference" title="js-ctypes reference">js-ctypes</a> により、より多くの拡張機能は JavaScript のみで記載できます。ネイティブな C++ コードをあなたの拡張機能で利用することを決断する前に、他の選択肢を十分検討してください。バイナリのコンポーネントの場合 Firefox のメジャーリリースの度に再コンパイルが必要となり面倒です。</div> - -<p>この記事では上記に記載したような条件の下、大規模で複雑な Firefox 拡張を作成するための開発環境をセットアップする方法について述べます。なお、 Mozilla 用の C++ コンポーネントを作成するために Mozilla をビルドする必要は無く、 Mozilla ビルドシステムを利用すればよいことを強調しておきます。あなたが単に <a href="/en/XPCOM" title="en/XPCOM">XPCOM</a> コンポーネント等の作成方法について調べているのであれば、本記事の内容はおそらく過剰であり、それよりも<a class="external" href="http://www.iosart.com/firefox/xpcom/">こちらのガイド</a>を見るべきでしょう。言い換えると、あなたが個人またはチームでの開発経験者であり、かつ大規模で複雑な拡張機能を作成しようとしているのであれば、本記事に書かれている手法を検討することで、うまく作業を進めることができるでしょう。</p> - -<p>メモ: ここでは Firefox でのみこれらの手法の動作確認をしましたが、これらは追加の変更を加えずとも、おそらく大体の Gecko ベースのプラットフォーム (Thunderbird や Seamonkey など) で動作するでしょう。</p> - -<h3 id="バンビ、モジラに会う">バンビ、モジラに会う</h3> - -<p>臆病者の話ではありません。とりわけ最初のステップは、非常に大規模―そう、途方もなく―である Mozilla プロジェクトのビルドの話へと巻き込みます。多くの賢い開発者は、一度はそのビルドに挑戦し、精神異常の瀬戸際を経験してきました。もしあなたが C++ 開発者を経験していないなら、あなたを悩ませたくありませんので、 JavaScript を利用することをおすすめします。</p> - -<h4 id="Windows_環境">Windows 環境</h4> - -<p>私は<a href="/En/Developer_Guide/Build_Instructions/Windows_Prerequisites" title="En/Developer_Guide/Build_Instructions/Windows_Prerequisites">このガイド</a>を見て初めて Mozilla のビルドを実施しました。なぜかは思い出せませんが、幾度となくスタックしてしまい、これらの一連の事件は最初に思っていたよりも実に長い時間を掛けて終えました。多くの家具が破壊され、髪は殆ど根っこから抜け落ちました。あなたがお探しの高評価の付いた分かりやすいガイドは<a class="external" href="http://whereswalden.com/mozilla/msvcfree/">こちら</a>にあります。几帳面に各ステップを実施していけば、おそらくうまく行くでしょう。あなたがきちんと動作するビルド環境を一度得られたのであれば、ある時点からはおそらく何の努力もせずにビルドできるようになったのでしょう。多分。</p> - -<h4 id="その他のプラットフォーム">その他のプラットフォーム</h4> - -<p>Linux や MacOS などの他のプラットフォームでは、手順は幾分簡単です。ビルドに必要な全てのツール群は最初から組み込まれ利用可能な状態になっており、したがって、あなたがやるべきことは端末上でいくつかコマンドを実行するのみです。殆どの OS 向けの完全な手順は<a href="/En/Developer_Guide/Build_Instructions" title="En/Developer_Guide/Build_Instructions">こちら</a>から参照できます。</p> - -<h3 id="プロジェクトの構築">プロジェクトの構築</h3> - -<p>Mozilla には、そのビルド過程へ統合されている大量の複雑な拡張機能が含まれています。したがって、XPCOM コンポーネントの作成や登録、 JAR ファイルやマニフェストのビルド、 Firefox の <code>extension/</code> ディレクトリへの多数のファイルのインストールなどの全ての問題を解決する必要があります。すなわち、これらの問題を解決することと拡張機能をビルドするための開発環境は、切っても切れない関係であると言えます。</p> - -<p>まず最初に、あなたの拡張機能に付けるキャッチーな名前を考えてください。そして、その名前のディレクトリを <code>/mozilla/extensions/ </code>ディレクトリの下に作成します。名前には小文字のみ利用可能です。ビルドツリーの同じ階層には <code>inspector/</code>, <code>reporter/</code> などの仲間のディレクトリも確認できるはずです。</p> - -<p>ビルドを行う前に、 Mozilla ビルドシステムは <code>Makefile.in</code> と呼ばれるメイクファイルのテンプレートを元にしてビルド時に実際に利用するメイクファイルを生成するコンフィギュレーションと呼ばれる処理を実施します。実際のメイクファイルはテンプレートと類似もしくは一致していることがしばしばありますが、動的に生成されたメイクファイルを利用することで得られる柔軟性が、ビルドシステムをより強力にする要素の一つとなっています。</p> - -<h4 id="単純な_C_拡張機能の分析">単純な C++ 拡張機能の分析</h4> - -<p>ここではあなたが C++ または JavaScript の両方から利用可能な XPCOM コンポーネントを記述するために C++ を利用することを想定します。コンポーネントを作成するプロセスは、 Mozilla ビルドシステムを利用した場合、実際のところ比較的簡単です。</p> - -<p>最も単純なケースでは、コンポーネントは <code>public/</code> と <code>src/</code> の 2 つのサブディレクトリを持つ、単一のメインディレクトリから成ります。メインディレクトリと各サブディレクトリには必ず <code>Makefile.in</code> を含める必要があります (これ以降は単にこれらのファイルをメイクファイルと呼びますが、本当のところは真のメイクファイルを生成するために利用されるファイルであることを忘れないようにしてください) 。このメイクファイルは 2 つのことを宣言します。 1 つ目は、拡張機能の生成先であるサブディレクトリをリスティングしています。そのためビルドシステムは、追加のメイクファイルの検索場所を知る必要があります。 2 つ目は、ビルドシステムに対して新しい拡張機能を作成する方法 (コンポーネントのディレクトリを Firefox のバイナリのあるディレクトリへコピーする、などではなく) を指示します。拡張機能を利用する主な利点は、全てをパッケージングしてそれを他のマシンへインストールできることです。</p> - -<p>それでは、以下に基礎的なごく普通の最上位のメイクファイルを示します (拡張機能のメインディレクトリ内にある <code>Makefile.in</code>) 。</p> - -<pre>DEPTH = ../.. -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -MODULE = myextension - -DIRS = public src - -XPI_NAME = myextension -INSTALL_EXTENSION_ID = myextension@mycompany.com -XPI_PKGNAME = myextension - -DIST_FILES = install.rdf - -include $(topsrcdir)/config/rules.mk</pre> - -<p>このメイクファイルの主な機能を表現するメイク処理の詳細な記述については <a href="/en/How_Mozilla's_build_system_works" title="en/How_Mozilla's_build_system_works">こちら</a> から確認できます。 <strong>MODULE</strong> と <strong>XPI_NAME</strong> の両方は、あなたの拡張機能の名前に設定します。これは、 XPI と同じ場所 (下記参照) へ全てのファイルを配置するために、全てのプロジェクトのメイクファイルで繰り返し記述しなければなりません。 <strong>INSTALL_EXTENSION_ID</strong> はあなたの拡張機能のユニークな ID です。これは GUID でもよいですが、上に示したような ID の方がかなり、そして見たときに思い出しやすいです。 <strong>XPI_PKGNAME</strong> は記述する必要がありませんが、もし配布に適した XPI を利用するならば、この値は自動的に XPI と同じ場所に作成されます (<code>/mozilla/$(MOZ_OBJDIR)/dist/xpi-stage/</code>) 。</p> - -<p>全ての拡張機能は、 Firefox に対してインストール方法を指示する <code>install.rdf</code> ファイルを含める必要があります。このファイルは拡張機能のメインディレクトリに配置する必要があり、以下のような見た目をしています。</p> - -<pre class="brush: xml"><?xml version="1.0"?> - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - <Description about="urn:mozilla:install-manifest"> - <em:id>myextension@mycompany.com</em:id> - <em:version>0.1</em:version> - - <em:targetApplication> - <!-- Firefox --> - <Description> - <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> - <em:minVersion>1.0+</em:minVersion> - <em:maxVersion>1.0+</em:maxVersion> - </Description> - </em:targetApplication> - - <!-- front-end metadata --> - <em:name>My First Extension</em:name> - <em:description>Just an example.</em:description> - <em:creator>allpeers.com</em:creator> - <em:homepageURL>http://www.allpeers.com/blog/</em:homepageURL> - </Description> -</RDF> -</pre> - -<p><code>install.rdf </code>ファイルフォーマットの詳細については<a href="/en/Install_Manifests" title="en/Install_Manifests">こちら</a>から確認できます。メイクファイルの中で <strong>DIST_FILES</strong> 変数を指定すると、ファイルを拡張機能のディレクトリと (任意の) XPI ファイルへコピーするよう <code>make</code> へ伝えることができます。</p> - -<h4 id="Public_Interfaces">Public Interfaces</h4> - -<p>The <code>public/</code> directory contains any interfaces that need to be accessed by other modules. These can be <a class="external" href="http://www.mozilla.org/scriptable/xpidl/idl-authors-guide/index.html">IDL</a> files describing <a href="/en/XPCOM" title="en/XPCOM">XPCOM</a> interfaces, which are used to generate normal C++ header files for inclusion in your source files. They can also be normal C++ header files that are to be used directly by other modules. The easiest way to accomplish the latter is to use inline implementations for all methods so you don’t have any additional linking dependencies. Otherwise you will have to link statically to your module if you use these public headers in other modules. Personally I would discourage this practice (among other things, static linking means the same code gets loaded more than once into memory, and the code won’t be available from JavaScript or other non-C++ languages) and encourage the use of XPCOM wherever possible.</p> - -<p>The makefile in the <code>public/</code> directory should follow this model:</p> - -<pre>DEPTH = ../../.. -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -MODULE = myextension -XPIDL_MODULE = myextension - -XPI_NAME = myextension - -EXPORTS = \ - myHeader.h \ - $(NULL) - -XPIDLSRCS = \ - myIFirstComponent.idl \ - myISecondComponent.idl \ - $(NULL) - -include $(topsrcdir)/config/rules.mk -</pre> - -<p><strong>XPIDL_MODULE</strong> is the name of the generated XPT file that contains type information about your <a class="external" href="http://www.mozilla.org/scriptable/xpidl/idl-authors-guide/index.html">IDL</a> interfaces. If you have multiple modules, make absolutely sure that you use a different value for <strong>XPIDL_MODULE</strong> for each one. Otherwise the first module’s XPT file will be overwritten by the second and you’ll get <strong>NS_ERROR_XPC_BAD_IID</strong> errors when you try to access its IDL interfaces from your code. The files under <strong>EXPORTS</strong> are copied directly to the <code>/mozilla/$(MOZ_OBJDIR)/dist/include/</code> directory and are thus accessible from other modules (the value of <strong>MOZ_OBJDIR</strong> is defined in <code>/mozilla/.mozconfig</code>). XPIDLSRCS are run through the IDL processor, and the generated C++ headers are copied into the same include directory. In addition, an XPT (type library) file is generated and placed in the <code>components/</code> subdirectory of your extension.</p> - -<h4 id="Source_Files">Source Files</h4> - -<p>Now it’s time to create the makefile and source files in the <code>src/</code> subdirectory. If you're implementing interfaces that you've described using IDL, the easiest way to do this is to leave the <code>src/</code> directory empty and run <code>make</code> on the <code>public/</code> directory only; this will be explained shortly.</p> - -<p>Then open the generated header file for your interface from <code>/mozilla/$(MOZ_OBJDIR)/dist/include/</code>. It contains stubs for the component .H and .CPP files that you can copy and paste into your implementation files. All you have to do is fill in the implementation stubs in the C++ file and you’re good to go.</p> - -<p>Here’s an example of the makefile you need to place into your <code>src</code> directory:</p> - -<pre class="eval">DEPTH = ../../.. -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -IS_COMPONENT = 1 -<a href="/en/MODULE" title="en/MODULE">MODULE</a> = myextension -<a href="/en/LIBRARY_NAME" title="en/LIBRARY_NAME">LIBRARY_NAME</a> = myExtension -<a href="/en/USE_STATIC_LIBS" title="en/USE_STATIC_LIBS">USE_STATIC_LIBS</a> = 1 - -XPI_NAME = myextension - -<a href="/en/CPPSRCS" title="en/CPPSRCS">CPPSRCS</a> = \ - myFirstComponent.cpp \ - mySecondComponent.cpp \ - myExtension.cpp \ - $(NULL) - -include $(topsrcdir)/config/rules.mk - -<a href="/en/EXTRA_DSO_LDOPTS" title="en/EXTRA_DSO_LDOPTS">EXTRA_DSO_LDOPTS</a> += \ - $(MOZ_COMPONENT_LIBS) \ - $(NSPR_LIBS) \ - $(NULL) -</pre> - -<p>In this example, the first two files contain the implementation of the extension’s two components. The final file, <code>myExtension.cpp</code>, contains the code necessary to register these components, as described in the next section.</p> - -<h4 id="Registering_Your_Components">Registering Your Components</h4> - -<p><a href="/en/XPCOM/XPCOM_changes_in_Gecko_2.0" title="XPCOM changes in Gecko 2.0">This article </a>explains how to register XPCOM components in Gecko 2.0 and later.</p> - -<h4 id="Building_It">Building It</h4> - -<p>As mentioned above, you’ll probably want to build your extension immediately after creating your IDL files in order to generate the C++ stubs for your component implementations. I’m assuming that you’ve already built Firefox successfully. If not, return immediately to the beginning of this article and don’t come back til you have a functioning <code>firefox.exe</code>. Do not pass go. Do not collect $200.</p> - -<p>Still here? Okay, now we have to modify your <code>.mozconfig</code> (in the <code>/mozilla/</code> root directory) so that your extension is built along with Mozilla. Add the following line at the end of the file:</p> - -<pre class="brush: shell">ac_add_options --enable-extensions=default,myextension -</pre> - -<p>Now launch <code>make</code> from the Mozilla root:</p> - -<pre class="brush: shell">make -f client.mk build -</pre> - -<p>Even if you have an up-to-date Firefox build, you’ll have to wait a while for <code>make</code> to recurse over the entire Mozilla source tree looking for new stuff (on my machine, which is pretty fast, this takes a good 10-15 minutes). Eventually it will reach your extension and generate a bunch of stuff under <code>/mozilla/$(MOZ_OBJDIR)/</code>:</p> - -<ul> - <li>Exported header files and generated header files (from IDL) in <code>dist/include/</code></li> - <li>Static libraries for your modules in <code>dist/lib/</code> (in case other modules want to link statically to your stuff instead of using XPCOM).</li> - <li>XPI file in <code>dist/xpi-stage/myextension.xpi</code>.</li> - <li>Generated makefiles for your projects in <code>extensions/myextension/</code> (remember, we’re under <code>/mozilla/$(MOZ_OBJDIR)/</code>.</li> - <li>Everything else in <code><a class="link-mailto" href="mailto:dist/bin/extensions/myextension@mycompany.com" rel="freelink">dist/bin/extensions/myextension@mycompany.com</a>/</code>.</li> -</ul> - -<p>A lot of this stuff won’t get created on this first pass since <code>make</code> will gag when it doesn’t find the source files for your components. Don’t worry about this; all you need are the generated header files that contain the C++ implementation stubs. Go back and flesh out the C++ implementation of your components so that the build can complete next time. Remember that you should never, ever modify any of these generated files. Always modify the files used to generate them and rerun <code>make</code>. If you’re changing the generated files directly, you’re probably doing something wrong.</p> - -<p>The process of walking the entire Mozilla tree takes a long time. If you already have a Mozilla build, you can avoid this by creating a makefile for your extension directly. Go to the root of your $(MOZ_OBJDIR) and (from a bash-compatible shell) enter:</p> - -<pre class="eval">../build/autoconf/make-makefile extensions/myextension -</pre> - -<p>If your $(MOZ_OBJDIR) is located outside your $(TOPSRCDIR), you'll need to do:</p> - -<pre class="eval">$(TOPSRCDIR)/build/autoconf/make-makefile -t $(TOPSRCDIR) extensions/myextension -</pre> - -<p>in order for the script to know where your source is (it'll use the extension path you gave it relative to the current dir to figure out where you want your makefiles to go).</p> - -<p>This will generate the proper makefile for your extension. Whether you build the whole Mozilla tree or take this shortcut, you can build from now on by going to <code>/mozilla/$(MOZ_OBJDIR)/extensions/myextension/</code> and typing "make" on the command line. It should build your component without bothering with the rest of Mozilla. If everything works out, you’ll see your XPI file in the XPI staging area. You’ll also see the "exploded" version of the XPI (i.e. the unzipped directory structure) underneath <code>/mozilla/$(MOZ_OBJDIR)/dist/bin/extensions</code>. (If something goes wrong, figure out what, fix it and then come back here and add it to this article.)</p> - -<p>To make sure that the build really finished, launch Firefox and check that your extension is listed when you select Tools/Extensions. If you are using Firefox as your regular browser (and if you’re not, why not!?), you might be annoyed by the fact that you have to close regular Firefox before running your custom-built version. If so, try setting the <strong>MOZ_NO_REMOTE</strong> environment variable to "1" before running the development version of Firefox. You’ll also need to use a different profile for your development version:</p> - -<pre class="brush: shell">firefox -P <em>development</em> -</pre> - -<p>Where <em>development</em> is replaced with the name of the extra profile you’ve created. This will let you run both versions of Firefox simultaneously, saving you oodles of time over the course of the build/test cycle.</p> - -<h4 id="No_Place_Like_Chrome">No Place Like Chrome</h4> - -<p>Yippee-ki-yay! Now you have an extension that does, well, absolutely nothing. It’s time to do something with those groovy components that you’ve implemented and registered. The simplest way to do this is to write some <a href="/en/JavaScript" title="en/JavaScript">JavaScript</a> and <a href="/en/XUL" title="en/XUL">XUL</a> code. At this point, it would be very helpful to have a bit of experience <a href="/en/Extensions" title="en/Extensions">writing "regular" extensions</a> (i.e. without using custom C++ components). If you’ve never done this, I strongly recommend that you think of a cool idea for something simple that you’ve always wanted to tweak in Firefox and write it. Just displaying a new menu item that opens a "Hello, World!" dialog box would be already be a great exercise to get warmed up with.</p> - -<p>Assuming you know how to write XUL/JavaScript extensions, you’re aware that the most important stuff goes in the <code>chrome/</code> directory of your extension. Well, the fact that you’re also using C++ components doesn’t change that one whit. So now you need to create the normal <code>content/</code>, <code>locale/</code> and <code>skin/</code> directories in which to place your chrome files. Personally I like placing these directly under the root directory of my module, but I don’t suppose it makes any difference if you prefer putting them under a <code>chrome/</code> subdirectory or whatever. Let freedom reign!</p> - -<p>Once you’ve written the necessary chrome files (for instance, an overlay that adds a menu item to instantiate and use one of your components), you need to package them up as part of your extension. This is accomplished through the use of a <a href="/en/JAR_Manifests" title="en/JAR_Manifests">JAR Manifest</a>. For our simple extension example, this file might look something like this:</p> - -<pre>myextension.jar: -% content myextension %content/ -% locale myextension en-US %locale/en-US/ -% skin myextension classic/1.0 %skin/classic/ -% overlay chrome://browser/content/browser.xul chrome://myextension/content/MyExtensionOverlay.xul - content/MyExtensionOverlay.js (content/MyExtensionOverlay.js) - content/MyExtensionOverlay.xul (content/MyExtensionOverlay.xul) - locale/en-US/MyExtension.dtd (locale/en-US/MyExtension.dtd) - locale/en-US/MyExtension.properties (locale/en-US/MyExtension.properties) - skin/classic/MyExtension.css (skin/classic/MyExtension.css) -</pre> - -<p>Place this code in a file called <code>jar.mn</code> in the root directory of your extension, making sure that the paths in parentheses point to actual files (when interpreted relative to the root directory). You also have to make one small change to the makefile in the same directory, adding the following line:</p> - -<pre class="eval">USE_EXTENSION_MANIFEST = 1 -</pre> - -<p>This tells <code>make</code> to create a single manifest file called <code>chrome.manifest</code> instead of creating separate manifests with goofy names for each package.</p> - -<p>Now launch <code>make</code> again, and you should see a <code>chrome</code> subdirectory appear in your extension (<code>/mozilla/$(MOZ_OBJDIR)<a class="link-mailto" href="mailto:/dist/bin/extensions/myextension@mycompany.com" rel="freelink">/dist/bin/extensions/myextension@mycompany.com</a>/</code>). Note that the <code>chrome</code> directory contains a JAR (i.e. ZIP) file with all the chrome files listed in <code>jar.mn</code> as well as a complete directory structure mirroring that of the JAR file. The directory structure, however, is empty. Why? I don’t know. Don’t worry about this, the files in the JAR are the ones that are actually used.</p> - -<h4 id="Keeping_it_Complex">Keeping it Complex</h4> - -<p>If you’re developing a really complex extension with lots of <a href="/en/XPCOM" title="en/XPCOM">XPCOM</a> components, you’ll probably want to divide your code up into smaller modules.</p> - -<h5 id="Kinda_Sorta_Complex_Extensions">Kinda, Sorta Complex Extensions</h5> - -<p>For a moderately complex extension, it’s probably enough just to subdivide the code into a single level of modules. Let’s assume that you have a <code>base/</code> module that defines a bunch of basic XPCOM components and an <code>advanced/</code> module that defines some chrome as well as other components that use the basic components. Your complete directory structure will look something like this:</p> - -<ul> - <li>myextension - <ul> - <li>base - <ul> - <li>public</li> - <li>src</li> - </ul> - </li> - <li>advanced - <ul> - <li>content</li> - <li>locale - <ul> - <li>en-US</li> - <li>...other locales...</li> - </ul> - </li> - <li>public</li> - <li>skin - <ul> - <li>classic</li> - <li>...other skins...</li> - </ul> - </li> - <li>src</li> - </ul> - </li> - </ul> - </li> -</ul> - -<p>Other than that, nothing really changes. The makefiles in the <code>base/</code> and <code>advanced/</code> directories should look more or less like your original root makefile, remembering to change the <strong>DEPTH</strong> variable to account for the fact that they’ve moved a level further away from the Mozilla root. You also need to remove the <strong>DIST_FILES</strong> variable since that’s going to be in the top-level makefile. Every makefile that generates anything should define the <strong>XPI_NAME</strong> variable to make sure generated files go into your extension and not into the global <code>components/</code> directory. In fact, just define this in every makefile to be safe. You can use the same <strong>MODULE</strong> in both <code>base/</code> and <code>advanced/</code> so that all the generated include files go into the same directory, but make sure that you don’t use the same <strong>XPIDL_MODULE</strong> in the two <code>public/</code> directories or one of the component type libraries (i.e. XPT files) will overwrite the other one and all hell will break loose.</p> - -<p>Each module must also have a different value for the <strong>LIBRARY_NAME</strong> variable. This is the name of the generated dynamic library, so if we call the libraries "myBase" and "myAdvanced", we’ll end up with <code>myBase.dll</code> and <code>myAdvanced.dll</code> (on Windows, at least). And each of these modules is going to have a separate C++ file for registering components. So there will be two files that look like <code>myExtension.cpp</code> in the original example, say <code>Base.cpp</code> and <code>Advanced.cpp</code>. Finally, each module will obviously have its own <code>jar.mn</code>, though they can reference the same JAR filename and package name if you want all the chrome files to be organized in a single JAR file and package. The only file that really stays put is <code>install.rdf</code>, which still exists once and only once in the extension root directory.</p> - -<p>As for the top-level makefile, it will now look like this:</p> - -<pre>DEPTH = ../.. -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -MODULE = myextension - -DIRS = base advanced - -XPI_NAME = myextension -INSTALL_EXTENSION_ID = myextension@mycompany.com -XPI_PKGNAME = myextension - -DIST_FILES = install.rdf - -include $(topsrcdir)/config/rules.mk -</pre> - -<h5 id="Seriously_Complex_Extensions">Seriously Complex Extensions</h5> - -<p>At some point, even a single module may grow to the point where you want to divide it further into submodules. The difference between having separate modules and having a single module with separate submodules is that the submodules all share the same file for registering components (the famous <code>myExtension.cpp</code> file), and when compiled they create a single dynamic library. The decision to split a module into submodules is all about code organization; it doesn’t really affect the final product at all.</p> - -<p>To split a module into submodules, first create a subdirectory for each submodule. Then create an additional directory called <code>build/</code>. Each submodule will be configured to create a static library, and the <code>build/</code> directory will pull these libraries together to create a single dynamic component library. Confused? Here’s an example, showing just the <code>advanced/</code> subbranch of the <code>myextension/</code> directory:</p> - -<ul> - <li>advanced - <ul> - <li>build</li> - <li>intricate - <ul> - <li>public</li> - <li>src</li> - </ul> - </li> - <li>multifarious - <ul> - <li>public</li> - <li>src</li> - </ul> - </li> - <li>content</li> - <li>locale - <ul> - <li>en-US</li> - <li>...other locales...</li> - </ul> - </li> - <li>skin - <ul> - <li>classic</li> - <li>...other skins...</li> - </ul> - </li> - </ul> - </li> -</ul> - -<p>As you can see, we’ve split <code>advanced/</code> into two submodules: <code>intricate/</code> and <code>multifarious/</code>, and we’ve added an additional <code>build/</code> subdirectory. We’ve left the chrome directories directly under <code>advanced/</code>, since they aren’t tied to any specific submodule. This means that <code>jar.mn</code> will stay in the same place.</p> - -<p>The <code>intricate/</code> and <code>multifarious/</code> makefiles will look a lot like the original <code>advanced/</code> makefile, but we’ll need to tweak them a bit. As always, we have to adjust the <strong>DEPTH</strong> variable since the makefiles are deeper in the directory structure. And we should change the <strong>LIBRARY_NAME</strong> to indicate that we’re generating a static library for each submodule. By convention the "_s" suffix is used for this purpose. So let’s call them "myIntricate_s" and "myMultifarious_s". Finally, we define the variable <strong>FORCE_STATIC_LIB</strong>, resulting in a makefile that starts something like this:</p> - -<pre>DEPTH = ../../../../.. -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -MODULE = myextension -LIBRARY_NAME = myIntricate_s -FORCE_STATIC_LIB = 1 -USE_STATIC_LIBS = 1 - -XPI_NAME = myextension - -...more stuff here... -</pre> - -<p>The <code>build</code> makefile pulls together the static libraries generated by the submodules and creates a single (dynamic) component library:</p> - -<pre>DEPTH = ../../../.. -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -IS_COMPONENT = 1 -MODULE = myextension -LIBRARY_NAME = myAdvanced -USE_STATIC_LIBS = 1 - -XPI_NAME = myextension - -DEFINES += XPCOM_GLUE - -SHARED_LIBRARY_LIBS = \ - $(DIST)/lib/$(LIB_PREFIX)myIntricate_s.$(LIB_SUFFIX) \ - $(DIST)/lib/$(LIB_PREFIX)myMultifarious_s.$(LIB_SUFFIX) \ - $(DIST)/lib/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ - $(DIST)/lib/$(LIB_PREFIX)xul.$(LIB_SUFFIX) \ - $(DIST)/lib/$(LIB_PREFIX)nss3.$(LIB_SUFFIX) \ - $(NULL) - -CPPSRCS = \ - Advanced.cpp \ - $(NULL) - -include $(topsrcdir)/config/rules.mk - -LOCAL_INCLUDES += \ - -I$(srcdir)/../intricate/src \ - -I$(srcdir)/../multifarious/src \ - $(NULL) -</pre> - -<p>The makefile in the <code>advanced/</code> directory should list the <code>intricate/</code>, <code>multifarious/</code> and <code>build/</code> directories in its <strong>DIRS</strong> variable. Make sure that <code>build/</code> comes last since it can’t create the component library until the other makefiles have completed.</p> - -<h3 id="Other_Topics">Other Topics</h3> - -<h4 id="Adding_Data_Files_to_Your_Extensions">Adding Data Files to Your Extensions</h4> - -<p>In some cases, you may wish to include additional files in your extension that don’t belong in the <code>chrome/</code> subdirectory. Examples might be database files or XML schemas. This can be achieved by adding a custom step to your makefile that copies the files from the source tree into the extension’s target directory.</p> - -<h5 id="Copying_Data_Files_Into_Target_Directory">Copying Data Files Into Target Directory</h5> - -<p>Let’s say that you have some data files containing statistical information that you want to include in your extension and make available to your components. You’ve placed these files, which have the extension .TXT, into a <code>stats/</code> subdirectory under your extension directory in the source tree. The following makefile rule can be used to copy these files into the final target directory of the extension:</p> - -<pre>export:: - if test ! -d $(FINAL_TARGET)/stats; then \ - $(NSINSTALL) -D $(FINAL_TARGET)/stats; \ - fi - $(INSTALL) $(srcdir)/*.txt $(FINAL_TARGET)/stats -</pre> - -<h5 id="Accessing_Data_Files_From_Components">Accessing Data Files From Components</h5> - -<p>The trick to accessing your data files is to figure out where the home directory of your extension is. Rumor has it that at some future date, this will possible through the <code><a href="/en/XPCOM_Interface_Reference/nsIExtensionManager" title="en/XPCOM_Interface_Reference/nsIExtensionManager">nsIExtensionManager</a></code> interface or something similar. In the meantime, there is a simple and reliable hack that can be used to achieve this. In the implementation of any JavaScript XPCOM component, there is a special <strong>__LOCATION__</strong> (two leading and two trailing underscores) symbol that points to the component’s implementation file. So you can write a simple component which deduces the root directory of your extensions by extrapolating from its location.</p> - -<p><a class="external" href="http://www.builderau.com.au/program/soa/Creating_XPCOM_components_with_JavaScript/0,39024614,39206503,00.htm">This article</a> explains how to create an XPCOM component in JavaScript. You’ll need an IDL file for an interface that looks something like this:</p> - -<pre>interface myILocation : nsISupports -{ - readonly attribute nsIFile locationFile; -}; -</pre> - -<p>Place the IDL file in the <code>public/</code> directory of your project or subproject. In the <code>src/</code> directory, place the JavaScript file that implements the component. The component implementation will include the methods for retrieving the path or file for the extension’s home directory:</p> - -<pre class="brush: js">myLocation.prototype = -{ - QueryInterface: function(iid) - { - if (iid.equals(nsISupports)) - return this; - if (iid.equals(myILocation)) - return this; - - Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE; - return null; - }, - - get locationFile() - { - return __LOCATION__.parent.parent; - } -} -</pre> - -<p>This assumes that the component resides in a subdirectory of the extension directory (by convention, this directory is called <code>components/</code>). The <code>parent</code> property of <strong>__LOCATION__</strong> returns the <code>components/</code>, and the <code>parent</code> of this is the extension directory.</p> - -<p>The last step is to modify the makefile of the source directory where you placed your JavaScript file so that it is copied into the appropriate location in the extension:</p> - -<pre>export:: - $(INSTALL) $(srcdir)/*.js $(FINAL_TARGET)/components -</pre> - -<p>Now you can instantiate an instance of this component and use the <code>locationFile</code> property to get an <code><a href="/en/XPCOM_Interface_Reference/nsIFile" title="en/XPCOM_Interface_Reference/nsIFile">nsIFile</a></code> interface that points to your extension’s home directory.</p> - -<h4 id="Using_Third-Party_Libraries">Using Third-Party Libraries</h4> - -<p>For more sophisticated extensions, you may want to integrate third-party libraries that provide specialized functionality for database connectivity, image processing, networking and the like. If you want your extension to run on all Firefox platforms, you will need to have the source code for the library in question, so I assume that this is available.</p> - -<p>The most convenient approach from the perspective of the development cycle is to create a Mozilla-style makefile for the library. This works well for libraries that have a straightforward make process without extensive configuration. A good example of this is the SQLite library included in the Mozilla build tree at <code>db/sqlite</code>. By adapting the makefile in this way, the library is created as part of the standard Mozilla build process, which eliminates additional build steps. The downside is that you will need to update the modified makefile any time a new version of the library is released.</p> - -<p>For libraries that have complex configuration processes, use a non-standard compiler or have other special characteristics, it may be unfeasible to create a Mozilla-compliant makefile. In this case, I would recommend placing the entire library distribution inside the project or subproject that uses it. So if library <code>acmelib</code> is used inside the <code>multifarious/</code> subproject in the above example, it would be placed as a subdirectory underneath that subproject (at the same level as <code>public/</code> and <code>src/</code>).</p> - -<p>Of course, this means that you will have to build <code>acmelib</code> manually on all platforms before launching the Mozilla build. But at least you can then refer to include files and import libraries from your component using relative paths.</p> - -<h4 id="Building_for_Multiple_Platforms">Building for Multiple Platforms</h4> - -<p>TODO</p> - -<div class="originaldocinfo"> -<h2 id="Original_Document_Information">Original Document Information</h2> - -<ul> - <li>Author: Matthew Gertner - July 26, 2005.</li> - <li>Permission granted to migrate in Jan 2006, including permission to relicense under the CC:By-SA.</li> - <li>Original Source: <a class="external" href="http://www.allpeers.com/blog/creating-complex-firefox-extensions/" rel="freelink">http://www.allpeers.com/blog/creatin...ox-extensions/</a></li> -</ul> -</div> - -<p> </p> diff --git a/files/ja/mozilla/add-ons/firefox_for_android/index.html b/files/ja/mozilla/add-ons/firefox_for_android/index.html deleted file mode 100644 index 9adfb1d464..0000000000 --- a/files/ja/mozilla/add-ons/firefox_for_android/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Android用Firefoxのアドオン -slug: Mozilla/Add-ons/Firefox_for_Android -translation_of: Archive/Add-ons/Legacy_Firefox_for_Android ---- -<p>{{LegacyAddonsNotice}}{{AddonSidebar}}</p> - -<div class="note"> -<p>このページと、そのサブページは、古い技術を使った Android 用 Firefox のアドオン開発の方法を記しています。この技術は Firefox 57 で動作が停止します。 Android 用 Firefox のアドオン開発するのに <a href="https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions">WebExtensions</a> を使用可能です。</p> -</div> - -<p>既にデスクトップ版のFirefoxで動いているアドオンは<strong>修正を加えないとAndroid版で動かない</strong>ので注意してください</p> - -<ul> - <li>UIに可視的なXULはありません。なので、UIを作るためにoverlayを使用することはできません。</li> - <li><code>gBrowser</code>のようなオブジェクトや内部コードなどは存在しません。内部について学ぶにはAndroid用のFirefoxの <a class="external external-icon" href="https://dxr.mozilla.org/mozilla-central/source/mobile/android/chrome/content/browser.js" title="http://mxr.mozilla.org/mozilla-central/source/mobile/android/chrome/content/browser.js"><code>browser.js</code></a> ファイルを見てください。だいたい同じ低レイヤーな機能が存在しています。</li> - <li>ネイティブ Android UI を使用するための <code>nsIPromptService</code> や <code>nsIAlertsService</code> のようなサービスが実装されています。</li> - <li><a href="https://developer.mozilla.org/en/Extensions/Mobile/API/NativeWindow" title="en/Extensions/Mobile/NativeWindow"><code>NativeWindow</code></a> と呼ばれる、ネイティブ Android UI のパーツを操作する、シンプルなJS オブジェクトがあります。 </li> -</ul> - -<p>以下の記事はAndroid用のFirefoxの拡張機能を開発する手助けになります。加えてすべてのMozilla アプリケーションに適用できる <a class="internal" href="/ja/Add-ons" title="En/Extensions">general extension documentation</a> も参照してください。</p> - -<div class="column-container"> -<div class="column-half"> -<h3 id="チュートリアル">チュートリアル</h3> - -<dl> - <dt><a href="https://developer.mozilla.org/ja/Add-ons/Firefox_for_Android/Prerequisites">事前準備</a></dt> - <dd>アドオンを書いてデバイスに送り、直接つながっているデバイスでテストするための、あなたのデスクトップ側の設定です。</dd> - <dt><a href="https://developer.mozilla.org/ja/docs/Tools/Remote_Debugging/Debugging_Firefox_for_Android_with_WebIDE">WebIDEを使用してAndroid用Firefoxアドオンをデバッグする</a></dt> - <dd>前提条件のチュートリアルからの記事です。アドオンのデバッグやスニペットテストはWebIDEなしでは不可能です。</dd> - <dt><a href="https://developer.mozilla.org/ja/Add-ons/Firefox_for_Android/Walkthrough">Walkthrough</a></dt> - <dd>Android用のFirefoxのシンプルなアドオンを開発し、パッケージ化して、インストールします。</dd> - <dt><a href="https://developer.mozilla.org/ja/Add-ons/Firefox_for_Android/Firefox_Hub_Walkthrough">Firefox Hub Walkthrough</a></dt> - <dd>Android用のFirefoxのホームページにコンテンツを加えるFirefox Hubアドオンをどのようにして開発するかの解説です。</dd> - <dt><a href="https://developer.mozilla.org/ja/Add-ons/SDK/Tutorials/Mobile_development">Add-on SDK</a></dt> - <dd>Add-on SDKを使用したAndroid用のFirefoxのアドオンを開発する方法です。</dd> -</dl> - -<h3 id="サンプルコード">サンプルコード</h3> - -<dl> - <dt> </dt> - <dt><a href="https://developer.mozilla.org/ja/Add-ons/Firefox_for_Android/Code_snippets">Code Snippets</a></dt> - <dd>一般的なタスクのためのコードサンプル。</dd> - <dt><a href="https://developer.mozilla.org/ja/Add-ons/Firefox_for_Android/Initialization_and_Cleanup">初期化とクリーンアップ</a></dt> - <dd>アドオンを開始時に初期化したり、シャットダウン時にクリーンアップする方法の解説です。</dd> - <dt><a href="https://github.com/mozilla/firefox-for-android-addons">Firefox for Android Add-ons Github Repo</a></dt> - <dd>Android用Firefoxのアドオンを作成する手助けとなる、JS モジュールやサンプルコード、ボイラープレートリポジトリのコレクションです。</dd> -</dl> -</div> - -<div class="column-half"> -<h3 id="API_リファレンス">API リファレンス</h3> - -<dl> - <dt><a class="internal" href="/ja/Add-ons/Firefox_for_Android/API/NativeWindow">NativeWindow</a></dt> - <dd>ネイティブ Androidの UI widgetを作成します。</dd> - <dt><a href="/ja/Add-ons/Firefox_for_Android/API/BrowserApp">BrowserApp</a></dt> - <dd>ブラウザーのタブとその内容にアクセスします。</dd> - <dt><a class="internal" href="/ja/Add-ons/Firefox_for_Android/API/Prompt.jsm">Prompt.jsm</a></dt> - <dd>ネイティブ Android の dialog を表示します。</dd> - <dt><a href="/ja/Add-ons/Firefox_for_Android/API/HelperApps.jsm">HelperApps.jsm</a></dt> - <dd>システムにインストールされているネイティブアプリを照会して起動します。</dd> - <dt><a href="/ja/Add-ons/Firefox_for_Android/API/Notifications.jsm">Notifications.jsm</a></dt> - <dd>Android システム通知用の拡張プロパティを使います。</dd> - <dt><a href="/ja/Add-ons/Firefox_for_Android/API/Home.jsm">Home.jsm</a></dt> - <dd>ホームページをカスタマイズします。</dd> - <dt><a href="/ja/Add-ons/Firefox_for_Android/API/HomeProvider.jsm">HomeProvider.jsm</a></dt> - <dd>ホームページに表示するデータを保存します。</dd> - <dt><a href="https://developer.mozilla.org/ja/Add-ons/Firefox_for_Android/API/PageActions.jsm">PageActions.jsm</a></dt> - <dd>URLバーにページ固有のアクションを表示します。</dd> - <dt><a href="https://developer.mozilla.org/ja/docs/Mozilla/JavaScript_code_modules/JNI.jsm">JNI.jsm</a></dt> - <dd>アドオンからネイティブ Java Android API をタップします。</dd> - <dt><a href="https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/Firefox_for_Android/API/Sound.jsm">Sound.jsm</a></dt> - <dd>ブラウザーから簡単に音を鳴らします。</dd> -</dl> -</div> -</div> diff --git a/files/ja/mozilla/add-ons/overlay_extensions/index.html b/files/ja/mozilla/add-ons/overlay_extensions/index.html deleted file mode 100644 index 1598fd8ca3..0000000000 --- a/files/ja/mozilla/add-ons/overlay_extensions/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Legacyアドオン -slug: Mozilla/Add-ons/Overlay_Extensions -translation_of: Archive/Add-ons/Overlay_Extensions ---- -<p>{{AddonSidebar}}</p> - -<p>このページは下記の機能を使っているGecko-baseのアプリケーションのアドオンを開発するための方法のドキュメントへのリンクです。</p> - -<ul> - <li>インターフェースを指定するためのXUL overlays</li> - <li><code>アプリケーションやコンテンツとの対話に</code><a href="/en-US/docs/XUL/tabbrowser"><code>tabbrowser</code></a>や<a href="/en-US/docs/Mozilla/JavaScript_code_modules">JavaScript modules</a>のような、特権コードが使用できるAPI。</li> -</ul> - -<p>Prior to Firefox 4, and the Gecko 2 engine that powers it, this was the only way to develop extensions. This methodology has largely been superseded by <a href="/en-US/docs/Extensions/Bootstrapped_extensions">restartless extensions</a>, and the <a href="/en-US/Add-ons/SDK">Add-on SDK</a>, which is built on top of them. The privileged JavaScript APIs described here can still be used in these newer types of add-ons.</p> - -<h2 id="XUL_School">XUL School</h2> - -<p><a href="/en-US/Add-ons/Overlay_Extensions/XUL_School">XUL School</a>は体系的なアドオン開発のチュートリアルです。これはfirefoxアドオン開発のチュートリアルですが、他のおおよそのGecko-baseのアプリケーションに応用できます。</p> - -<h2 id="その他の情報">その他の情報</h2> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Mozilla/Add-ons/Setting_up_extension_development_environment">Setting up your environment</a></dt> - <dd>拡張機能を開発するための環境設定です。</dd> - <dt><a href="/en-US/docs/XUL">XUL</a></dt> - <dd>XUL extensionを使ったユーザーインターフェースを記述するチュートリアルとリファレンスです。</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Code_snippets">Code snippets</a></dt> - <dd>Sample code for many of the things you'll want to do.</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Installing_extensions">Installing extensions</a></dt> - <dd>How to install an extension by copying the extension files into the application's install directory.</dd> - <dt><a href="/en-US/Add-ons/Overlay_extensions/Firefox_addons_developer_guide">Firefox add-ons developer guide</a></dt> - <dd>オーバーレイextension(bootstrap extensionかな?)の開発ガイドです。</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules">JavaScript code modules</a></dt> - <dd>アドオン開発者の使用できるJavaScript モジュールです。</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Inline_Options">Extension preferences</a></dt> - <dd>How to specify the preferences for your extension that will appear in the Add-ons Manager.</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Extension_Packaging">Extension packaging</a></dt> - <dd>アドオンのパッケージングとインストールの方法です。</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Creating_Custom_Firefox_Extensions_with_the_Mozilla_Build_System">Binary Firefox extensions</a></dt> - <dd>Firefoxのバイナリ拡張を作成します。</dd> -</dl> -</div> -</div> - -<p> </p> diff --git a/files/ja/mozilla/add-ons/sdk/guides/content_scripts/index.html b/files/ja/mozilla/add-ons/sdk/guides/content_scripts/index.html deleted file mode 100644 index 071cf1fb6f..0000000000 --- a/files/ja/mozilla/add-ons/sdk/guides/content_scripts/index.html +++ /dev/null @@ -1,484 +0,0 @@ ---- -title: Content Scripts -slug: Mozilla/Add-ons/SDK/Guides/Content_Scripts -translation_of: Archive/Add-ons/Add-on_SDK/Guides/Content_Scripts ---- -<article id="wikiArticle"> -<p><span class="seoSummary">アドオンの多くはウェブページへアクセスし修正する必要があります。しかしアドオンのメインのコードは直接ウェブコンテンツにアクセスできません。 代わりにアドオン SDK は <em>content scripts </em>と呼ばれる別のスクリプトからウェブコンテンツにアクセスします。このページでは content scripts の開発・実装方法を記述します。</span></p> - -<p>SDK を扱う上で content scripts はあなたを混乱させてしまうかもしれませんが、おそらくそれを使わなければなりません。下記は5つの基本原則です:</p> - -<ul> - <li>"main.js" を含むアドオンのメインコードやその他の "lib" 以下のモジュールは、SDK の<a href="/en-US/Add-ons/SDK/High-Level_APIs">高水準</a>または<a href="/en-US/Add-ons/SDK/Low-Level_APIs">低水準</a>なAPIを利用できますが、ウェブコンテンツには直接アクセスできません</li> - <li>content scripts は<a href="/en-US/Add-ons/SDK/Guides/Two_Types_of_Scripts#API_Access_for_Add-on_Code_and_Content_Scripts"> SDK の API を使用できません</a> (no access to globals <code>exports</code>, <code>require</code>) が、ウェブコンテンツに直接アクセスできます</li> - <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod">page-mod</a> や <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs">tabs</a> のような content scripts を扱う SDK の API は、アドオンのメインコードから content scripts をウェブページにロードする機能を提供します</li> - <li>content scripts は文字列として読み込まれますが、アドオンの "data" ディレクトリ以下に別々のファイルとして保存します。jpm はデフォルトでは "data" を作らないので、 自分でディレクトリを作成し content scripts を置く必要があります</li> - <li>message-passing API でメインコードと content scripts とでお互いにコミュニケーションすることができます</li> -</ul> - -<p>This complete add-on illustrates all of these principles. Its "main.js" attaches a content script to the current tab using the <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs">tabs</a> module. In this case the content script is passed in as a string. The content script simply replaces the content of the page:</p> - -<pre class="brush: js">// main.js -var tabs = require("sdk/tabs"); -var contentScriptString = 'document.body.innerHTML = "<h1>this page has been eaten</h1>";' - -tabs.activeTab.attach({ - contentScript: contentScriptString -});</pre> - -<p>The following high-level SDK modules can use content scripts to modify web pages:</p> - -<ul> - <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod">page-mod</a>: enables you to attach content scripts to web pages that match a specific URL pattern.</li> - <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs">tabs</a>: exports a <code>Tab</code> object for working with a browser tab. The <code>Tab</code> object includes an <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#attach(options)"><code>attach()</code></a> function to attach a content script to the tab.</li> - <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/page-worker">page-worker</a>: lets you retrieve a web page without displaying it. You can attach content scripts to the page, to access and manipulate the page's DOM.</li> - <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/context-menu">context-menu</a>: use a content script to interact with the page in which the menu is invoked.</li> -</ul> - -<p>Additionally, some SDK user interface components - panel, sidebar, frame - are specified using HTML, and use separate scripts to interact with this content. In many ways these are like content scripts, but they're not the focus of this article. To learn about how to interact with the content for a given user interface module, please see the module-specific documentation: <a href="/en-US/Add-ons/SDK/High-Level_APIs/panel">panel</a>, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar">sidebar</a>, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_frame">frame</a>.</p> - -<p>Almost all the examples presented in this guide are available as complete, but minimal, add-ons in the <a href="https://github.com/mdn/addon-sdk-content-scripts">addon-sdk-content-scripts repository</a> on GitHub.</p> - -<h2 id="Loading_content_scripts">Loading content scripts</h2> - -<article id="wikiArticle"> -<p>You can load a single script by assigning a string to either the <code>contentScript</code> or the <code>contentScriptFile</code> option. The <code>contentScript</code> option treats the string itself as a script:</p> - -<pre class="brush: js">// main.js - -var pageMod = require("sdk/page-mod"); -var contentScriptValue = 'document.body.innerHTML = ' + - ' "<h1>Page matches ruleset</h1>";'; - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScript: contentScriptValue -});</pre> - -<p>The <code>contentScriptFile</code> option treats the string as a resource:// URL pointing to a script file stored in your add-on's <code>data</code> directory. jpm doesn't make a "data" directory by default, so you must add it and put your content scripts in there.</p> - -<p>This add-on supplies a URL pointing to the file "content-script.js", located in the <code>data</code> subdirectory under the add-on's root directory:</p> - -<pre class="brush: js">// main.js - -var data = require("sdk/self").data; -var pageMod = require("sdk/page-mod"); - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScriptFile: data.url("content-script.js") -});</pre> - -<pre class="brush: js">// content-script.js - -document.body.innerHTML = "<h1>Page matches ruleset</h1>";</pre> - -<div class="note"> -<p>From Firefox 34 onwards, you can use "./content-script.js" as an alias for self.data.url("content-script.js"). So you can rewrite the above main.js code like this:</p> - -<pre class="brush: js">var pageMod = require("sdk/page-mod"); - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScriptFile: "./content-script.js" -}); -</pre> -</div> - -<div class="warning"> -<p>Unless your content script is extremely simple and consists only of a static string, don't use <code>contentScript</code>: if you do, you may have problems getting your add-on approved on AMO.</p> - -<p>Instead, keep the script in a separate file and load it using <code>contentScriptFile</code>. This makes your code easier to maintain, secure, debug and review.</p> -</div> - -<p>You can load multiple scripts by passing an array of strings to either <code>contentScript</code> or <code>contentScriptFile</code>:</p> - -<pre class="brush: js">// main.js - -var tabs = require("sdk/tabs"); - -tabs.on('ready', function(tab) { - tab.attach({ - contentScript: ['document.body.style.border = "5px solid red";', 'window.alert("hi");'] - }); -}); -</pre> - -<pre class="brush: js">// main.js - -var data = require("sdk/self").data; -var pageMod = require("sdk/page-mod"); - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScriptFile: [data.url("jquery.min.js"), data.url("my-content-script.js")] -});</pre> - -<p>If you do this, the scripts can interact directly with each other, just like scripts loaded by the same web page.</p> - -<p>You can also use <code>contentScript</code> and <code>contentScriptFile</code> together. If you do this, scripts specified using <code>contentScriptFile</code> are loaded before those specified using <code>contentScript</code>. This enables you to load a JavaScript library like jQuery by URL, then pass in a simple script inline that can use jQuery:</p> - -<pre class="brush: js">// main.js - -var data = require("sdk/self").data; -var pageMod = require("sdk/page-mod"); - -var contentScriptString = '$("body").html("<h1>Page matches ruleset</h1>");'; - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScript: contentScriptString, - contentScriptFile: data.url("jquery.js") -});</pre> - -<div class="warning"> -<p>Unless your content script is extremely simple and consists only of a static string, don't use <code>contentScript</code>: if you do, you may have problems getting your add-on approved on AMO.</p> - -<p>Instead, keep the script in a separate file and load it using <code>contentScriptFile</code>. This makes your code easier to maintain, secure, debug and review.</p> -</div> - -<h3 id="Controlling_when_to_attach_the_script">Controlling when to attach the script</h3> - -<p>The <code>contentScriptWhen</code> option specifies when the content script(s) should be loaded. It takes one of:</p> - -<ul> - <li><code>"start"</code>: load the scripts immediately after the document element for the page is inserted into the DOM. At this point the DOM content hasn't been loaded yet, so the script won't be able to interact with it.</li> - <li><code>"ready"</code>: load the scripts after the DOM for the page has been loaded: that is, at the point the <a href="https://developer.mozilla.org/en/Gecko-Specific_DOM_Events">DOMContentLoaded</a> event fires. At this point, content scripts are able to interact with the DOM content, but externally-referenced stylesheets and images may not have finished loading.</li> - <li><code>"end"</code>: load the scripts after all content (DOM, JS, CSS, images) for the page has been loaded, at the time the <a href="https://developer.mozilla.org/en/DOM/window.onload">window.onload event</a> fires.</li> -</ul> - -<p>The default value is <code>"end"</code>.</p> - -<p>Note that <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#attach(options)"><code>tab.attach()</code></a> doesn't accept contentScriptWhen, because it's generally called after the page has loaded.</p> - -<h3 id="Passing_configuration_options">Passing configuration options</h3> - -<p>The <code>contentScriptOptions</code> is a JSON object that is exposed to content scripts as a read-only value under the <code><a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/self">self</a>.options</code> property:</p> - -<pre class="brush: js">// main.js - -var tabs = require("sdk/tabs"); - -tabs.on('ready', function(tab) { - tab.attach({ - contentScript: 'window.alert(self.options.message);', - contentScriptOptions: {"message" : "hello world"} - }); -});</pre> - -<p>Any kind of jsonable value (object, array, string, etc.) can be used here.</p> - -<h2 id="Accessing_the_DOM">Accessing the DOM</h2> - -<p>Content scripts can access the DOM of a page, of course, just like any scripts that the page has loaded (page scripts). But content scripts are insulated from page scripts:</p> - -<ul> - <li>content scripts don't see any JavaScript objects added to the page by page scripts</li> - <li>if a page script has redefined the behavior of some DOM object, the content script sees the original behavior.</li> -</ul> - -<p>The same applies in reverse: page scripts can't see JavaScript objects added by content scripts.</p> - -<p>For example, consider a page that adds a variable <code>foo</code> to the <code>window</code> object using a page script:</p> - -<pre class="brush: html"><!DOCTYPE html"> -<html> - <head> - <script> - window.foo = "hello from page script" - </script> - </head> -</html></pre> - -<p>Another script loaded into the page after this script will be able to access <code>foo</code>. But a content script will not:</p> - -<pre class="brush: js">// main.js - -var tabs = require("sdk/tabs"); -var mod = require("sdk/page-mod"); -var self = require("sdk/self"); - -var pageUrl = self.data.url("page.html") - -var pageMod = mod.PageMod({ - include: pageUrl, - contentScript: "console.log(window.foo);" -}) - -tabs.open(pageUrl);</pre> - -<pre>console.log: my-addon: null -</pre> - -<p>There are good reasons for this insulation. First, it means that content scripts don't leak objects to web pages, potentially opening up security holes. Second, it means that content scripts can create objects without worrying about whether they might clash with objects added by page scripts.</p> - -<p>This insulation means that, for example, if a web page loads the jQuery library, then the content script won't be able to see the <code>jQuery</code> object added by the library - but the content script can add its own <code>jQuery</code> object, and it won't clash with the page script's version.</p> - -<h3 id="Interacting_with_page_scripts">Interacting with page scripts</h3> - -<p>Usually the insulation between content scripts and page scripts is what you want. But sometimes you might want to interact with page scripts: you might want to share objects between content scripts and page scripts or to send messages between them. If you need to do this, read about <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/Interacting_with_page_scripts">interacting with page scripts</a>.</p> - -<h3 id="Event_listeners">Event listeners</h3> - -<p>You can listen for DOM events in a content script just as you can in a normal page script, but there are two important differences:</p> - -<p>First, if you define an event listener by passing it as a string into <a href="https://developer.mozilla.org/en/DOM/element.setAttribute"><code>setAttribute()</code></a>, then the listener is evaluated in the page's context, so it will not have access to any variables defined in the content script.</p> - -<p>For example, this content script will fail with the error "theMessage is not defined":</p> - -<pre class="brush: js">var theMessage = "Hello from content script!"; -anElement.setAttribute("onclick", "alert(theMessage);");</pre> - -<p>Second, if you define an event listener by direct assignment to a <a href="/en-US/docs/Web/API/GlobalEventHandlers">global event handler</a> like <code>onclick</code>, then the assignment might be overridden by the page. For example, here's an add-on that tries to add a click handler by assignment to <code>window.onclick</code>:</p> - -<pre class="brush: js">var myScript = "window.onclick = function() {" + - " console.log('unsafewindow.onclick: ' + window.document.title);" + - "}"; - -require("sdk/page-mod").PageMod({ - include: "*", - contentScript: myScript, - contentScriptWhen: "start" -});</pre> - -<p>This will work fine on most pages, but will fail on pages which also assign to <code>onclick</code>:</p> - -<pre class="brush: html"><html> - <head> - </head> - <body> - <script> - window.onclick = function() { - window.alert("it's my click now!"); - } - </script> - </body> -</html></pre> - -<p>For these reasons, it's better to add event listeners using <a href="https://developer.mozilla.org/en/DOM/element.addEventListener"><code>addEventListener()</code></a>, defining the listener as a function:</p> - -<pre class="brush: js">var theMessage = "Hello from content script!"; - -anElement.onclick = function() { - alert(theMessage); -}; - -anotherElement.addEventListener("click", function() { - alert(theMessage); -});</pre> - -<h2 id="Communicating_with_the_add-on">Communicating with the add-on</h2> - -<p>To enable add-on scripts and content scripts to communicate with each other, each end of the conversation has access to a <code>port</code> object.</p> - -<ul> - <li>to send messages from one side to the other, use <code>port.emit()</code></li> - <li>to receive messages sent from the other side, use <code>port.on()</code></li> -</ul> - -<p><img alt="" src="https://mdn.mozillademos.org/files/7873/content-scripting-overview.png" style="display: block; margin-left: auto; margin-right: auto;">Messages are asynchronous: that is, the sender does not wait for a reply from the recipient but just emits the message and continues processing.</p> - -<p>Here's a simple add-on that sends a message to a content script using <code>port</code>:</p> - -<pre class="brush: js">// main.js - -var tabs = require("sdk/tabs"); -var self = require("sdk/self"); - -tabs.on("ready", function(tab) { - worker = tab.attach({ - contentScriptFile: self.data.url("content-script.js") - }); - worker.port.emit("alert", "Message from the add-on"); -}); - -tabs.open("http://www.mozilla.org");</pre> - -<pre class="brush: js">// content-script.js - -self.port.on("alert", function(message) { - window.alert(message); -});</pre> - -<div class="note"> -<p>The context-menu module doesn't use the communication model described here. To learn about communicating with content scripts loaded using context-menu, see the <a href="/en-US/Add-ons/SDK/High-Level_APIs/context-menu">context-menu documentation</a>. </p> -</div> - -<h3 id="Accessing_port_in_the_content_script">Accessing <code>port</code> in the content script</h3> - -<p>In the content script the <code>port</code> object is available as a property of the global <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/self"><code>self</code></a> object. So to emit a message from a content script:</p> - -<pre class="brush: js">self.port.emit("myContentScriptMessage", myContentScriptMessagePayload);</pre> - -<p>To receive a message from the add-on code:</p> - -<pre class="brush: js">self.port.on("myAddonMessage", function(myAddonMessagePayload) { - // Handle the message -});</pre> - -<div class="note"> -<p><span>Note that the global <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/self"><code>self</code></a> object is completely different from the <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/self"><code>self</code> module</a>, which provides an API for an add-on to access its data files and ID.</span></p> -</div> - -<h3 id="Accessing_port_in_the_add-on_script">Accessing <code>port</code> in the add-on script</h3> - -<p>In the add-on code, the channel of communication between the add-on and a particular content script context is encapsulated by the <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/content_worker"><code>worker</code></a> object. So the <code>port</code> object for communicating with a content script is a property of the corresponding <code>worker</code> object.</p> - -<p>However, the worker is not exposed to add-on code in quite the same way in all modules.</p> - -<h4 id="From_page-worker">From <code>page-worker</code></h4> - -<p>The <code>page-worker</code> object integrates the worker API directly. So to receive messages from a content script associated with a <code>page-worker</code> you use <code>pageWorker.port.on()</code>:</p> - -<pre class="brush: js">// main.js - -var pageWorkers = require("sdk/page-worker"); -var self = require("sdk/self"); - -var pageWorker = require("sdk/page-worker").Page({ - contentScriptFile: self.data.url("content-script.js"), - contentURL: "http://en.wikipedia.org/wiki/Internet" -}); - -pageWorker.port.on("first-para", function(firstPara) { - console.log(firstPara); -});</pre> - -<p>To emit user-defined messages from your add-on you can just call <code>pageWorker.port.emit()</code>:</p> - -<pre class="brush: js">// main.js - -var pageWorkers = require("sdk/page-worker"); -var self = require("sdk/self"); - -pageWorker = require("sdk/page-worker").Page({ - contentScriptFile: self.data.url("content-script.js"), - contentURL: "http://en.wikipedia.org/wiki/Internet" -}); - -pageWorker.port.on("first-para", function(firstPara) { - console.log(firstPara); -}); - -pageWorker.port.emit("get-first-para");</pre> - -<pre class="brush: js">// content-script.js - -self.port.on("get-first-para", getFirstPara); - -function getFirstPara() { - var paras = document.getElementsByTagName("p"); - if (paras.length > 0) { - var firstPara = paras[0].textContent; - self.port.emit("first-para", firstPara); - } -}</pre> - -<h4 id="From_page-mod">From <code>page-mod</code></h4> - -<p>A single <code>page-mod</code> object might attach its scripts to multiple pages, each with its own context in which the content scripts are executing, so it needs a separate channel (worker) for each page.</p> - -<p>So <code>page-mod</code> does not integrate the worker API directly. Instead, each time a content script is attached to a page, the page-mod emits an <code>attach</code> event, whose listener is passed the worker for that context. By supplying a listener to <code>attach</code> you can access the <code>port</code> object for content scripts attached to that page by this page-mod:</p> - -<pre class="brush: js">// main.js - -var pageMods = require("sdk/page-mod"); -var self = require("sdk/self"); - -var pageMod = pageMods.PageMod({ - include: ['*'], - contentScriptFile: self.data.url("content-script.js"), - onAttach: startListening -}); - -function startListening(worker) { - worker.port.on('click', function(html) { - worker.port.emit('warning', 'Do not click this again'); - }); -}</pre> - -<pre class="brush: js">// content-script.js - -window.addEventListener('click', function(event) { - self.port.emit('click', event.target.toString()); - event.stopPropagation(); - event.preventDefault(); -}, false); - -self.port.on('warning', function(message) { - window.alert(message); -}); -</pre> - -<p>In the add-on above there are two messages:</p> - -<ul> - <li><code>click</code> is sent from the page-mod to the add-on, when the user clicks an element in the page</li> - <li><code>warning</code> sends a silly string back to the page-mod</li> -</ul> - -<h4 id="From_Tab.attach()">From <code>Tab.attach()</code></h4> - -<p>The <code>Tab.attach()</code> method returns the worker you can use to communicate with the content script(s) you attached.</p> - -<p>This add-on adds a button to Firefox: when the user clicks the button, the add-on attaches a content script to the active tab, sends the content script a message called "my-addon-message", and listens for a response called "my-script-response":</p> - -<pre class="brush: js">//main.js - -var tabs = require("sdk/tabs"); -var buttons = require("sdk/ui/button/action"); -var self = require("sdk/self"); - -buttons.ActionButton({ - id: "attach-script", - label: "Attach the script", - icon: "./icon-16.png", - onClick: attachScript -}); - -function attachScript() { - var worker = tabs.activeTab.attach({ - contentScriptFile: self.data.url("content-script.js") - }); - worker.port.on("my-script-response", function(response) { - console.log(response); - }); - worker.port.emit("my-addon-message", "Message from the add-on"); -} -</pre> - -<pre class="brush: js">// content-script.js - -self.port.on("my-addon-message", handleMessage); - -function handleMessage(message) { - alert(message); - self.port.emit("my-script-response", "Response from content script"); -}</pre> - -<h3 id="The_port_API">The port API</h3> - -<p>See the <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/port">reference page for the <code>port</code> object</a>.</p> -</article> - -<h3 id="The_postMessage_API">The postMessage API</h3> - -<p>Before the <code>port</code> object was added, add-on code and content scripts communicated using a different API:</p> - -<ul> - <li>the content script called <code>self.postMessage()</code> to send and <code>self.on()</code> to receive</li> - <li>the add-on script called <code>worker.postMessage()</code> to send and <code>worker.on()</code>to receive</li> -</ul> - -<p>The API is still available and <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/using_postMessage">documented</a>, but there's no reason to use it instead of the <code>port</code> API described here. The exception is the <a href="/en-US/Add-ons/SDK/High-Level_APIs/context-menu">context-menu</a> module, which still uses postMessage.</p> - -<h3 id="Content_script_to_content_script">Content script to content script</h3> - -<p>Content scripts can only communicate with each other directly if they have been loaded into the same context. For example, if a single call to <code>Tab.attach()</code> attaches two content scripts, then they can see each other directly, just as page scripts loaded by the same page can. But if you call <code>Tab.attach()</code> twice, attaching a content script each time, then these content scripts can't communicate with each other. You must then relay messages through the main add-on code using the port API.</p> - -<h2 id="Cross-domain_content_scripts">Cross-domain content scripts</h2> - -<p>By default, content scripts don't have any cross-domain privileges. In particular, they can't access content hosted in an <code>iframe</code>, if that content is served from a different domain, or make cross-domain XMLHttpRequests.</p> - -<p>However, you can enable these features for specific domains by adding them to your add-on's <a href="/en-US/Add-ons/SDK/Tools/package_json">package.json</a> under the <code>"cross-domain-content"</code> key, which itself lives under the <code>"permissions"</code> key. See the article on <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/Cross_Domain_Content_Scripts">cross-domain content scripts</a>.</p> -</article> diff --git a/files/ja/mozilla/add-ons/sdk/guides/index.html b/files/ja/mozilla/add-ons/sdk/guides/index.html deleted file mode 100644 index 0a6a4422d6..0000000000 --- a/files/ja/mozilla/add-ons/sdk/guides/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: ガイド -slug: Mozilla/Add-ons/SDK/Guides -translation_of: Archive/Add-ons/Add-on_SDK/Guides ---- -<p>This page lists more theoretical in-depth articles about the SDK.</p> -<hr> -<h3 id="Contributor's_guide"><a name="contributors-guide">Contributor's guide</a></h3> -<div class="column-container"> - <div class="column-half"> - <dl> - <dt> - <a href="Guides/Getting_Started">Getting Started</a></dt> - <dd> - Learn how to contribute to the SDK: getting the code, opening/taking a bug, filing a patch, getting reviews, and getting help.</dd> - <dt> - <a href="Guides/Modules">Modules</a></dt> - <dd> - Learn about the module system used by the SDK (which is based on the CommonJS specification), how sandboxes and compartments can be used to improve security, and about the built-in SDK module loader, known as Cuddlefish.</dd> - <dt> - <a href="Guides/Classes_and_Inheritance">Classes and Inheritance</a></dt> - <dd> - Learn how classes and inheritance can be implemented in JavaScript, using constructors and prototypes, and about the helper functions provided by the SDK to simplify this.</dd> - </dl> - </div> - <div class="column-half"> - <dl> - <dt> - <a href="Guides/Private_Properties">Private Properties</a></dt> - <dd> - Learn how private properties can be implemented in JavaScript using prefixes, closures, and WeakMaps, and how the SDK supports private properties by using namespaces (which are a generalization of WeakMaps).</dd> - <dt> - <a href="Guides/Content_Processes">Content Processes</a></dt> - <dd> - The SDK was designed to work in an environment where the code to manipulate web content runs in a different process from the main add-on code. This article highlights the main features of that design.</dd> - </dl> - </div> -</div> -<hr> -<h3 id="SDK_infrastructure"><a name="sdk-infrastructure">SDK infrastructure</a></h3> -<div class="column-container"> - <div class="column-half"> - <dl> - <dt> - <a href="Guides/Module_structure_of_the_SDK">Module structure of the SDK</a></dt> - <dd> - The SDK, and add-ons built using it, are of composed from reusable JavaScript modules. This explains what these modules are, how to load modules, and how the SDK's module tree is structured.</dd> - <dt> - <a href="Guides/SDK_API_Lifecycle">SDK API lifecycle</a></dt> - <dd> - Definition of the lifecycle for the SDK's APIs, including the stability ratings for APIs.</dd> - </dl> - </div> - <div class="column-half"> - <dl> - <dt> - <a href="Guides/Program_ID">Program ID</a></dt> - <dd> - The Program ID is a unique identifier for your add-on. This guide explains how it's created, what it's used for and how to define your own.</dd> - <dt> - <a href="Guides/Firefox_Compatibility">Firefox compatibility</a></dt> - <dd> - Working out which Firefox releases a given SDK release is compatible with, and dealing with compatibility problems.</dd> - </dl> - </div> -</div> -<hr> -<h3 id="SDK_idioms"><a name="sdk-idioms">SDK idioms</a></h3> -<div class="column-container"> - <div class="column-half"> - <dl> - <dt> - <a href="Guides/Working_with_Events">Working With Events</a></dt> - <dd> - Write event-driven code using the the SDK's event emitting framework.</dd> - <dt> - <a href="Guides/Content_Scripts">Content scripts guide</a></dt> - <dd> - An overview of content scripts, including: what they are, what they can do, how to load them, how to communicate with them.</dd> - </dl> - </div> - <div class="column-half"> - <dl> - <dt> - <a href="Guides/Two_Types_of_Scripts">Two Types of Scripts</a></dt> - <dd> - This article explains the differences between the APIs available to your main add-on code and those available to content scripts.</dd> - </dl> - </div> -</div> -<hr> -<h3 id="XUL_migration"><a name="xul-migration">XUL migration</a></h3> -<div class="column-container"> - <div class="column-half"> - <dl> - <dt> - <a href="Guides/XUL_Migration_Guide">XUL Migration Guide</a></dt> - <dd> - Techniques to help port a XUL add-on to the SDK.</dd> - <dt> - <a href="Guides/XUL_vs_SDK">XUL versus the SDK</a></dt> - <dd> - A comparison of the strengths and weaknesses of the SDK, compared to traditional XUL-based add-ons.</dd> - </dl> - </div> - <div class="column-half"> - <dl> - <dt> - <a href="Guides/Porting_the_Library_Detector">Porting Example</a></dt> - <dd> - A walkthrough of porting a relatively simple XUL-based add-on to the SDK.</dd> - </dl> - </div> -</div> -<p> </p> diff --git a/files/ja/mozilla/add-ons/sdk/index.html b/files/ja/mozilla/add-ons/sdk/index.html deleted file mode 100644 index d1a2754a26..0000000000 --- a/files/ja/mozilla/add-ons/sdk/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Add-on SDK -slug: Mozilla/Add-ons/SDK -translation_of: Archive/Add-ons/Add-on_SDK ---- -<p>Add-on SDKを使って、JavaScript、HTML、CSSなどのウェブ技術を用いたFirefoxのアドオンを作成することができます。SDKにはアドオンを作成するためのJavaScript APIや、アドオンの作成、実行、テスト、そしてパッケージングを行うためのツールが含まれています。</p> -<hr> -<h3 id="チュートリアル">チュートリアル</h3> -<div class="column-container"> - <div class="column-half"> - <dl> - <dt> - <a href="/en-US/Add-ons/SDK/Tutorials#getting-started">はじめに</a></dt> - <dd> - <a href="/en-US/Add-ons/SDK/Tutorials/Installation">SDKのインストール方法</a>と、アドオンの開発、テストおよびパッケージングのための<a href="/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">cfxツールの使い方</a>について。</dd> - <dt> - <a href="/en-US/Add-ons/SDK/Tutorials#interact-with-the-browser">ブラウザと対話する</a></dt> - <dd> - <a href="/en-US/Add-ons/SDK/Tutorials/Open_a_Web_Page">ウェブページを開き</a>、<a href="/en-US/Add-ons/SDK/Tutorials/Listen_For_Page_Load">ページが読み込まれたことを確認し</a>、 <a href="/en-US/Add-ons/SDK/Tutorials/List_Open_Tabs">開いているタブの一覧を取得</a>してみましょう。</dd> - <dt> - <a href="/en-US/Add-ons/SDK/Tutorials#development-techniques">開発のためのテクニック</a></dt> - <dd> - <a href="/en-US/Add-ons/SDK/Tutorials/Unit_testing">ユニットテスト</a>、 <a href="/en-US/Add-ons/SDK/Tutorials/Logging">ログの出力</a>、<a href="/en-US/Add-ons/SDK/Tutorials/Creating_Reusable_Modules">再利用可能なモジュールの作成</a>、 <a href="/en-US/Add-ons/SDK/Tutorials/l10n">ローカライズ</a>、 そして<a href="/en-US/Add-ons/SDK/Tutorials/Mobile_development">モバイル向けの開発</a>などの、アドオン開発のための一般的なテクニックについて学びましょう。</dd> - </dl> - </div> - <div class="column-half"> - <dl> - <dt> - <a href="/en-US/Add-ons/SDK/Tutorials#create-user-interfaces">ユーザーインターフェースの作成 </a></dt> - <dd> - <a href="/en-US/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar">ツールバーボタン</a>、 <a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Context_Menu_Item">コンテキストメニュー</a>、<a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox">メニュー項目</a>、そして<a href="/en-US/Add-ons/SDK/Tutorials/Display_a_Popup">ダイアログ</a>などの、ユーザーインターフェースの構成要素を作成しましょう。</dd> - <dt> - <a href="/en-US/Add-ons/SDK/Tutorials#modify-web-pages">ウェブページを変化させる</a></dt> - <dd> - <a href="/en-US/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL">特性のパターンにマッチした</a><a href="/en-US/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL">U</a><a href="/en-US/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL">RL</a>のページや、<a href="/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">特性のタブに表示されているページ</a>の内容を修正してみましょう。</dd> - <dt> - <a href="/en-US/Add-ons/SDK/Tutorials/Annotator">まとめ</a></dt> - <dd> - Annotatorアドオンを例とした、アドオン開発の概略。</dd> - </dl> - </div> -</div> -<hr> -<h3 id="ガイド">ガイド</h3> -<div class="column-container"> - <div class="column-half"> - <dl> - <dt> - <a href="/en-US/Add-ons/SDK/Guides#contributors-guide">コントリビューターズガイド</a></dt> - <dd> - <a href="/en-US/Add-ons/SDK/Guides/Getting_Started">SDKへのコントリビュートの始め方</a>をお知らせします。また、<a href="/en-US/Add-ons/SDK/Guides/Modules">モジュール</a>や<a href="/en-US/Add-ons/SDK/Guides/Classes_and_Inheritance">クラスと継承</a>、<a href="/en-US/Add-ons/SDK/Guides/Private_Properties">プライベートプロパティ</a>、そして<a href="/en-US/Add-ons/SDK/Guides/Content_Processes">コンテンツの処理</a>などの、SDKのコードで使われている最も重要な手法についてお知らせします。</dd> - <dt> - <a href="/en-US/Add-ons/SDK/Guides#sdk-infrastructure">SDKの下部構造</a></dt> - <dd> - SDKの根底にあるテクノロジーについて。<a href="/en-US/Add-ons/SDK/Guides/Module_structure_of_the_SDK">モジュール</a>、<a href="/en-US/Add-ons/SDK/Guides/Program_ID">プログラムID</a>、<a href="/en-US/Add-ons/SDK/Guides/Firefox_Compatibility">Firefoxの互換性</a>を定義する規則など。</dd> - <dt> - <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">Content script</a></dt> - <dd> - <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">content scriptの扱い方</a>についての詳細なガイド。<a href="/en-US/Add-ons/SDK/Guides/Loading_content_scripts">content scriptの読み込み</a>、<a href="/en-US/Add-ons/SDK/Guides/Accessing_the_DOM">DOMへのアクセス</a>、<a href="/en-US/Add-ons/SDK/Guides/Communicating_with_other_scripts">content script同士またはほかのアドオンとのやり取りの方法</a>など。</dd> - </dl> - </div> - <div class="column-half"> - <dl> - <dt> - <a href="/en-US/Add-ons/SDK/Guides#sdk-idioms">SDKのイディオム</a></dt> - <dd> - SDKにおける<a href="/en-US/Add-ons/SDK/Guides/Working_with_Events">イベントの扱い方</a>、および<a href="/en-US/Add-ons/SDK/Guides/Two_Types_of_Scripts">add-on scriptとcontent scriptの区別</a>について。</dd> - <dt> - <a href="/en-US/Add-ons/SDK/Guides/XUL_Migration_Guide">XULからのマイグレーション</a></dt> - <dd> - <a href="/en-US/Add-ons/SDK/Guides/XUL_Migration_Guide">XULで作成されたアドオンをSDKに移植する</a>ためのガイドです。 <a href="/en-US/Add-ons/SDK/Guides/XUL_vs_SDK">二つのツールセットの比較</a>や<a href="/en-US/Add-ons/SDK/Guides/Porting_the_Library_Detector">移植の実施例</a>を含みます。</dd> - </dl> - </div> -</div> -<hr> -<h3 id="リファレンス">リファレンス</h3> -<div class="column-container"> - <div class="column-half"> - <dl> - <dt> - <a href="/en-US/Add-ons/SDK/High-Level_APIs">高レベルAPI</a></dt> - <dd> - SDKの高レベルなAPIについてのドキュメント。</dd> - <dt> - <a href="/en-US/Add-ons/SDK/Tools">ツール</a></dt> - <dd> - アドオンの開発、テストおよびパッケージングに利用する<a href="/en-US/Add-ons/SDK/Tools/cfx">cfxツール</a>、ログの出力に利用する<a href="/en-US/Add-ons/SDK/Tools/console">console</a>オブジェクト、および<a href="/en-US/Add-ons/SDK/Tools/package_json">package.json</a>についてのドキュメント。</dd> - </dl> - </div> - <div class="column-half"> - <dl> - <dt> - <a href="/en-US/Add-ons/SDK/Low-Level_APIs">低レベルAPI</a></dt> - <dd> - SDKの低レベルなAPIについてのドキュメント。</dd> - </dl> - </div> -</div> -<p> </p> diff --git a/files/ja/mozilla/add-ons/sdk/tutorials/display_a_popup/index.html b/files/ja/mozilla/add-ons/sdk/tutorials/display_a_popup/index.html deleted file mode 100644 index 32e4e520f8..0000000000 --- a/files/ja/mozilla/add-ons/sdk/tutorials/display_a_popup/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: ポップアップを表示する -slug: Mozilla/Add-ons/SDK/Tutorials/Display_a_Popup -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Display_a_Popup ---- -<div class="note"> - <p>このチュートリアルを行うには <a href="/ja/docs/Mozilla/Add-ons/SDK/Tutorials/Installation">SDK をインストール</a> し、<a href="/ja/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_started"><code>cfx</code> の基本</a> について学んでいる必要があります。</p> - <p>このチュートリアルは、Firefox 29 以降で使用可能な <a href="/ja/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_action">アクションボタン</a> API を使用しています。</p> -</div> -<p>ポップアップダイアログを表示するには、<a href="/ja/docs/Mozilla/Add-ons/SDK/High-Level_APIs/panel"><code>panel</code></a> モジュールを使用します。パネルのコンテンツは HTML を使用して定義されます。パネル内でコンテンツのスクリプトを実行できます: パネル内で実行されるスクリプトは、アドオンのメインコードには直接アクセスできませんが、パネルのスクリプトとアドオンのコードの間でメッセージを交換できます。</p> -<p>このチュートリアルでは、クリックした際にパネルを表示する <a href="/ja/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_action">アクションボタン</a> をツールバーに追加したアドオンを作成します。パネルには、<code><textarea></code> 要素のみが含まれています: <code>return</code> キーを押すと、<code><textarea></code> 内のコンテンツがメインのアドオンコードに送信されます。メインのアドオンコードでは、<a href="/ja/docs/Mozilla/Add-ons/SDK/Tutorials/Logging">メッセージをコンソールログに表示</a> します。</p> -<p><img alt="" src="https://mdn.mozillademos.org/files/7647/panel.png" style="display: block; margin-left: auto; margin-right: auto;">アドオンは 6 つのファイルで構成されています:</p> -<ul> - <li><code>main.js</code>: アドオンのメインコードで、ボタンとパネルを生成します</li> - <li><code>get-text.js</code>: パネルのコンテンツとインタラクティブなコンテンツスクリプトです</li> - <li><code>text-entry.html</code>: パネルのコンテンツそのもので、HTML で記述されます</li> - <li><code>icon-16.png</code>、<code>icon-32.png</code>、<code>icon-64.png</code>: 3 つの異なるサイズのボタン用アイコンです</li> -</ul> -<p>"main.js" は以下のようになっています:</p> -<pre class="brush: js">var data = require("sdk/self").data; -// Construct a panel, loading its content from the "text-entry.html" -// file in the "data" directory, and loading the "get-text.js" script -// into it. -var text_entry = require("sdk/panel").Panel({ - contentURL: data.url("text-entry.html"), - contentScriptFile: data.url("get-text.js") -}); - -// Create a button -require("sdk/ui/button/action").ActionButton({ - id: "show-panel", - label: "Show Panel", - icon: { - "16": "./icon-16.png", - "32": "./icon-32.png", - "64": "./icon-64.png" - }, - onClick: handleClick -}); - -// Show the panel when the user clicks the button. -function handleClick(state) { - text_entry.show(); -} - -// When the panel is displayed it generated an event called -// "show": we will listen for that event and when it happens, -// send our own "show" event to the panel's script, so the -// script can prepare the panel for display. -text_entry.on("show", function() { - text_entry.port.emit("show"); -}); - -// Listen for messages called "text-entered" coming from -// the content script. The message payload is the text the user -// entered. -// In this implementation we'll just log the text to the console. -text_entry.port.on("text-entered", function (text) { - console.log(text); - text_entry.hide(); -});</pre> -<p>コンテンツスクリプト "get-text.js" は、以下のようになっています:</p> -<div> - <pre class="brush: js">// When the user hits return, send the "text-entered" -// message to main.js. -// The message payload is the contents of the edit box. -var textArea = document.getElementById("edit-box"); -textArea.addEventListener('keyup', function onkeyup(event) { - if (event.keyCode == 13) { - // Remove the newline. - text = textArea.value.replace(/(\r\n|\n|\r)/gm,""); - self.port.emit("text-entered", text); - textArea.value = ''; - } -}, false); -// Listen for the "show" event being sent from the -// main add-on code. It means that the panel's about -// to be shown. -// -// Set the focus to the text area so the user can -// just start typing. -self.port.on("show", function onShow() { - textArea.focus(); -});</pre> - <div> - </div> -</div> -<p>そして、"text-entry.html" ファイルで <code><textarea></code> 要素を定義します:</p> -<div> - <div> - <pre class="brush: html"><html> -<head> - <style type="text/css" media="all"> - textarea { - margin: 10px; - } - body { - background-color: gray; - } - </style> - </head> -<body> - <textarea rows="13" cols="33" id="edit-box"></textarea> - </body> -</html></pre> - <div> - </div> - </div> -</div> -<p>3 種類のアイコンファイルを "data" ディレクトリに保存します:</p> -<table class="standard-table"> - <tbody> - <tr> - <td><img alt="" src="https://mdn.mozillademos.org/files/7635/icon-16.png" style="width: 16px; height: 16px;"></td> - <td>icon-16.png</td> - </tr> - <tr> - <td><img alt="" src="https://mdn.mozillademos.org/files/7637/icon-32.png" style="width: 32px; height: 32px;"></td> - <td>icon-32.png</td> - </tr> - <tr> - <td><img alt="" src="https://mdn.mozillademos.org/files/7639/icon-64.png" style="width: 64px; height: 64px;"></td> - <td>icon-64.png</td> - </tr> - </tbody> -</table> -<p>試してください: "main.js" をアドオン内の <code>lib</code> ディレクトリに保存し、他の 5 つのファイルをアドオン内の<code>data</code> ディレクトリに保存してください:</p> -<pre>my-addon/ - data/ - get-text.js - icon-16.png - icon-32.png - icon-64.png - text-entry.html - lib/ - main.js -</pre> -<p>アドオンを実行し、ボタンをクリックすると、パネルが表示されます。テキストを入力し、"return" を押すと、コンソールに出力されます。</p> -<p>Firefox 30 以降では、<a href="/ja/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">トグルボタン</a> を使用すると、<a href="/ja/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_toggle#Attaching_panels_to_buttons"> ボタンからパネルを呼び出せます</a>。</p> -<h2 id="詳しく学ぶ">詳しく学ぶ</h2> -<p><code>panel</code> モジュールについてさらに学ぶには、<a href="/ja/docs/Mozilla/Add-ons/SDK/High-Level_APIs/panel"><code>panel</code> API リファレンス</a> をご覧ください。</p> -<p>ボタンについてさらに学ぶには、<a href="/ja/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_action">アクションボタン</a> と <a href="/ja/docs/Mozilla/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">トグルボタン</a> API リファレンスをご覧ください。</p> diff --git a/files/ja/mozilla/add-ons/sdk/tutorials/getting_started/index.html b/files/ja/mozilla/add-ons/sdk/tutorials/getting_started/index.html deleted file mode 100644 index 3eb0b80ec6..0000000000 --- a/files/ja/mozilla/add-ons/sdk/tutorials/getting_started/index.html +++ /dev/null @@ -1,167 +0,0 @@ ---- -title: 入門 -slug: Mozilla/Add-ons/SDK/Tutorials/Getting_started -translation_of: Mozilla/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29 ---- -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">SDK を</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">使用してシンプルなアドオンの作成を始めるための手順の概略です</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">。</span></p> -<h2 id="必要条件">必要条件</h2> -<p>SDK を使用してアドオンを作成するには、まず最初に <a href="/en-US/Add-ons/SDK/Tutorials/Installation" rel="noreferrer">SDKをインストールして起動するための手順</a>に従ってください。インストールは一度だけ行えばよく、SDK の起動はコマンドプロンプトごとに行う必要があります。準備が整ったら、コマンドプロンプトを見てください。</p> -<p>Linux または Mac OS X の場合、コマンドプロンプトの先頭は SDK のルートディレクトリ名となります。</p> -<pre>(addon-sdk)~/mozilla/addon-sdk > -</pre> -<p>Windows の場合、コマンドプロンプトの先頭は SDK がインストールされたディレクトリの絶対パスとなります。</p> -<pre>(C:\Users\mozilla\sdk\addon-sdk) C:\Users\Work\sdk\addon-sdk> -</pre> -<h2 id="アドオンの初期化">アドオンの初期化</h2> -<p>コマンドプロンプトで新しいディレクトリを作成してください。SDK のルートディレクトリ以下の場所以外であれば、任意の場所に作成することができます。作成後はそのディレクトリに移動し、<span style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: 1.5;">cfx init </span><span style="line-height: 1.5;">を実行してください。</span></p> -<pre>mkdir my-addon -cd my-addon -cfx init -</pre> -<p>そうした場合、以下のように出力されるでしょう。</p> -<pre>* lib directory created -* data directory created -* test directory created -* doc directory created -* README.md written -* package.json written -* test/test-main.js written -* lib/main.js written -* doc/main.md written -Your sample add-on is now ready for testing: -try "cfx test" and then "cfx run". Have fun!" -</pre> -<h2 id="アドオンを実装する">アドオンを実装する</h2> -<p>lib ディレクトリにある main.js ファイルに、アドオンのコードを書くことができます。これは前のステップで作成されたものです。main.js を開き、以下のコードを追加してください。</p> -<pre class="brush: js">var buttons = require('sdk/ui/button/action'); -var tabs = require("sdk/tabs"); - -var button = buttons.ActionButton({ - id: "mozilla-link", - label: "Visit Mozilla", - icon: { - "16": "./icon-16.png", - "32": "./icon-32.png", - "64": "./icon-64.png" - }, - onClick: handleClick -}); - -function handleClick(state) { - tabs.open("http://www.mozilla.org/"); -} -</pre> -<p>コードを追加したら、ファイルを保存してください。</p> -<p>次に、以下の3つのアイコンファイルを data ディレクトリに保存してください。</p> -<table class="standard-table"> - <tbody> - <tr> - <td><img alt="" src="https://mdn.mozillademos.org/files/7635/icon-16.png" style="width: 16px; height: 16px;"></td> - <td>icon-16.png</td> - </tr> - <tr> - <td><img alt="" src="https://mdn.mozillademos.org/files/7637/icon-32.png" style="width: 32px; height: 32px;"></td> - <td>icon-32.png</td> - </tr> - <tr> - <td><img alt="" src="https://mdn.mozillademos.org/files/7639/icon-64.png" style="width: 64px; height: 64px;"></td> - <td>icon-64.png</td> - </tr> - </tbody> -</table> -<div class="note"> - <p>上記のコードは、Firefox 29 以降においてのみ使用できる<span style="line-height: 1.5;"> </span><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action" style="line-height: 1.5;">action button</a><span style="line-height: 1.5;"> モジュールを使用していることに注意してください。それ以前のバージョンの Firefox を使用する場合、アイコンがブラウザウィンドウの右下に表示されることを除けば、以下のコードを使用して同じものを実装できます。</span></p> - <pre class="brush: js">var widgets = require("sdk/widget"); -var tabs = require("sdk/tabs"); -var widget = widgets.Widget({ - id: "mozilla-link", - label: "Mozilla website", - contentURL: require("sdk/self").data.url("icon-16.png"), - onClick: function() { - tabs.open("http://www.mozilla.org/"); - } -});</pre> -</div> -<p>コマンドプロンプトに戻り、以下のコマンドを実行します。</p> -<pre>cfx run -</pre> -<p>これは、開発中のアドオンがインストールされた状態でFirefoxの新規インスタンスを実行する、 SDK のコマンドです。Firefox が起動されると、ブラウザの右上にFirefox ロゴのアイコンが表示されます。そのアイコンをクリックすると、<a href="http://www.mozilla.org/" rel="noreferrer">http://www.mozilla.org/</a> が読み込まれた新しいタブが開きます。</p> -<div class="note"> - <p>cfx run と入力したとき、以下のようなメッセージが表示される場合があります。</p> - <pre class="bz_comment_text" id="comment_text_0">A given cfx option has an inappropriate value: - ZIP does not support timestamps before 1980</pre> - <p>もし表示されたのであれば、<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1005412">bug 1005412</a> に行き当たったことになります。これは、ダウンロードしたアイコンファイルに1970年のタイムスタンプが付与されていることを意味します。このバグが修正されるまでは、<a href="http://www.linfo.org/touch.html"><code>touch</code></a> コマンドを使ってタイムスタンプをアップデートすることによってバグを回避してください。</p> - <pre>touch icon-16.png</pre> -</div> -<p>このアドオンが行うことは、これで全部です。このアドオンは2つの SDK モジュールを使用しています。一つは、ボタンをブラウザに追加することができる <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> モジュール、もう一つは、基本的なタブの操作を可能にする <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs" rel="noreferrer">tabs</a> モジュールです。今回は、Firefox アイコンのボタンを作成し、それをクリックすると新しいタブで Mozilla ウェブサイトのホームページを読み込むためのハンドラを追加しました。</p> -<p><img alt="" src="https://mdn.mozillademos.org/files/7643/mozilla-button.png" style="width: 382px; height: 221px; display: block; margin-left: auto; margin-right: auto;">先述のファイルを編集してみましょう。例えば、読み込むページを変更することができます。</p> -<pre class="brush: js">var buttons = require('sdk/ui/button/action'); -var tabs = require("sdk/tabs"); - -var button = buttons.ActionButton({ - id: "mozilla-link", - label: "Visit Mozilla", - icon: { - "16": "./icon-16.png", - "32": "./icon-32.png", - "64": "./icon-64.png" - }, - onClick: handleClick -}); - -function handleClick(state) { - tabs.open("https://developer.mozilla.org/"); -}</pre> -<div class="note"> - <p><span style="line-height: 1.5;">上記のコードは、Firefox 29 以降においてのみ使用できる</span><span style="line-height: 1.5;"> </span><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action" style="line-height: 1.5;">action button</a><span style="line-height: 1.5;"> モジュールを使用していることに注意してください。それ以前のバージョンの Firefox を使用する場合、アイコンがブラウザウィンドウの右下に表示されることを除けば、以下のコードを使用して同じものを実装できます。</span></p> - <pre class="brush: js">var widgets = require("sdk/widget"); -var tabs = require("sdk/tabs"); -var widget = widgets.Widget({ - id: "mozilla-link", - label: "Mozilla website", - contentURL: require("sdk/self").data.url("icon-16.png"), - onClick: function() { - tabs.open("http://developer.mozilla.org/"); - } -});</pre> -</div> -<p>コマンドプロンプトで、再び <code>cfx run</code> を実行してください。今度は <a href="https://developer.mozilla.org/">https://developer.mozilla.org/</a> が表示されます。</p> -<h2 id="アドオンをパッケージ化する">アドオンをパッケージ化する</h2> -<p>アドオンが完成して配布する準備ができたとき、XPI ファイルとしてパッケージ化する必要があります。これは Firfox アドオンとしてインストール可能なファイル形式です。XPI ファイルを独自の手段で配布するか、<a href="https://addons.mozilla.org" rel="noreferrer">https://addons.mozilla.org</a> で公開しましょう。そうすれば、ほかのユーザーがそのアドオンをダウンロードし、インストールすることできます。</p> -<p><span style="line-height: 1.5;">アドオンのディレクトリで </span><code style="font-style: normal; line-height: 1.5;">cfx xpi</code><span style="line-height: 1.5;"> コマンドを実行するだけで、</span>XPI をビルドすることができます。</p> -<pre>cfx xpi -</pre> -<p>そうした場合、以下のようなメッセージが表示されるでしょう。</p> -<pre>Exporting extension to my-addon.xpi. -</pre> -<p>アドオンが動くかどうかテストするために、あなたがインストールした Firefox に XPI ファイルをインストールしてみましょう。Firefox で Ctrl+O の組み合わせ(Mac であれば Cmd+O)でキーを入力するか、Firefox の「ファイル」メニューから「ファイルを開く」を選択します。すると、ファイル選択ダイアログが表示されます。アドオンの XPI ファイルがある場所まで移動してファイルを開き、アドオンをインストールするためのプロンプトに従ってください。</p> -<h2 id="要約">要約</h2> -<p>このチュートリアルでは、3つのコマンドを使ってアドオンの構築およびパッケージ化を行いました。</p> -<ul> - <li><code>cfx init</code> による空のアドオンのテンプレートの初期化。</li> - <li><code>cfx run</code> による、アドオンがインストールされた状態での Firefox の新規インスタンスの実行。アドオンの動作確認を可能にします。</li> - <li><code>cfx xpi</code> による、配布可能な XPI ファイルとしてのアドオンのパッケージ化。</li> -</ul> -<p>これら3つのコマンドは、SDK を用いてアドオンを開発するときに使用する主要なコマンドです。利用可能な全てのコマンドとオプションを網羅した<a href="/en-US/Add-ons/SDK/Tools/cfx" rel="noreferrer" style="line-height: 1.5;">リファレンス</a><span style="line-height: 1.5;">も用意してます。</span></p> -<p>アドオン自体のコードは、<a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> と <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs" rel="noreferrer">tabs</a> の2つのモジュールを使用しています。SDKの<a href="/en-US/Add-ons/SDK/High-Level_APIs" rel="noreferrer">高レベルなAPI</a> および <a href="/en-US/Add-ons/SDK/Low-Level_APIs" rel="noreferrer">低レベルなAPI</a> のリファレンスも用意しています。</p> -<h2 id="次のステップ">次のステップ</h2> -<p>SDKのAPIを使ってできることに慣れるためには、いくつかの<a href="/en-US/Add-ons/SDK/Tutorials" rel="noreferrer">チュートリアル</a>を進めてみてください。 </p> -<h2 id="上級テクニック">上級テクニック</h2> -<h3 id="組み込みのモジュールの上書き">組み込みのモジュールの上書き</h3> -<p>アドオンを実装するために使用する SDK モジュールは、Firefox に組み込まれているものです。アドオンを <span style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: 1.5;">cfx run</span><span style="line-height: 1.5;"> コマンドで実行したり、</span><code style="font-style: normal; line-height: 1.5;">cfx xpi</code><span style="line-height: 1.5;"> コマンドでパッケージ化したりする場合は、アドオンは Firefox が提供するバージョンのモジュールを使用します。</span></p> -<p>アドオン開発者としては、通常これは望ましい挙動です。しかし、SDK のモジュール自体を開発する場合には、当然それは望ましくない挙動でしょう。この場合、仮にSDKを <a href="https://github.com/mozilla/addon-sdk" rel="noreferrer">GitHub リポジトリ</a>からチェックアウトし、そのルートディレクトリで <a href="/en-US/Add-ons/SDK/Tutorials/Installation" rel="noreferrer">bin/activate</a> スクリプトを実行するものとします。</p> -<p>そのときは、"-o" オプションを渡して <code>cfx run</code> または <code>cfx xpi </code>コマンドを実行します。</p> -<pre>cfx run -o -</pre> -<p>これにより、cfx は Firefox 組み込みのモジュールではなく、SDK モジュールのローカルコピーを使用するようになります。</p> -<h3 id="cfx_を実行せずに開発する">cfx を実行せずに開発する</h3> -<p><code>cfx run</code> を呼び出すたびにブラウザが再起動されるため、アドオンを頻繁に変更する場合、開発効率をいくらか損なうことになるでしょう。それに代わるものとして、特定のポートの新しい XPI ファイルを自動的にインストールする <a href="https://addons.mozilla.org/en-US/firefox/addon/autoinstaller/" rel="noreferrer" style="line-height: 1.5;">Extension Auto-Installer</a><span style="line-height: 1.5;"> アドオンを利用した開発があります。これにより、ブラウザを再起動する必要なく新しい変更点をテストすることができます。</span></p> -<ul> - <li>アドオンに変更を加えます</li> - <li>cfx xpi コマンドを実行します</li> - <li>特定のポートにアドオンをポストします</li> -</ul> -<p>さらに、このワークフローを簡単なスクリプトで自動化できます。例えば、以下のようなスクリプトです。</p> -<pre>while true ; do cfx xpi ; wget --post-file=codesy.xpi http://localhost:8888/ ; sleep 5 ; done -</pre> -<p>この方法を使った場合、<span style="line-height: 1.5;">アドオンを </span><code style="font-style: normal; line-height: 1.5;">cfx run</code><span style="line-height: 1.5;"> コマンドにより実行した場合と比べて、</span><span style="line-height: 1.5;">コンソールへのログ出力のレベルが異なることに注意してください。つまり、 </span><a href="/en-US/Add-ons/SDK/Tutorials/Logging" rel="noreferrer" style="line-height: 1.5;"><code>console.log()</code></a><span style="line-height: 1.5;"> が出力するメッセージを見たい場合、設定を微調整する必要があります。詳細については、</span><a href="/en-US/Add-ons/SDK/Tools/console#Logging_Levels" rel="noreferrer" style="line-height: 1.5;">ログ出力のレベル</a><span style="line-height: 1.5;">に関するドキュメントを参照してください。</span></p> diff --git a/files/ja/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html b/files/ja/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html deleted file mode 100644 index 26fa4e6c4b..0000000000 --- a/files/ja/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Getting Started (jpm) -slug: Mozilla/Add-ons/SDK/Tutorials/Getting_Started_(jpm) -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Getting_Started_(jpm) ---- -<p>{{AddonSidebar}}</p> - -<div class="blockIndicator warning"> -<p dir="ltr" id="docs-internal-guid-02db9a93-7fff-3bd4-b03f-ecfeb67b25c5">Support for extensions using XUL/XPCOM or the Add-on SDK was removed in Firefox 57, released November 2017. As there is no supported version of Firefox enabling these technologies, this page will be removed by December 2020.</p> -</div> - -<p>{{LegacyAddonsNotice}}</p> - -<p> </p> - -<div class="note"> -<p>Add-on SDK は開発環境の作成, 実行, テスト, アドオンのパッケージング等を行うことができるコマンドラインツールを含みます. <a href="http://nodejs.org/">Node.js </a> を元に作成された jpm と呼ばれるクライアントツールは古い cfx tool を置き換えるものです.</p> -jpm は Firefox 38 以上で使用可能です. - -<p>この記事では jpm を使ってどのように開発を行うのかを説明します.</p> -</div> - -<p><span class="seoSummary">このチュートリアルでは SDK を使ってシンプルなアドオンを作成していきます.</span></p> - -<h2 id="前提条件">前提条件</h2> - -<p>SDK を使って Firefox のアドオンを作成するには, 以下の環境が必要です:</p> - -<ul> - <li>Firefox version 38 以上. それ以前の Firefox を使用する場合, 従来の cfx tool が必要です. <a href="/en-US/Add-ons/SDK/Tutorials/Getting_started_(cfx)">getting started with cfx</a> のインストラクションを参照してください.</li> - <li>コマンドラインツール jpm. <a href="/en-US/Add-ons/SDK/Tools/jpm#Installation">installing jpm</a> のインストラクションを参照してください. 導入が終了したらコマンドプロンプトを開いてください.</li> - <li>作成したアドオンのテストのために <a href="https://www.mozilla.org/en-US/firefox/developer/">Firefox Developer Version</a> をインストールしてください.</li> -</ul> - -<h2 id="最初のアドオンの初期化">最初のアドオンの初期化</h2> - -<p>コマンドプロンプト上で, 新規ディレクトリを作成します. そのディレクトリに移動し <code>jpm init</code> , と入力し, エンターを押します:</p> - -<pre>mkdir my-addon -cd my-addon -jpm init -</pre> - -<p>作成するアドオンに関する情報を入力するように求められます: この情報はこれから作成するアドオンの <a href="/en-US/Add-ons/SDK/Tools/package_json">package.json</a> ファイルを 生成するために使用されます. 今回は, それぞれのプロパティをデフォルトにするため, ただ Enter を押していきます. <code>jpm init</code> に関する詳細な情報は, <a href="/en-US/Add-ons/SDK/Tools/jpm#Command_reference">jpm command reference</a> を参照してください.</p> - -<p>これらのプロパティの,値を入力, または デフォルト値に設定した後に "package.json" の完全な内容が表示され、それを受け入れるように求められます.</p> - -<h2 id="アドオンの実装">アドオンの実装</h2> - -<p>それでは, アドオンのコードを書いて行きましょう. "entry point" の値 (これは package.json の "<a href="/en-US/Add-ons/SDK/Tools/package_json#main">main</a>" にあります) を変更していない限り, アドオンの root 直下の "index.js" です. このファイルは前のステップで作成されたものです. このファイルを開き以下のコードを追加します:</p> - -<pre class="brush: js">var buttons = require('sdk/ui/button/action'); -var tabs = require("sdk/tabs"); - -var button = buttons.ActionButton({ - id: "mozilla-link", - label: "Visit Mozilla", - icon: { - "16": "./icon-16.png", - "32": "./icon-32.png", - "64": "./icon-64.png" - }, - onClick: handleClick -}); - -function handleClick(state) { - tabs.open("http://www.mozilla.org/"); -} -</pre> - -<div class="note"> -<p>jpm では "entry point" のデフォルト値は "index.js" であることに注意してください. これは, アドオンの主要なファイルが "index.js" であることを意味しています. また, これはアドオンの root ディレクトリを検索します. and it is found directly in your add-on's root.</p> - -<p>cfx では, entry point はデフォルトに "main.js" になります. これは, アドオンの root 直下の "lib" ディレクトリに置かれています.</p> -</div> - -<p>ファイルをセーブします.</p> - -<p>続いて, <strong>"data"</strong> という名前のディレクトリをアドオンの root 直下に作成し,</p> - -<pre>mkdir data -</pre> - -<p>そして以下の 3 つのアイコンファイルを <strong>"data"</strong> ディレクトリに保存します:</p> - -<table class="standard-table"> - <tbody> - <tr> - <td><img alt="" src="https://mdn.mozillademos.org/files/7635/icon-16.png" style="height: 16px; width: 16px;"></td> - <td>icon-16.png</td> - </tr> - <tr> - <td><img alt="" src="https://mdn.mozillademos.org/files/7637/icon-32.png" style="height: 32px; width: 32px;"></td> - <td>icon-32.png</td> - </tr> - <tr> - <td><img alt="" src="https://mdn.mozillademos.org/files/7639/icon-64.png" style="height: 64px; width: 64px;"></td> - <td>icon-64.png</td> - </tr> - </tbody> -</table> - -<p>コマンドプロンプトに戻り, 以下のコマンドを入力します:</p> - -<pre>jpm run</pre> - -<p>この jpm コマンドは作成したアドオンをインストールした状態の新規 Firefox インスタンスを実行します.</p> - -<p>Firefox は見つからない場合や, Firefox Developer を代理のブラウザとしてインストールしている場合には, そこまでの path を渡す必要があるかもしれません. 例えば Ubuntu の場合:</p> - -<pre>jpm run -b /usr/bin/firefox</pre> - -<p>Firefox が起動すると, ブラウザの右上端に Firefox のロゴにアイコンが見えるはずです. このアイコンをクリックすると, 新しいタブが開き, <a href="http://www.mozilla.org/" rel="noreferrer">http://www.mozilla.org/</a> が読み込まれます.</p> - -<p>これでこのアドオンでやることは終了です. ここでは, 二つの SDK モジュール を使っています: <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> モジュール, これはブラウザにボタンを追加することができるモジュールです, <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs" rel="noreferrer">tabs</a> モジュール, これはタブの基本的な操作を行うことができるモジュールです. 今回のケースでは, 我々は Firefox アイコンのボタンを作成しました. また, 新規タブに Mozilla のホームページを読み込むクリックハンドラを追加しました.</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/7643/mozilla-button.png" style="display: block; height: 221px; margin-left: auto; margin-right: auto; width: 382px;"> このファイルを編集してみましょう. 例えば, 読み込むページを変更することができます.</p> - -<pre class="brush: js">var buttons = require('sdk/ui/button/action'); -var tabs = require("sdk/tabs"); - -var button = buttons.ActionButton({ - id: "mozilla-link", - label: "Visit Mozilla", - icon: { - "16": "./icon-16.png", - "32": "./icon-32.png", - "64": "./icon-64.png" - }, - onClick: handleClick -}); - -function handleClick(state) { - tabs.open("https://developer.mozilla.org/"); -}</pre> - -<p>コマンドプロンプトで, <code>jpm run</code> を再度実行します. この時に, ボタンをクリックすると <a href="https://developer.mozilla.org/">https://developer.mozilla.org/</a> に移動します.</p> - -<h2 id="アドオンのパッケージング">アドオンのパッケージング</h2> - -<p>アドオンを作成し終え, 配布準備をする際には, アドオンを XPI にパッケージングする必要があります. これは Firefox アドオンをインストールするためのファイルフォーマットです. XPI を自分で配布したり, 他のユーザーがアドオンをダウンロードまたは, インストールできるようにするために, <a href="https://addons.mozilla.org" rel="noreferrer">https://addons.mozilla.org</a> に 公開することが可能です.</p> - -<p>XPIをビルドするためには, <code>jpm xpi</code> コマンドをアドオンのディレクトリで実行するだけです:</p> - -<pre>jpm xpi</pre> - -<p>次のようなメッセージを見ることができます:</p> - -<pre>JPM info Successfully created xpi at /path/to/my-addon/@my-addon-0.0.1.xpi -</pre> - -<p>これが機能することをテストするために, XPI ファイルを自身がインストールしている Firefox にインストールしてみましょう. これは Firefox から Ctrl+O (Mac では Cmd+O)キーで行うことができます. もしくは, Firefox の "File" メニューから, "Open" を選択してもよいです. するとファイル選択ダイアログが開きます: "@my-addon.xpi" ファイルを選択すると アドオンインストールプロンプトが開きます.</p> - -<p>Firefoxでは, 基本的にローカルで開発されたアドオンでも署名が必要であることに注意してください. インストールが終了した後で, インストールされたアドオンのリストで disabled が示されている場合, 署名の不足を確認してください.注意してください。 開発中や, 公開する予定がない場合, 署名の無いアドオンを実行できるように <a>about:config</a> を開き, <em>xpinstall.signatures.required</em> を <em>false</em> に設定してください. この設定を全てのアドオンに適応されてしまうため, 他の場所から悪意のあるものを誤ってインストールしないように特別な注意を払ってください.</p> - -<p>アドオンを配布するために, <a href="https://addons.mozilla.org/en-US/developers/addon/submit/2"> XPI を addons.mozilla.org に提出</a> します. また自身のサーバーにアドオンを配布したい場合, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/jpm#jpm_sign">jpm sign</a> を 実行します.</p> - -<h2 id="結論">結論</h2> - -<p>このチュートリアルでは, 3 つのコマンドを使いアドオンのビルドやパッケージングを行いました:</p> - -<ul> - <li><code>jpm init</code> 空のアドオンテンプレートを初期化する</li> - <li><code>jpm run</code> アドオンがインストールされた Firefox インスタンスを実行する. 作成したアドオンを試すことができる</li> - <li><code>jpm xpi</code> 配布用にアドオンをXPIファイルにパッケージングする</li> -</ul> - -<p>これらは, SDK アドオン開発している時に使用する 3 つの主要なコマンドです. これらがとれるオプションや利用できるすべてのコマンドをカバーした包括的な <a href="/en-US/Add-ons/SDK/Tools/jpm" rel="noreferrer">リファレンス</a> があります.</p> - -<p>アドオンコードでは 二つの SDK モジュール, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> や <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs" rel="noreferrer">tabs</a> を使用しました. SDK における 全てのAPIs, <a href="/en-US/Add-ons/SDK/High-Level_APIs" rel="noreferrer">high-level</a> や <a href="/en-US/Add-ons/SDK/Low-Level_APIs" rel="noreferrer">low-level</a> に関するレファレンスは存在します.</p> - -<h2 id="What's_next">What's next?</h2> - -<p>SDK APIs を使ってできるいくつかのことを把握するために, <a href="/en-US/Add-ons/SDK/Tutorials" rel="noreferrer">tutorials</a> に挑戦してみてください.</p> diff --git a/files/ja/mozilla/add-ons/sdk/tutorials/index.html b/files/ja/mozilla/add-ons/sdk/tutorials/index.html deleted file mode 100644 index e7be834a87..0000000000 --- a/files/ja/mozilla/add-ons/sdk/tutorials/index.html +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: チュートリアル -slug: Mozilla/Add-ons/SDK/Tutorials -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials ---- -<p>{{AddonSidebar}}</p> - -<p>SDK を使用したアドオンの開発方法を実践的に説明したページの一覧です。</p> - -<hr> -<h3 id="はじめに"><a name="getting-started">はじめに</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tools/jpm#Installation">インストール</a></dt> - <dd>Windows、OS X および Linux 上で、SDK をダウンロード、インストール、および初期化します。</dd> -</dl> - -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Troubleshooting">トラブルシューティング</a></dt> - <dd>よくある問題を解決する場合や、支援を求める場合のヒントを説明します。</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Getting_Started_(jpm)">入門</a></dt> - <dd>jpm を使用してシンプルなアドオンを作成を始めるための手順の概略です</dd> - <dt></dt> -</dl> -</div> -</div> - -<hr> -<h3 id="ユーザーインターフェイスの作成"><a name="create-user-interfaces">ユーザーインターフェイスの作成</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar">ツールバーボタンの追加</a></dt> - <dd>Firefox アドオンツールバーにボタンを追加します。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox">Firefoxへのメニュー項目の追加</a></dt> - <dd>Firefox のメインメニューにアイテムを追加します。</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Display_a_Popup">ポップアップの表示</a></dt> - <dd>HTML および JavaScript を使用して実装したポップアップダイアログを表示します。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Add_a_Context_Menu_Item">コンテキストメニュー項目の追加</a></dt> - <dd>Firefox のコンテキストメニューに項目を追加します。</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="ブラウザの操作"><a name="interact-with-the-browser">ブラウザの操作</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Open_a_Web_Page">Webページを開く</a></dt> - <dd>モジュールを用いて、新しいタブまたはウィンドウでWebページを開き、そのコンテンツにアクセスします。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Listen_for_Page_Load">ページの読み込みを確認する</a></dt> - <dd>モジュールを用いて、新しい Web ページが読み込まれたときに通知を受け取り、それらの Web ページのコンテンツにアクセスします。</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/List_Open_Tabs">開いているタブの一覧を表示する</a></dt> - <dd>tabs モジュールを用いて、現在開いているすべてのタブに対して反復処理を行い、それらのコンテンツにアクセスします。</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="Webページの変更"><a name="modify-web-pages">Webページの変更</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL">URLに基づいたWebページの変更</a></dt> - <dd>URL に基づいて Web ページを検索するフィルタを作成します。フィルタに一致する URL の Web ページを読み込んだときに、フィルタ内の指定したスクリプトを実行します。</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">アクティブなWebページの変更</a></dt> - <dd>現在アクティブな Web ページに、動的にスクリプトを読み込みます。</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="開発テクニック"><a name="development-techniques">開発テクニック</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Logging">ログの出力</a></dt> - <dd>診断を行うために、メッセージをコンソールにログとして出力します。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Creating_reusable_modules">再利用可能なモジュールの作成</a></dt> - <dd>アドオンを別個のモジュールとして体系化し、開発、デバッグ、およびメンテナンスを容易にします。 また、作成したモジュールが入った再利用可能なパッケージを作成し、他の開発者もそのモジュールを使用できるようにします。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Unit_testing">ユニットテスト</a></dt> - <dd>SDK のテストフレームワークを使用して、ユニットテストを作成し実行します。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Chrome_authority">Chrome 権限</a></dt> - <dd>この権限を使用すると、アドオンが Components オブジェクトにアクセスできるので、どんな XPCOM オブジェクトでも読み込んで使用できるようになります。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Creating_event_targets">イベントターゲットの作成</a></dt> - <dd>定義したオブジェクトがイベントを発生させられるようにします。</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Listening_for_load_and_unload">読み込みと読み込み解除の確認</a></dt> - <dd>Firefox にアドオンが読み込まれたり、読み込み解除されたりしたときに通知を受け取ります。またコマンドラインからアドオンに引数を渡します。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Using_third-party_modules_(jpm)">サードパーティーモジュールの使用</a></dt> - <dd>SDK 自体に含まれていない追加のモジュールをインストールして使用します。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/l10n">ローカライゼーション</a></dt> - <dd>ローカライズ可能なコードを作成します。</dd> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Mobile_development">モバイル開発</a></dt> - <dd>Android 用 Firefox モバイルのアドオン開発を始める手順を説明します。</dd> -</dl> - -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Mobile_development">アドオン用のデバッガー</a></dt> - <dd>アドオン内のJavaScriptのデバッグを行います。</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="応用"><a name="putting-it-together">応用 </a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/ja/Add-ons/SDK/Tutorials/Annotator">アノテーターアドオン</a></dt> - <dd>より複雑なアドオンの開発作業を順を追って説明します。</dd> -</dl> -</div> -</div> diff --git a/files/ja/mozilla/add-ons/sdk/tutorials/installation/index.html b/files/ja/mozilla/add-ons/sdk/tutorials/installation/index.html deleted file mode 100644 index b01e14ded3..0000000000 --- a/files/ja/mozilla/add-ons/sdk/tutorials/installation/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: インストール -slug: Mozilla/Add-ons/SDK/Tutorials/Installation -translation_of: Mozilla/Add-ons/SDK/Tools/jpm#Installation ---- -<h2 id="前提条件">前提条件</h2> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">アドオン SDK を使用して開発を行うには、以下が必要です。</span></p> -<ul> - <li> - <p><a href="http://www.python.org/">Python</a> 2.5、2.6 または 2.7。<span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">Python バージョン 3.0 と 3.1 はサポートされていません。</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">環境変数 PATH に Python のパスを設定してください。</span></p> - </li> - <li> - <p>Firefox</p> - </li> - <li> - <p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">SDK 本体。</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">最新の安定したバージョンの SDK は、</span><a href="https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/jetpack-sdk-latest.tar.gz" style="line-height: 1.5;"><span style="line-height: 1.5;">tarball </span><span style="line-height: 19.9939994812012px; color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px;">または </span><span style="line-height: 19.9939994812012px; color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px;">zip ファイル として入手できます。あるいは、最新の開発バージョン</span></a>を <a href="https://github.com/mozilla/addon-sdk" style="line-height: 1.5;">GitHub </a>リポジトリ<a href="https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/jetpack-sdk-latest.tar.gz" style="line-height: 1.5;"><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">から入手することもできます。</span></a></p> - </li> -</ul> -<p><span style="font-size: 2.14285714285714rem; font-weight: 700; letter-spacing: -1px; line-height: 30px;">Mac OS Xでの Homebrew を使ったインストール</span></p> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">アドオン SDK を </span><a href="http://brew.sh/" style="line-height: 1.5;">Homebrew</a><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;"> を用いてインストールするには、</span><span style="line-height: 1.5;">以下のコマンドを実行してください。</span></p> -<pre>brew install mozilla-addon-sdk</pre> -<h2 id="Mac_OS_X_Linux_でのインストール">Mac OS X / Linux でのインストール</h2> -<p>shell や commnd prompt を用いて、任意の場所にアドオン SDK のファイルを展開し、SDK のルートディレクトリに移動してください。以下はコマンドの一例です。</p> -<pre>tar -xf addon-sdk.tar.gz -cd addon-sdk -</pre> -<p>次に、 Bash を使用している場合は以下を実行します。</p> -<pre>source bin/activate -</pre> -<p>Bash 以外を使用している場合は、以下を実行します。</p> -<pre>bash bin/activate -</pre> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">コマンドプロンプトの先頭に、SDK のルートディレクトリ名が追加されます。</span></p> -<pre>(addon-sdk)~/mozilla/addon-sdk > -</pre> -<h2 id="Windows_でのインストール">Windows でのインストール</h2> -<p>shell や commnd prompt を用いて、任意の場所にアドオン SDK のファイルを展開し、SDK のルートディレクトリに移動してください。以下はコマンドの一例です。</p> -<pre>7z.exe x addon-sdk.zip -cd addon-sdk -</pre> -<p>次に、以下を実行します。</p> -<pre>bin\activate -</pre> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">コマンドプロンプトの先頭に、SDK のルートディレクトリ名が追加されます。</span></p> -<pre>(C:\Users\mozilla\sdk\addon-sdk) C:\Users\Work\sdk\addon-sdk> -</pre> -<h2 id="SDK_仮想環境">SDK 仮想環境</h2> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">上記のようにコマンドプロンプトが変更されていれば</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">、シェルで仮想環境が起動し、アドオン SDK コマンドラインツールにアクセスできます。</span></p> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">仮想環境は</span> <code>deactivate</code> <span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">を実行していつでも終了することができます。</span></p> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">仮想環境は、そのコマンドプロンプトにおいてのみ有効です。</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">コマンドプロンプトを閉じると</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">仮想環境が終了するので</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">、再び</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">仮想環境を起動するには、</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">新しいコマンドプロンプトを起動し </span><code style="font-style: normal; font-size: 13px; vertical-align: baseline; font-family: 'andale mono', monospace; color: rgb(68, 68, 68); line-height: 19.9939994812012px; background-clip: initial;">source bin/activate</code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;"> または </span><code style="font-style: normal; font-size: 13px; vertical-align: baseline; font-family: 'andale mono', monospace; color: rgb(68, 68, 68); line-height: 19.9939994812012px; background-clip: initial;">bin¥activate</code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;"> と入力する必要があります。</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">新しいコマンドプロンプトを開くだけでは、SDK は起動されません。</span></p> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">ディスク上の異なる場所に SDK の複数のコピーを置き、切り替えて使用することもできます。</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">さらには、別個のコマンドプロンプトで、それぞれの</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">コピー</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">を同時に起動することも可能です。</span></p> -<h3 id="activate_永続化"><code>activate</code> 永続化</h3> -<p><code>activate</code> が行う処理は単に、<span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">最上位レベルの </span><code style="font-style: normal; font-size: 13px; vertical-align: baseline; font-family: 'andale mono', monospace; color: rgb(68, 68, 68); line-height: 19.9939994812012px; background-clip: initial;">bin</code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;"> ディレクトリにあるスクリプトを使用して、現在のコマンドプロンプトに関する複数の環境変数を設定することだけです。</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">そこで、使用する環境でこれらの変数が永続化されるように設定すれば、新しくコマンドプロンプトを開くだけでそれらの変数が読み込まれ、仮想環境が常に使用できます。</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">これにより、新しいコマンドプロンプトを開くたびに </span><code style="font-style: normal; font-size: 13px; vertical-align: baseline; font-family: 'andale mono', monospace; color: rgb(68, 68, 68); line-height: 19.9939994812012px; background-clip: initial;">activate</code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;"> と入力する必要がなくなります。</span></p> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">ただし、コマンドプロンプトに関する変数が、新しい SDK のリリース時に変更されることがあります。設定が必要な変数を特定するために </span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">SDK の起動スクリプトを参照するのが最良の方法です</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">。</span><span style="line-height: 1.5;"> B</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">ash 環境(Linux および Mac OS X)と Windows 環境では、起動に使用するスクリプトも、それによって設定される変数も異なります。</span></p> -<h4 id="Windows">Windows</h4> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">Windows では、</span> <code>bin\activate</code> <span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">を実行すると </span><span style="line-height: 1.5;"> </span><code style="font-style: normal; line-height: 1.5;">activate.bat </code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">が使用されます。SDK を常に有効にするには、コマンドラインから</span><code style="font-style: normal; line-height: 1.5;"> </code><code style="font-style: normal; line-height: 1.5;">setx</code><span style="line-height: 1.5;"> </span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">ツールを使用するか、コントロール パネルを使用します。</span></p> -<h4 id="LinuxMac_OS_X">Linux/Mac OS X</h4> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">Linux および Mac OS X では、</span> <code>source bin/activate</code> により <code>activate</code> Bash スクリプトが実行されます。<span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">SDK を常に有効にするには、</span><span style="line-height: 1.5;">Linuxの場合は</span><span style="line-height: 1.5;"> </span><code style="font-style: normal; line-height: 1.5;">~/.bashrc</code><span style="line-height: 1.5;"> を、</span><span style="line-height: 1.5;">Mac OS Xの場合は</span><span style="line-height: 1.5;"> </span><code style="font-style: normal; line-height: 1.5;">~/.bashprofile </code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">を使用します。</span></p> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">あるいは、</span><code style="font-style: normal; font-size: 13px; vertical-align: baseline; font-family: 'andale mono', monospace; color: rgb(68, 68, 68); line-height: 19.9939994812012px; background-clip: initial;">‾/bin</code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;"> ディレクトリにある </span><code style="font-style: normal; font-size: 13px; vertical-align: baseline; font-family: 'andale mono', monospace; color: rgb(68, 68, 68); line-height: 19.9939994812012px; background-clip: initial;">cfx</code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;"> プログラムへのシンボリックリンクを作成する方法もあります。</span></p> -<pre>ln -s PATH_TO_SDK/bin/cfx ~/bin/cfx -</pre> -<h2 id="サニティチェック">サニティチェック</h2> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">シェルプロンプトで以下を実行します。</span></p> -<pre>cfx -</pre> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">一行目には以下のように表示されるでしょう。それに続いて、多数の使用方法の情報が表示されます。</span></p> -<pre>Usage: cfx [options] [command] </pre> -<p><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">これが</span> <a href="/en-US/Add-ons/SDK/Tools/cfx"><code>cfx</code> コマンドラインプログラム</a> です。<code style="font-style: normal; font-size: 13px; vertical-align: baseline; font-family: 'andale mono', monospace; color: rgb(68, 68, 68); line-height: 19.9939994812012px; background-clip: initial;">cfx</code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;"> は、アドオン SDK の主要なインターフェイスで、Firefox の起動とアドオンのテスト、アドオンを配布するためのパッケージング、</span><span style="line-height: 1.5;">説明書</span><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;">の表示、および単体テストの実行に使用します。</span></p> -<h2 id="問題が発生した場合">問題が発生した場合</h2> -<p><a href="/en-US/Add-ons/SDK/Tutorials/Troubleshooting">トラブルシューティング</a> のページを参照してください。</p> -<h2 id="次のステップ">次のステップ</h2> -<p><a href="/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">cfx 入門</a>のチュートリアルに目を通してください。<code style="font-style: normal; font-size: 13px; vertical-align: baseline; font-family: 'andale mono', monospace; color: rgb(68, 68, 68); line-height: 19.9939994812012px; background-clip: initial;">cfx</code><span style="color: rgb(68, 68, 68); font-family: 'helvetica neue', arial, helvetica, sans-serif; font-size: 13px; line-height: 19.9939994812012px;"> ツールによってアドオンを作成する方法を説明します。</span></p> diff --git a/files/ja/mozilla/add-ons/sdk/tutorials/troubleshooting/index.html b/files/ja/mozilla/add-ons/sdk/tutorials/troubleshooting/index.html deleted file mode 100644 index 80db0e8976..0000000000 --- a/files/ja/mozilla/add-ons/sdk/tutorials/troubleshooting/index.html +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: トラブルシューティング -slug: Mozilla/Add-ons/SDK/Tutorials/Troubleshooting -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Troubleshooting ---- -<p>アドオン SDKを起動したり実行したりする際に問題があっても、慌てる必要はありません!問題を突き止めるにはどこから着手すれば良いのかを順番に見ていきましょう。</p> -<h2 id="Quarantine_Problem_on_Mac_OS_X">Quarantine Problem on Mac OS X</h2> -<p>On Mac OS X, you might see the following error when you try to run <code>cfx</code>:</p> -<pre>/path/to/sdk/bin/cfx: /usr/bin/env: bad interpreter: Operation not permitted -</pre> -<p>This might be because the <code>cfx</code> executable file has been placed in quarantine during download from the Internet.</p> -<p>To get it out of quarantine, use the <code>xattr -d</code> command, specifying <code>com.apple.quarantine</code> as the name of the attribute to delete, and <code>cfx</code> as the file from which to delete that attribute:</p> -<pre>xattr -d com.apple.quarantine /path/to/sdk/bin/cfx -</pre> -<h2 id="Check_Your_Python">Check Your Python</h2> -<p>The SDK's <code>cfx</code> tool runs on Python. If you're having trouble getting <code>cfx</code> to run at all, make sure you have Python correctly installed.</p> -<p>Try running the following from a command line:</p> -<pre> python --version -</pre> -<p><code>cfx</code> currently expects Python 2.5 or 2.6. Older and newer versions may or may not work.</p> -<h2 id="Check_Your_Firefox_or_XULRunner">Check Your Firefox or XULRunner</h2> -<p><code>cfx</code> searches well known locations on your system for Firefox or XULRunner. <code>cfx</code> may not have found an installation, or if you have multiple installations, <code>cfx</code> may have found the wrong one. In those cases you need to use <code>cfx</code>'s <code>--binary</code> option. See the <a href="/en-US/Add-ons/SDK/Tools/cfx">cfx Tool</a> guide for more information.</p> -<p>When you run <code>cfx</code> to test your add-on or run unit tests, it prints out the location of the Firefox or XULRunner binary that it found, so you can check its output to be sure.</p> -<h2 id="Check_Your_Text_Console">Check Your Text Console</h2> -<p>When errors are generated in the SDK's APIs and your code, they are logged to the text console. This should be the same console or shell from which you ran the <code>cfx</code> command.</p> -<h2 id="Don't_Leave_Non-SDK_Files_Lying_Around">Don't Leave Non-SDK Files Lying Around</h2> -<p>Currently the SDK does not gracefully handle files and directories that it does not expect to encounter. If there are empty directories or directories or files that are not related to the SDK inside your <code>addon-sdk</code> directory or its sub-directories, try removing them.</p> -<h2 id="Search_for_Known_Issues">Search for Known Issues</h2> -<p>Someone else might have experienced your problem, too. Other users often post problems to the <a href="http://groups.google.com/group/mozilla-labs-jetpack/topics">project mailing list</a>. You can also browse the list of <a href="https://bugzilla.mozilla.org/buglist.cgi?order=Bug%20Number&resolution=---&resolution=DUPLICATE&query_format=advanced&product=Add-on%20SDK">known issues</a> or <a href="https://bugzilla.mozilla.org/query.cgi?format=advanced&product=Add-on%20SDK">search</a> for specific keywords.</p> -<h2 id="Contact_the_Project_Team_and_User_Group">Contact the Project Team and User Group</h2> -<p>SDK users and project team members discuss problems and proposals on the <a href="http://groups.google.com/group/mozilla-labs-jetpack/topics">project mailing list</a>. Someone else may have had the same problem you do, so try searching the list. You're welcome to post a question, too.</p> -<p>You can also chat with other SDK users in <a href="http://mibbit.com/?channel=%23jetpack&server=irc.mozilla.org">#jetpack</a> on <a href="http://irc.mozilla.org/">Mozilla's IRC network</a>.</p> -<p>And if you'd like to <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Add-on%20SDK&component=General">report a bug in the SDK</a>, that's always welcome! You will need to create an account with Bugzilla, Mozilla's bug tracker.</p> -<h2 id="Run_the_SDK's_Unit_Tests">Run the SDK's Unit Tests</h2> -<p>The SDK comes with a suite of tests which ensures that its APIs work correctly. You can run it with the following command:</p> -<pre> cfx testall -</pre> -<p>Some of the tests will open Firefox windows to check APIs related to the user interface, so don't be alarmed. Please let the suite finish before resuming your work.</p> -<p>When the suite is finished, your text console should contain output that looks something like this:</p> -<pre> Testing cfx... - ............................................................. - ---------------------------------------------------------------------- - Ran 61 tests in 4.388s - -OK - Testing reading-data... - Using binary at '/Applications/Firefox.app/Contents/MacOS/firefox-bin'. - Using profile at '/var/folders/FL/FLC+17D+ERKgQe4K+HC9pE+++TI/-Tmp-/tmpu26K_5.mozrunner'. - .info: My ID is 6724fc1b-3ec4-40e2-8583-8061088b3185 - .. - 3 of 3 tests passed. - OK - Total time: 4.036381 seconds - Program terminated successfully. - Testing all available packages: nsjetpack, test-harness, api-utils, development-mode. - Using binary at '/Applications/Firefox.app/Contents/MacOS/firefox-bin'. - Using profile at '/var/folders/FL/FLC+17D+ERKgQe4K+HC9pE+++TI/-Tmp-/tmp-dzeaA.mozrunner'. - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ......................................................................... - ............................................... - -3405 of 3405 tests passed. - OK - Total time: 43.105498 seconds - Program terminated successfully. - All tests were successful. Ship it! -</pre> -<p>If you get lots of errors instead, that may be a sign that the SDK does not work properly on your system. In that case, please file a bug or send a message to the project mailing list. See the previous section for information on doing so.</p> diff --git a/files/ja/mozilla/add-ons/themes/obsolete/index.html b/files/ja/mozilla/add-ons/themes/obsolete/index.html deleted file mode 100644 index 48bf1f18f0..0000000000 --- a/files/ja/mozilla/add-ons/themes/obsolete/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Obsolete -slug: Mozilla/Add-ons/Themes/Obsolete -tags: - - Obsolete - - アドオン - - アーカイブ - - テーマ - - ルックアンドフィール -translation_of: Mozilla/Add-ons/Themes/Obsolete ---- -<p> </p> - -<p>{{AddonSidebar}}</p> - -<div class="boxed translate-rendered text-content"> -<p>このページには、これまでに更新されることはないテーマドキュメントやリソースが含まれていますが、当面は更新されたドキュメントのソースとして使用されています。</p> - -<ul> - <li><a href="https://developer.mozilla.org/en-US/docs/Archive/Themes/Creating_a_Skin_for_Firefox">Creating a Skin for Firefox</a> - - <ul> - <li><a href="https://developer.mozilla.org/en-US/docs/Archive/Themes/Creating_a_Skin_for_Firefox/UUID">UUID</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Archive/Themes/Creating_a_Skin_for_Firefox/contents.rdf">contents.rdf</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Archive/Themes/Creating_a_Skin_for_Firefox/install.rdf">install.rdf</a></li> - </ul> - </li> - <li><a href="https://developer.mozilla.org/en-US/docs/Archive/Themes/Theme_changes_in_Firefox_2">Theme changes in Firefox 2</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Archive/Themes/Theme_changes_in_Firefox_3">Theme changes in Firefox 3</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Archive/Themes/Theme_changes_in_Firefox_3.5">Theme changes in Firefox 3.5</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Archive/Themes/Theme_changes_in_Firefox_4">Theme changes in Firefox 4</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Building_a_Theme" title="Building a Theme">Building a Theme</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Themes/Common_Firefox_Theme_Issues_and_Solutions" title="Themes/Common_Firefox_Theme_Issues_and_Solutions">Common Theme Issues and Their Solutions</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Making_Sure_Your_Theme_Works_with_RTL_Locales" title="Making_Sure_Your_Theme_Works_with_RTL_Locales">Making Sure Your Theme Works with RTL Locales</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Creating_a_Skin_for_SeaMonkey_2.x" title="Creating_a_Skin_for_SeaMonkey_2.x">Creating a Skin for SeaMonkey 2</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/DOM_Inspector" title="DOM_Inspector">DOM Inspector</a></li> -</ul> - -<ul> - <li><a class="link-https" href="https://addons.mozilla.org/en-US/firefox/addon/inspectorwidget/">InspectorWidget</a></li> - <li><a class="link-https" href="https://addons.mozilla.org/en-us/firefox/addon/force-rtl/">Force RTL</a></li> - <li><a class="link-http" href="http://www.tudobom.de/articles/yatt/" title="http://www.tudobom.de/articles/yatt/">Yet Another Theme Tutorial</a></li> -</ul> -</div> - -<p> </p> diff --git a/files/ja/mozilla/add-ons/webextensions/api/bookmarks/export/index.html b/files/ja/mozilla/add-ons/webextensions/api/bookmarks/export/index.html deleted file mode 100644 index 381e471807..0000000000 --- a/files/ja/mozilla/add-ons/webextensions/api/bookmarks/export/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: bookmarks.export() -slug: Mozilla/Add-ons/WebExtensions/API/bookmarks/export -tags: - - API - - Add-ons - - Bookmarks - - Extensions - - Method - - Non-standard - - Reference - - WebExtensions - - export -translation_of: Archive/Add-ons/bookmarks.export ---- -<p>{{AddonSidebar()}}</p> - -<p>ブックマークを HTML ブックマークファイルにエクスポートします。</p> - -<h2 id="構文">構文</h2> - -<pre class="brush: js">browser.bookmarks.export( - function() {...} // 関数(省略可) -) -</pre> - -<h3 id="Parameters">Parameters</h3> - -<dl> - <dt><code>callback</code>{{optional_inline}}</dt> - <dd><code>function</code>.</dd> -</dl> - -<h2 id="ブラウザ実装状況">ブラウザ実装状況</h2> - -<p>{{ CompatibilityTable() }}</p> - -<div id="compat-desktop"> -<table class="compat-table"> - <tbody> - <tr> - <th>機能</th> - <th>Chrome</th> - <th>Edge</th> - <th>Firefox (Gecko)</th> - <th>Opera</th> - </tr> - <tr> - <td>基本サポート</td> - <td>{{ CompatVersionUnknown }}</td> - <td>{{ CompatUnknown }}</td> - <td>{{ CompatNo() }}</td> - <td>{{ CompatOpera('33') }}</td> - </tr> - </tbody> -</table> -</div> - -<div id="compat-mobile"> -<table class="compat-table"> - <tbody> - <tr> - <th>機能</th> - <th>Edge</th> - <th>Firefox OS</th> - <th>Firefox Mobile (Gecko)</th> - </tr> - <tr> - <td>基本サポート</td> - <td>{{ CompatNo() }}</td> - <td>{{ CompatNo() }}</td> - <td>{{ CompatNo() }}</td> - </tr> - </tbody> -</table> -</div> - -<p>{{WebExtExamples}}</p> - -<div class="note"><strong>謝辞</strong> - -<p>この API は Chromium の <a href="https://developer.chrome.com/extensions/bookmarks#method-update"><code>chrome.bookmarks</code></a> API に基づいています。また、このドキュメントは <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/bookmarks.json"><code>bookmarks.json</code></a> における Chromium のコードから作成されています。</p> -</div> - -<div class="hidden"> -<pre>// Copyright 2015 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -</pre> -</div> diff --git a/files/ja/mozilla/add-ons/webextensions/api/bookmarks/import/index.html b/files/ja/mozilla/add-ons/webextensions/api/bookmarks/import/index.html deleted file mode 100644 index 758b72dbfa..0000000000 --- a/files/ja/mozilla/add-ons/webextensions/api/bookmarks/import/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: bookmarks.import() -slug: Mozilla/Add-ons/WebExtensions/API/bookmarks/import -tags: - - API - - Add-ons - - Bookmarks - - Extensions - - Method - - Non-standard - - Reference - - WebExtensions - - import -translation_of: Archive/Add-ons/bookmarks.import ---- -<p>{{AddonSidebar()}}</p> - -<p>ブックマークを HTML ブックマークファイルからインポートします。</p> - -<h2 id="構文">構文</h2> - -<pre class="brush: js">browser.bookmarks.import( - function() {...} // 関数(省略可) -) -</pre> - -<h3 id="引数">引数</h3> - -<dl> - <dt><code>callback</code>{{optional_inline}}</dt> - <dd><code>function</code>.</dd> -</dl> - -<h2 id="ブラウザ実装状況">ブラウザ実装状況</h2> - -<p>{{ CompatibilityTable() }}</p> - -<div id="compat-desktop"> -<table class="compat-table"> - <tbody> - <tr> - <th>機能</th> - <th>Chrome</th> - <th>Edge</th> - <th>Firefox (Gecko)</th> - <th>Opera</th> - </tr> - <tr> - <td>基本サポート</td> - <td>{{ CompatVersionUnknown }}</td> - <td>{{ CompatUnknown }}</td> - <td>{{ CompatNo() }}</td> - <td>{{ CompatOpera('33') }}</td> - </tr> - </tbody> -</table> -</div> - -<div id="compat-mobile"> -<table class="compat-table"> - <tbody> - <tr> - <th>機能</th> - <th>Edge</th> - <th>Firefox OS</th> - <th>Firefox Mobile (Gecko)</th> - </tr> - <tr> - <td>基本サポート</td> - <td>{{ CompatNo() }}</td> - <td>{{ CompatNo() }}</td> - <td>{{ CompatNo() }}</td> - </tr> - </tbody> -</table> -</div> - -<p>{{WebExtExamples}}</p> - -<div class="note"><strong>謝辞</strong> - -<p>この API は Chromium の <a href="https://developer.chrome.com/extensions/bookmarks#method-update"><code>chrome.bookmarks</code></a> API に基づいています。また、このドキュメントは <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/bookmarks.json"><code>bookmarks.json</code></a> における Chromium のコードから作成されています。</p> -</div> - -<div class="hidden"> -<pre>// Copyright 2015 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -</pre> -</div> |