document

Internet Explorer 8 のアクセラレータは、任意の Web ページからアプリケーションや Web サービスにすばやくアクセスするためのコンテキスト メニュー オプションです。 アクセラレータは Internet Explorer 8 サービス ギャラリー、またはアクセラレータを提供している Web サイトからインストールできます。 アクセラレータを使用すると、ある Web ページから別のページへ簡単に情報をコピーできるようになります。 この記事では、XML ベースのアクセラレータを定義および導入する方法について説明します。

この記事は、次の各セクションで構成されています。

  • キー ポイント
  • はじめに
  • カテゴリ
  • 変数
    • URL テンプレート パラメーター
    • フォーム ベースのパラメーター
    • 選択タイプ
    • ドキュメント変数に関連するセキュリティ
  • プレビュー
    • サイズ
    • 内容
    • 移動
  • ローカライズ
    • 英語の例
    • スペイン語の例
  • インストール
  • OpenService アクセラレータ フォーマット
  • 関連トピック

キー ポイント

  • アクセラレータは、Internet Explorer で Web ページを右クリックすると表示されるショートカット メニューに表示されます。 ユーザーが希望するタスクにすばやくアクセスできるようにするため、アクセラレータは機能別にグループ化されています。
  • アクセラレータを使用すると、Web ページを表示したままで情報を "プレビュー" する、または、Web サービスまたはアプリケーションに対して直接コンテンツを "実行" して送信する、という 2 種類のシナリオが可能になります。
  • XML ベースのアクセラレータは、XML ファイルを使用して、Web サーバーに対する HTTP 要求のフォーマットを記述します。 ターゲット コンテキストからのデータ (選択、リンク、またはドキュメント) は変数として URL パラメーターやフォーム データに渡されます。
  • XML ベースのアクセラレータを Web サイトからインストールするには、 window.external.AddService メソッドを使用して、ユーザーに対してプロンプトを表示します。

はじめに

アクセラレータを使用すると、Web ページでデータを操作できるようになります。 数行のテキストを選択し、クリック操作でそれをブログや電子メールに送信することができます。 このアクションによって、以前にインストールしたアクセラレータを使用して目的の Web サイトに移動することで、目的の操作が "実行" されます。移動先の Web サイトでは、選択した記事の一部分が既に編集フィールドに表示された状態になっています。 また、"プレビュー" アクセラレータを使用して、別の Web サイトに移動せずにデータを操作することも可能です。たとえば、単語を翻訳したり、住所から地図を表示することができます。 プレビュー ウィンドウを表示するには、マウスをアクセラレータに合わせます。

地図アクセラレータでのプレビューのスクリーンショット
図 1: プレビュー アクセラレータを使用した住所の地図表示

アクセラレータは宣言型であり、 HTTP 送信を使用してブラウザーと Web サイトとの間で通信を行います。 XML ベースのアクセラレータは作成、テスト、ユーザーへの導入が簡単にできます。

カテゴリ

ユーザーが希望するタスクにすばやくアクセスできるようにするため、アクセラレータは機能別にグループ化されています。 特定のカテゴリに対する既定のアクセラレータは、アクセラレータのインストール時に設定することも、[アドオンの管理] ダイアログ ボックスで設定することもできます。

現時点で存在するサービスの例を示します。

  • 追加 : del.icio.us、Digg、Reddit
  • ブログ : Windows Live Spaces、Windows Live Writer、Blogger
  • 定義 : Encarta、Wikipedia、Dictionary.com
  • 地図 : Windows Live Map、Google Maps、Yahoo! Maps、MapQuest
  • 送信 : Windows Live Mail、Gmail、Yahoo! Mail
  • 翻訳 : Windows Live Translation、AltaVista's Babel Fish、Google Translation

アクセラレータが推奨カテゴリに適合しない場合は、ユーザー独自のカテゴリを定義できます。

<os:activity category="Share">  

