WPF XAML ブラウザー アプリケーションの概要
XAML ブラウザー アプリケーション (XBAP) は、Web アプリケーションとリッチ クライアント アプリケーションの両方の機能を組み合わせたものになります。 Web アプリケーションと同様に、XBAP を Web サーバーにデプロイし、Internet Explorer または Windows 上の Firefox から起動できます。 リッチ クライアント アプリケーションと同様に、XBAP は WPF の機能を利用できます。 XBAP の開発は、リッチ クライアント開発にも似ています。 このトピックでは、XBAP 開発の概要を簡単に説明し、XBAP 開発と標準リッチ クライアント開発の違いについて説明します。
警告
XBAP では、Internet Explorer や古いバージョンの Firefox など、従来のブラウザーが動作する必要があります。 これらの古いブラウザーは、通常、Windows 10 および Windows 11 ではサポートされていません。 最新のブラウザーでは、セキュリティ リスクのために XBAP アプリに必要なテクノロジがサポートされなくなりました。 XBAP を有効にするプラグインはサポートされなくなりました。 詳細については、「WPF ブラウザーでホストされるアプリケーション (XBAP)についてよく寄せられる質問を参照してください。
このトピックには、次のセクションが含まれています。
新しい XAML ブラウザー アプリケーションの作成 (XBAP)
新しい XBAP プロジェクトを作成する最も簡単な方法は、Visual Studio を使用することです。 新しいプロジェクトを作成するときに、テンプレート 一覧から WPF ブラウザー アプリケーション を選択します。 詳細については、「方法: 新しい WPF ブラウザー アプリケーション プロジェクトを作成する」を参照してください。
XBAP プロジェクトを実行すると、スタンドアロン ウィンドウではなくブラウザー ウィンドウで開きます。 Visual StudioからXBAPをデバッグすると、アプリケーションはインターネットゾーンのアクセス許可で実行されるため、そのアクセス許可を超過した場合、セキュリティ例外が発生します。 詳細については、「セキュリティ」と「WPF 部分信頼セキュリティ」を参照してください。
手記
Visual Studio を使用して開発していない場合、またはプロジェクト ファイルの詳細については、「WPF アプリケーションのビルド」を参照してください。
XBAP のデプロイ
XBAP をビルドすると、出力には次の 3 つのファイルが含まれます。
ファイル | 説明 |
---|---|
実行可能ファイル (.exe) | これにはコンパイル済みのコードが含まれており、.exe 拡張機能があります。 |
アプリケーション マニフェスト (.manifest) | これには、アプリケーションに関連付けられているメタデータが含まれており、拡張子が .manifest です。 |
配置マニフェスト (.xbap) | このファイルには、ClickOnce がアプリケーションの配置に使用する情報が含まれており、拡張子は .xbap です。 |
XBAP は、Microsoft インターネット インフォメーション サービス (IIS) 5.0 以降のバージョンなど、Web サーバーに展開します。 Web サーバーに .NET Framework をインストールする必要はありませんが、WPF 多目的インターネット メール拡張機能 (MIME) の種類とファイル名拡張子を登録する必要があります。 詳細については、「WPF アプリケーションを展開するように IIS 5.0 と IIS 6.0 を構成する」を参照してください。
XBAP をデプロイ用に準備するには、.exe と関連するマニフェストを Web サーバーにコピーします。 .xbap 拡張子を持つファイルである配置マニフェストを開くハイパーリンクを含む HTML ページを作成します。 ユーザーが .xbap ファイルへのリンクをクリックすると、ClickOnce はアプリケーションのダウンロードと起動の仕組みを自動的に処理します。 次のコード例は、XBAP を指すハイパーリンクを含む HTML ページを示しています。
<html>
<head></head>
<body>
<a href="XbapEx.xbap">Click this link to launch the application</a>
</body>
</html>
Web ページのフレームで XBAP をホストすることもできます。 1 つまたは複数のフレームを含む Web ページを作成します。 フレームのソース プロパティを配置マニフェスト ファイルに設定します。 組み込みメカニズムを使用してホスティング Web ページと XBAP の間で通信する場合は、フレーム内でアプリケーションをホストする必要があります。 次のコード例は、2 つのフレームを含む HTML ページを示しています。2 番目のフレームのソースは XBAP に設定されています。
<html>
<head>
<title>A page with frames</title>
</head>
<frameset cols="50%,50%">
<frame src="introduction.htm">
<frame src="XbapEx.xbap">
</frameset>
</html>
キャッシュされた XBAP のクリア
XBAP の再構築と開始後に、以前のバージョンの XBAP が開かれている場合があります。 たとえば、この動作は、XBAP アセンブリのバージョン番号が静的であり、コマンド ラインから XBAP を開始するときに発生する可能性があります。 この場合、キャッシュされたバージョン (以前に開始されたバージョン) と新しいバージョンの間のバージョン番号は変わらないため、XBAP の新しいバージョンはダウンロードされません。 代わりに、キャッシュされたバージョンが読み込まれます。
このような場合は、コマンド プロンプトで Mage コマンド (Visual Studio または Windows SDK と共にインストール) を使用して、キャッシュされたバージョンを削除できます。 次のコマンドは、アプリケーション キャッシュをクリアします。
Mage.exe -cc
このコマンドにより、最新バージョンの XBAP が起動することが保証されます。 Visual Studio でアプリケーションをデバッグするときは、最新バージョンの XBAP を開始する必要があります。 一般に、デプロイバージョン番号はビルドごとに更新する必要があります。 Mage の詳細については、「Mage.exe (マニフェスト生成および編集ツール)を参照してください。
ホスト Web ページとの通信
アプリケーションが HTML フレームでホストされている場合は、XBAP を含む Web ページと通信できます。 これを行うには、BrowserInteropHelperの HostScript プロパティを取得します。 このプロパティは、HTML ウィンドウを表すスクリプト オブジェクトを返します。 その後、通常のドット構文を使用して、ウィンドウ オブジェクト のプロパティ、メソッド、およびイベントにアクセスできます。 スクリプト メソッドとグローバル変数にアクセスすることもできます。 次の例は、スクリプト オブジェクトを取得してブラウザーを閉じる方法を示しています。
private void Button_Click(object sender, RoutedEventArgs e)
{
// Retrieve the script object. The XBAP must be hosted in a frame or
// the HostScript object will be null.
var scriptObject = BrowserInteropHelper.HostScript;
// Call close to close the browser window.
scriptObject.Close();
}
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
' Retrieve the script object The XBAP must be hosted in a frame or
' the HostScript object will be null.
Dim scriptObject = BrowserInteropHelper.HostScript
' Call close to close the browser window.
scriptObject.Close()
End Sub
HostScript を使用する XBAP のデバッグ
XBAP で HostScript オブジェクトを使用して HTML ウィンドウと通信する場合、Visual Studio でアプリケーションを実行およびデバッグするために指定する必要がある 2 つの設定があります。 アプリケーションは、元のサイトにアクセスできる必要があり、XBAP を含む HTML ページでアプリケーションを開始する必要があります。 次の手順では、これら 2 つの設定を確認する方法について説明します。
Visual Studio で、プロジェクトのプロパティを開きます。
[セキュリティ] タブで、[詳細設定]をクリックします。
[セキュリティの詳細設定] ダイアログ ボックスが表示されます。
[
アプリケーションに配信元サイトへのアクセスを許可する ] チェック ボックスがオンになっていることを確認し、[OK]クリックします。 [デバッグ] タブで、[URL を使用してブラウザーを開始] オプションを選択し、XBAP を含む HTML ページの URL を指定します。
Internet Explorer で、[
ツール] ボタンをクリックし、[インターネット オプション]選択します。 [インターネット オプション] ダイアログ ボックスが表示されます。
[詳細設定] タブをクリックします。
[
設定] の一覧の [セキュリティ ] で、[マイ コンピューター のファイルでアクティブなコンテンツの実行を許可する] チェック ボックスをオンにします。 [OK]をクリックします。
変更は、Internet Explorer を再起動した後に有効になります。
注意
Internet Explorer でアクティブなコンテンツを有効にすると、コンピューターが危険にさらされる可能性があります。 Internet Explorer のセキュリティ設定を変更しない場合は、サーバーから HTML ページを起動し、Visual Studio デバッガーをプロセスにアタッチできます。
XBAP のセキュリティに関する考慮事項
XBAP は通常、インターネット ゾーンのアクセス許可セットに制限されている部分信頼セキュリティ サンドボックスで実行されます。 そのため、実装では、インターネット ゾーンでサポートされている WPF 要素のサブセットをサポートするか、アプリケーションのアクセス許可を昇格する必要があります。 詳細については、「セキュリティ」を参照してください。
アプリケーションで WebBrowser コントロールを使用すると、WPF はネイティブ WebBrowser ActiveX コントロールを内部的にインスタンス化します。 アプリケーションが Internet Explorer で実行されている部分信頼 XBAP である場合、ActiveX コントロールは Internet Explorer プロセスの専用スレッドで実行されます。 そのため、次の制限が適用されます。
WebBrowser コントロールは、セキュリティ制限など、ホスト ブラウザーと同様の動作を提供する必要があります。 これらのセキュリティ制限の一部は、Internet Explorer のセキュリティ設定を使用して制御できます。 詳細については、「セキュリティ」を参照してください。
XBAP が HTML ページでドメインをまたいでロードされると、例外がスローされます。
入力は WPF WebBrowserとは別のスレッド上にあるため、キーボード入力をインターセプトできず、IME の状態は共有されません。
別のスレッドで ActiveX コントロールが実行されているため、ナビゲーションのタイミングまたは順序が異なる場合があります。 たとえば、別のナビゲーション要求を開始することで、ページへの移動が必ずしも取り消されるとは限りません。
カスタム ActiveX コントロールは、WPF アプリケーションが別のスレッドで実行されているため、通信に問題がある可能性があります。
HwndHost は別のスレッドまたはプロセスで実行されているウィンドウをサブクラス化できないため、MessageHook は発生しません。
完全な信頼の XBAP の作成
XBAP で完全信頼が必要な場合は、プロジェクトを変更してこのアクセス許可を有効にすることができます。 次の手順では、完全信頼を有効にする方法について説明します。
Visual Studio で、プロジェクトのプロパティを開きます。
[セキュリティ] タブで、[これは完全信頼のアプリケーションです] オプションを選択します。
この設定により、次の変更が行われます。
プロジェクト ファイルでは、
<TargetZone>
要素の値がCustom
に変更されます。アプリケーション マニフェスト (app.manifest) で、
Unrestricted="true"
属性が 'PermissionSet 要素に追加されます。<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
Full-Trust XBAP のデプロイ
ClickOnce 信頼配置モデルに従わない完全信頼 XBAP を配置する場合、ユーザーがアプリケーションを実行するときの動作はセキュリティ ゾーンによって異なります。 場合によっては、ユーザーがインストールしようとすると警告が表示されます。 ユーザーは、インストールの続行またはキャンセルを選択できます。 次の表では、各セキュリティ ゾーンのアプリケーションの動作と、アプリケーションが完全な信頼を受け取るために必要な操作について説明します。
セキュリティ ゾーン | 行動 | 完全信頼の取得 |
---|---|---|
ローカル コンピューター | 自動完全信頼 | アクションは必要ありません。 |
イントラネットサイトと信頼済みサイト | 完全な信頼の提供を要求する | ユーザーがプロンプトにソースを表示できるように、証明書を使用して XBAP に署名します。 |
インターネット | "信頼が付与されていません" で失敗する | 証明書を使用して XBAP に署名します。 |
手記
前の表で説明した動作は、ClickOnce 信頼済み配置モデルに従わない完全信頼 XBAP 用です。
完全信頼 XBAP を配置するには、ClickOnce 信頼済み配置モデルを使用することをお勧めします。 このモデルを使用すると、セキュリティ ゾーンに関係なく XBAP に完全信頼を自動的に付与できるため、ユーザーにメッセージが表示されません。 このモデルの一部として、信頼できる発行元からの証明書を使用してアプリケーションに署名する必要があります。 詳細については、「信頼されたアプリケーションの展開の概要 」および「コード署名の概要」を参照してください。
XBAP 開始時刻のパフォーマンスに関する考慮事項
XBAP パフォーマンスの重要な側面は、開始時刻です。 XBAP が読み込む最初の WPF アプリケーションである場合、コールド スタート 時間は 10 秒以上になる可能性があります。 これは、進行状況ページが WPF によってレンダリングされ、アプリケーションを表示するには CLR と WPF の両方がコールド スタートされている必要があるためです。
.NET Framework 3.5 SP1 以降では、展開サイクルの早い段階でアンマネージド進行状況ページを表示することで、XBAP のコールド スタート時間が軽減されます。 進行状況ページは、ネイティブ ホスティング コードによって表示され、HTML でレンダリングされるため、アプリケーションの起動直後に表示されます。
さらに、ClickOnce ダウンロード シーケンスのコンカレンシーが向上すると、開始時刻が最大 10% 向上します。 ClickOnce がマニフェストをダウンロードして検証すると、アプリケーションのダウンロードが開始され、進行状況バーの更新が開始されます。
関連項目
- Web サービス を呼び出す XAML ブラウザー アプリケーションをデバッグするように Visual Studio を構成する
- WPF アプリケーション のデプロイ
.NET Desktop feedback