Hebikuzure's Tech Memo

2010年2月21日

検索プロバイダー: 既定の設定のベスト プラクティス

Filed under: Internet Explorer — hebikuzure @ 4:36 AM

Search Providers: Best Practices on Setting the Default
http://blogs.msdn.com/ie/archive/2010/02/17/search-providers-best-practices-on-setting-the-default.aspx


ユーザー エクスペリエンスを考慮した仕様を作っても、アドオンがそれにうまく対応していないとかえってユーザーの混乱や不満の元になってしまう場合もあります。IE の開発サイドとしては「お行儀の悪い」アドオンは早く改善してほしいのでしょうね。

以下の文章は IE Blog の 2/17 の記事 Search Providers: Best Practices on Setting the Default を hebikuzure が私的に試訳したものです。翻訳については Microsoft Corporation およびマイクロソフト株式会社とは無関係に hebikuzure が公開情報に基づき独自に行ったものであり、この文書の内容についての文責は公開者である hebikuzure にあります。翻訳の内容および技術的内容については正確を期すよう十分な注意を払っておりますが、誤りや不正確な部分が含まれている可能性がありますので、本文書を利用される際には原文も併せてご確認ください。


検索プロバイダー: 既定の設定のベスト プラクティス

この記事では既定の検索プロバイダーの設定についてのベスト プラクティスについて説明しています。我々の目標は引き続きユーザーが自分のブラウザーを制御できる事であり、公開しているアドオン開発についてのガイドラインと要件に準じています。

もし開発しているソフトウェアが、直接レジストリを操作することで Internet Explorer の検索設定や既定のプロバイダーを変更しているのであれば、そのソフトウェアはユーザーの混乱と不満の原因となっているでしょう。

プログラムが既定の検索プロバイダーを直接レジストリを操作する (例えば以前のブログ記事で説明したように DefaultScope レジストリ キーを直接編集する) ことで変更しようとすると、IE8 は変更を検出してユーザーにどうするか確認する画面を表示します:

1: このダイアログでは、推奨されている SetDefault API を使って属性をクリアし、既定の検索設定を変更しようとしているソフトウェアが表示されます。この例では Contoso Internet Toolbar です。

複数の検索プロバイダーが、変更が加えられるたびにレジストリ キーをリセットしようとすると、ユーザーの使い勝手は混乱し不満が生じるでしょう。キーが直接変更されるごとに上のダイアログボックスが何度も表示されるからです。

IE8 はこうしたシナリオに対応した既定の検索プロバイダー設定のやり方が備わっています。あなたのソフトウェアが (検索プロバイダーをインストールするために) IOpenServiceManager API を利用すれば、ユーザーは何がどうなるのか明確に理解できます。この透明性は、ユーザーが主導権を持つという事において重要な一部です。

以下のサンプル コードは推奨されている API を使い、検索プロバイダーをインストールしてユーザーに既定として設定するよう求める方法を示しています。

#include <windows.h>
#include <atlbase.h>
#include <openservice.h>

    HRESULT hr = E_FAIL;
    BOOL fComInitialized = FALSE;

    if (S_OK == CoInitialize(NULL))
    {

        fComInitialized = TRUE;

        //Open a handle to the OpenService manager
        CComPtr<IOpenServiceManager> spManager;
        hr = spManager.CoCreateInstance(CLSID_OpenServiceManager);

        if (SUCCEEDED(hr))
        {
            CComPtr<IOpenService> spService;

            //Install my search provider
            //URL-OF-SERVICE: See http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_elements 
            hr = spManager->InstallService(URL-OF-SERVICE, &spService);

            if (hr==S_OK)
            {
                //Request that the user changes their search default
                hr = spService->SetDefault(TRUE, NULL);
            }
        }
    }


    if (fComInitialized)
    {
        CoUninitialize();
    }



SetDefault
API が呼ばれると、ユーザーに既定の検索プロバイダーを変更するよう求める上記のダイアログ ( 1 参照) が表示されます。ユーザーはソフトウェアからの要求を受け入れる事も、拒否することもできます。ユーザーが受け入れた場合、ソフトウェアは既定の設定を変更できます。拒否された場合は当然、ソフトウェアはユーザーの既定の設定を変更できません。ユーザーはいつでもアドオンの管理ウィンドウを開いて設定を変更できます。

SetDefault API をコールするバイナリが有効なコード署名証明書で署名されている場合、プログラム名と発行者が上記 1 で示した既定の検索プロバイダー ダイアログ ボックスに表示されます。そのため SetDefault をコールするコードには署名を付けるべきです。

要するに、もしあなたのソフトウェアが直接 DefaultScope レジストリ キーを監視しているなら、推奨されている API を使用するようにコードを更新してください。そうするとアドオン開発のガイドラインに沿うので、ユーザーが既定の検索プロバイダー ダイアログ見るのは一度だけになり、ユーザーが自分自身の既定の設定を完全にコントロールできるようになります。

もし OpenSearch Extensibility について詳しくなく、これから始めようと思っていたり自分のサービスにどのように適用しようか調べようと思っていたりするなら、Search Provider Extensibility in Internet Explorer の記事をぜひご覧ください。

またお会いしましょう。

Duc (Cash) Vo

プログラマー ライター

Internet Explorer

広告

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.

%d人のブロガーが「いいね」をつけました。