カテゴリ名は、わかりやすい動詞にする必要があります。特定のブランドまたはアプリケーションに結び付いた名前は避け、類似した機能を持つ別のアクセラレータにもそのカテゴリを使用できるようにします。 さらに、category 属性の値は [アドオンの管理] でアクセラレータをグループ分類するのに使用されるため、ユーザーが読みやすい値にし、必要に応じて先頭文字を大文字にしてください。

変数

ドキュメントのプロパティおよびコンテンツは、HTTP GET および/または POST 送信を通じてアクセラレータ サービス プロバイダーに送信されます。 これらのプロパティは置換変数で表され、フォーム フィールドまたは URL パラメーターとして渡すことができます。 変数は、 os:execute および os:preview ("URL template" と呼ばれます) の action 属性で直接指定することも、 os:parameter 要素で指定することもできます。

メモ : 状態およびユーザー資格情報を保存するには、Cookie を使用します。

次の変数を使用できます。

† ドキュメントのコンテキスト外のプレビュー中は使用できません。

変数については、次の点に留意してください。

  • 変数名は常に中かっこ {} で囲みます (例 : {selection})。 要求内で中かっこを文字として指定するには、\ で文字をエスケープします (例 : \{{selection}\})。
  • 変数名の後ろの "?" は、その変数がオプションであることを表します (例 : {documentTitle?})。
  • URL テンプレートで必須の (オプションではない) 変数が使用できない場合は (たとえば、実行しようとするアクセラレータの action 属性に {linkRel} が含まれているが、対象となるリンクに rel 属性がない場合など)、アクセラレータを実行できないため、ショートカット メニュー内ではアクセラレータが選択不可になります。
  • os:parameter 要素の値がなんらかの理由で空の場合は、要求内に表示されません。

URL テンプレート パラメーター

URL パラメーターは、Web ページからサービスに情報を伝達します。 get 要求では、os:parameter 要素として指定するか、変数を URL テンプレートに直接追加するかにかかわらず、すべてのパラメーターが URL に渡されます。

メモ : os:parameter 要素を指定する場合、URL テンプレート内の先頭に疑問符 (?) が付いている URL パラメーターは使用されません。

必ず、URL テンプレート内のオプション変数を正しく識別してください。 次にテンプレートを示します。

<os:execute method="get"
    action="http://example.com/service.aspx?url={documentUrl}&title={documentTitle?}" />  

この例では、documentUrl は必須の変数であり、documentTitle はオプションです。 documentTitle の値が空白の場合は、URL の title パラメーターに空白文字が使用されます。 ただし、必須である documentUrl の値が空白の場合は、アクセラレータ ショートカット メニューのアクセラレータが利用不可 (グレー表示) になります。

フォーム ベースのパラメーター

post 要求では、os:parameter 要素によってフォーム入力の名前/値のペアが指定されます。 次の例は、前述の例と同じ値を渡します。

<os:execute method="post" action="http://example.com/service.aspx>
    <os:parameter name="url" value="{documentUrl}" />
    <os:parameter name="title" value="{documentTitle?}" />
</os:execute>  

現在のコンテキストで必須の (オプションではない) パラメーターが定義されていない場合、そのパラメーターは無視されます。 たとえば、{selection} が指定されているにもかかわらず使用不可能な場合は、パラメーター全体が要求から除外されます。

選択タイプ

選択されたテキストは、プレーン "テキスト" (既定) または "html" マークアップの 2 とおりの方法で解釈できます。 選択タイプは os:parameter 要素で設定します。

選択されたテキストは、選択された HTTP 要求メソッドの要求に応じてエンコードされます。 URL の場合、英数字以外の文字はパーセント エンコードされ、改行は "CR LF" ペア (%0D%0A) として渡されることを意味します。 ユーザーが複数行のテキストを選択して送信する場合、Web サービスは "CR LF" を整然と処理できる必要があります。

セキュリティに関するメモ セキュリティ警告 : HTML を入力として受け入れる Web サービスは、任意の HTML 入力を処理できるように正しく構成する必要があります。 フィルターまたはエンコードなしで任意の入力を認める Web サービスは、HTML/スクリプト インジェクション攻撃の対象になる可能性があります。

html 型の {selection} パラメーターを使用するアクセラレータを作成する場合は、Web サービスがこのパラメーターを正しく解釈できるよう設定してください。 次のサービスは、URL のクエリ文字列からテキストをネイティブで受け入れ、Active Server Pages (ASP) を使用して、その文字列を直接テキスト inputvalue 属性に書き込みます。

<input name="txtQueryString" size="60" maxlength="65000" value="<%=Request.QueryString("q")%>" /> 

この場合、サービスがアクセラレータから HTML を受け入れると、着信したテキストによって input タグが不完全に終了し、Web ページの一部分が書き換えられる可能性があります。 さらに悪い場合、この方法でインジェクトされた悪質なスクリプトまたは SQL ステートメントが、Web サイトをホストしているドメインのコンテキストで実行される可能性があります。 インジェクション攻撃からアプリケーションを保護するための入力の検証方法については、「 How To: ASP.NET でインジェクション攻撃から保護する方法」 (英語の可能性あり) を参照してください。 また、 innerHTML を使用したクライアントサイド スクリプト インジェクションについての説明も参照してください。

ドキュメント変数に関連するセキュリティ

ドキュメント変数を利用することでユーザーに知られることなくユーザーを追跡できるため、特定のコンテキストではこれらの変数を使用することはできません。

  • ドキュメントのコンテキスト外では、プレビュー アクセラレータでドキュメント変数を使用することはできません。
  • HTTP と Secure Hypertext Transfer Protocol (HTTPS) との間でドキュメント変数を転送することはできません。また、制限の低いセキュリティ ゾーンから制限の厳しいセキュリティ ゾーンにドキュメント変数を転送することはできません。たとえば、イントラネット ゾーン内のページからインターネット上のサーバーには転送できません。

なんらかの理由で必須のドキュメント変数が使用できない場合、ショートカット メニュー内ではアクセラレータが選択不可になります。

プレビュー

ユーザーがメニューでアクセラレータをポイントしたときに表示される、オプションの HTML プレビューを提供します。 プレビューは、地図、用語の定義または翻訳、コンテンツの規制、または関連コンテンツへのリンクをすばやく取得するために役立ちます。

プレビュー ウィンドウは、簡単な対話のために使用します。 プレビュー ウィンドウには、ユーザーが詳しい情報を参照できる、完全な Web ページへのリンクを含めることができます。 プレビューによって、ユーザーがアクセラレータ メニュー項目をクリックできなくなることはありません。

プレビュー機能は、OpenService アクセラレータ ファイルで、 os:preview 要素によって表します。 ユーザーがメニュー項目をポイントすると、Internet Explorer が HTTP 要求を実行し、その結果の HTML を HTML プレビュー ウィンドウに表示します。

サイズ

プレビュー ウィンドウのサイズは、96 dpi (ドット/インチ) ディスプレイで、高さ 240、幅 320 に制限されます。 この領域外の内容はすべて切り取られます。 スクロール バーのあるコントロールを表示するコンテンツの挿入はお勧めできません。 プレビュー機能の目的は、ごく簡単な対話でユーザーがすばやく情報を表示できるようにすることです。

内容

プレビューのスクリプト リソースは、アクセラレータの os:homepageUrl と同じドメインに制限されます。そのドメイン用に Microsoft ActiveX コントロールが既にインストールされている場合は、ActiveX コントロールもサポートされます。

移動

ユーザーはリンクを使用してプレビュー ウィンドウ内を移動できます。 ユーザーを完全な Web ページに移動させるには、新しいウィンドウを開くようにリンクを設定します。 これには、次の 2 とおりの方法があります。

  1. target 属性をハイパーリンクの一部分として "_blank" に設定します。 ブラウザーが起動されると、これが新しいタブとして開かれます。

    <a href="gotosite.html" target="_blank">view full site</A>  

  2. open メソッドを使用し、入力 URL を移動先のサイトに設定します。

    <FORM>
    <INPUT type="button" value="View Full Site"
    onClick="window.open(gotosite.html')" />
    </FORM>  

ローカライズ

OpenService アクセラレータ ファイルでサポートできるロケールは 1 つだけです。 サービスが複数のロケールをサポートする場合、言語ごとに個別の XML ファイルが必要となります。 os:nameos:description にロケールに適したテキストを使用することに加え、category 属性の値もユーザーの言語にローカライズする必要があります。 これらのアクセラレータを提供する Web ページでは、要求の accept-language ヘッダーを使用して、ユーザーがインストールする正しい XML ファイルを決定し、表示する必要があります。

英語の例

<?xml version="1.0" encoding="UTF-8"?>
<os:openServiceDescription
    xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">
    <os:homepageUrl>http://maps.yahoo.com</os:homepageUrl>
    <os:display>
        <os:name>Map with Yahoo!</os:name>
    </os:display>
    <os:activity category="Map">
    ...
</os:openServiceDescription>  

スペイン語の例

<?xml version="1.0" encoding="UTF-8"?>
<os:openServiceDescription
    xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">
    <os:homepageUrl>http://maps.yahoo.com</os:homepageUrl>
    <os:display>
        <os:name>Mapa con Yahoo!</os:name>
    </os:display>
    <os:activity category="Mapa">
    ...
</os:openServiceDescription>  

ユーザーがアクセラレータを複数のロケールでインストールした場合は、それぞれのロケールが表示されます。

インストール

アクセラレータは サービス ガイド Web ページを通じて Internet Explorer 8 にインストールされます。 Web サイトでは、独自のアクセラレータを提供することもできます。

最初のステップは、Web サーバーで OpenService アクセラレータ XML ファイルを公開することです。 ローカル システムからのアクセラレータ XML ファイルのインストールは認められません。ただし、テスト目的であれば、Microsoft Internet Information Server (IIS) ローカルホストまたは Microsoft Visual Studio の ASP.NET サーバーを使用できます。

次に、クリックすると AddService を呼び出す、[アクセラレータ プロバイダーの追加] ボタンを追加します。

<button id="myButton"
    onclick="window.external.AddService('http://www.example.com/activity.xml')">
    Add MyMap to the shortcut menu in Internet Explorer 8</button> 

IsServiceInstalled を呼び出して、ユーザーが現在アクセラレータをインストールしているかどうかを確認することができます。 このチェックを実行するには、Web ページのドメインが OpenService アクセラレータ ファイルで指定された os:homepageUrl のドメインと一致している必要があります。

window.onload = function() {
    if (window.external.IsServiceInstalled('http://www.example.com','map')) {
        document.getElementById('myButton').disabled = true;
    }
}

戻り値が 0 の場合、アクセラレータはインストールされていません。

OpenService アクセラレータ フォーマット

ここでは、OpenService アクセラレータ ファイル フォーマットの要素、属性、および値について説明します。

次の XML ベース アクセラレータでは、ブラウザーと地図サービスの対話を記述しています。

<?xml version="1.0" encoding="UTF-8"?>
<os:openServiceDescription
    xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">
    <os:homepageUrl>http://maps.example.com</os:homepageUrl>
    <os:display>
        <os:name>Map with MyMap</os:name>
        <os:icon>http://www.example.com/favicon.ico</os:icon>
        <os:description>Map addresses easily with MyMap.</os:description>
    </os:display>
    <os:activity category="Map">
        <os:activityAction context="selection">
            <os:preview action="http://maps.example.com/preview.php?addr={selection}" />
            <os:execute action="http://maps.example.com/" method="get">
                <os:parameter name="addr" value="{selection}" type="text" /> 
            </os:execute>
        </os:activityAction>
    </os:activity>
</os:openServiceDescription> 

os:openServiceDescription

<os:openServiceDescription
    xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">

OpenService アクセラレータ ファイルのルート要素は、 os:openServiceDescription です。 xmlns 属性は必須であり、値を http://www.microsoft.com/schemas/openservicedescription/1.0 に設定する必要があります。

os:homepageUrl

<os:homepageUrl>http://maps.example.com</os:homepageUrl>

必須。 os:homepageUrl 要素は、ユーザーがブラウザー経由でサービスにアクセスできる、アクセラレータのメイン URL を定義します。 OpenService アクセラレータ ファイル内で宣言する URL はすべて os:homepageUrl と同じドメインを使用する必要があります。

os:display

<os:display> 

必須。 os:display 要素は、ユーザーへのアクセラレータの表示方法を定義します。 この要素には、os:name および os:icon 要素の両方の要素が含まれます。

os:name

<os:name>Map with MyMap</os:name>

必須。 コンテキスト メニューでユーザーに表示されるアクセラレータの os:name です。 アクセラレータの名前は動詞で始まり、その後ろに続いてサービス プロバイダーを指定する必要があります。 たとえば、"Map on Windows Live" または "Define with Encarta" と指定します。

os:icon

<os:icon>http://www.example.com/favicon.ico</os:icon>

オプション。 os:icon 要素は、このアクセラレータの 16 x 16 ピクセル アイコンへの URL を提供します。 使用するドメイン名は os:homepageUrl と一致する必要があります。

os:description

<os:description>Map addresses easily with MyMap.</os:description> 

オプション。 os:description 要素は、[アドオンの管理] ダイアログ ボックスに表示されるアクセラレータの長い形式の説明を提供します。

os:activity

<os:activity category="Map">

必須。 os:activity 要素には、アクセラレータの全機能が含まれます。

os:activity ごとに、提供する機能の種類を示す category 属性を指定する必要があります。 希望する操作をすばやく実行できるよう、ブラウザーのコンテキスト メニューではアクセラレータがカテゴリ別に表示されています。 既定のアクセラレータは、ユーザーがアクセラレータをインストールする際に選択することも、[アドオンの管理] ダイアログ ボックスを使用して選択することもできます。 既定のアクセラレータは、ブラウザーのコンテキスト メニューに表示されます。それ以外のすべてのアクセラレータは、サブメニューに表示されます。 詳細については、「カテゴリ」を参照してください。

os:activityAction

<os:activityAction context="selection">

必須。 os:activityAction ごとに、アクセラレータのターゲットに基づいてサービス プロバイダーとの対話を指定します。 オプションの context 属性は、ターゲットを指定します。 既定値は selection です。

コンテキスト 説明
document 現在のドキュメント。 常に使用可能です。
selection 既定値。 選択されたテキスト。 特定の領域をクリックした場合のみ、アクセラレータが使用可能です。
link ハイパーリンク。 リンクでのみアクセラレータが使用可能です。

os:preview

<os:preview action="http://maps.example.com/preview.php?addr={selection}" />

オプション。 os:preview 要素は、ユーザーがアクセラレータをポイントしたときに表示される HTML ウィンドウの内容を定義します。 この要素の属性および子要素は、os:execute 要素と共通です。 詳細については、「プレビュー」を参照してください。

action 属性の URL には、コマンド実行時に置き換えられる変数を含めることができます。 詳細については、「変数」を参照してください。

os:execute

<os:execute action="http://maps.example.com/" method="get"> 

必須。 os:execute 要素は、ユーザーがアクセラレータを起動したときにトリガーされるメイン アクションを指定します。 os:preview と同様、action 属性に置換変数を含めることもできます。また、個別の os:parameter 要素を指定することもできます。

os:execute および os:preview 用に次の属性が定義されています。

属性 必須 説明
action HTTP 送信に使用する URL テンプレート。
method × 使用する HTTP メソッドの種類 (get、post)。 既定値は get です。
enctype × サーバーに送信されるコンテンツの種類。 既定値は application/x-www-form-urlencoded です。
accept-charset × 送信に使用する文字セット。 既定値は utf-8 です。

os:parameter

<os:parameter name="addr" value="{selection}" type="text" /> 

オプション。 os:parameter 要素は、使用する値を別の方法で表現します。 必須の name 属性および value 属性は、サービスに固有の文字列入力を定義し、通常はアクセラレータの変数を表します。 変数の一覧については、「変数」を参照してください。

オプションの type 属性は、{selection} 変数を HTML またはプレーンテキストに変換するために使用します。 既定値は text です。

関連トピック