WebView.NavigateToLocalStreamUri(Uri, IUriToStreamResolver) メソッド

定義

IUriToStreamResolver を使用して、指定した URI でローカル Web コンテンツを読み込みます。

public:
 virtual void NavigateToLocalStreamUri(Uri ^ source, IUriToStreamResolver ^ streamResolver) = NavigateToLocalStreamUri;
void NavigateToLocalStreamUri(Uri const& source, IUriToStreamResolver const& streamResolver);
public void NavigateToLocalStreamUri(System.Uri source, IUriToStreamResolver streamResolver);
function navigateToLocalStreamUri(source, streamResolver)
Public Sub NavigateToLocalStreamUri (source As Uri, streamResolver As IUriToStreamResolver)

パラメーター

source
Uri Uri

読み込むローカル HTML コンテンツを識別する URI。

streamResolver
IUriToStreamResolver

読み込むストリームに URI を変換するリゾルバー。

Windows の要件

アプリの機能
enterpriseCloudSSO

次のコード例は、アプリ パッケージからファイルを提供するリゾルバーを作成して使用する方法を示しています。 完全な例については、 XAML WebView コントロールのサンプルを参照してください。

public sealed partial class TestPage : Page
{
    // ... other code ...

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        // The 'Host' part of the URI for the ms-local-stream protocol needs to be a combination of the package name
        // and an application-defined key, which identifies the specific resolver, in this case 'MyTag'.

        Uri url = webView4.BuildLocalStreamUri("MyTag","/Minesweeper/default.html");
        StreamUriWinRTResolver myResolver = new StreamUriWinRTResolver();

        // Pass the resolver object to the navigate call.
        webView4.NavigateToLocalStreamUri(url, myResolver);
    }
}

public sealed class StreamUriWinRTResolver : IUriToStreamResolver
{
    public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri)
    {
        if (uri == null)
        {
            throw new Exception();
        }
        string path = uri.AbsolutePath;

        // Because of the signature of the this method, it can't use await, so we 
        // call into a separate helper method that can use the C# await pattern.
        return GetContent(path).AsAsyncOperation();
    }

    private async Task<IInputStream> GetContent(string path)
    {
        // We use a package folder as the source, but the same principle should apply
        // when supplying content from other locations
        try
        {
            Uri localUri= new Uri("ms-appx:///html" + path);
            StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(localUri);
            IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read);
            return stream;
        }
        catch (Exception) { throw new Exception("Invalid path"); }
    }
}

注釈

NavigateToString メソッドが処理しないローカル コンテンツを読み込むには、このメソッドを使用します。 NavigateToString は、CSS、スクリプト、画像、フォントなどのリソースへの参照を含むコンテンツを含む、静的 HTML コンテンツに簡単に移動する方法を提供します。 ただし、 NavigateToString では、これらのリソースをプログラムで生成する方法は提供されません。

NavigateToLocalStreamUri メソッドを使用するには、URI パターンをコンテンツ ストリームに変換する IUriToStreamResolver 実装を渡す必要があります。 これを行うと、Web ページまたは一連のページで使用されるすべてのリソースのコンテンツを提供できます。 たとえば、このメソッドを使用して、ローカル ファイル システムに保存されたコンテンツを暗号化されたファイルまたは cab パッケージとして表示できます。 コンテンツが要求されたら、 IUriToStreamResolver 実装を使用して、その場で復号化できます。

IUriToStreamResolver インターフェイスには、URI を受け取ってストリームを返す UriToStreamAsync という 1 つのメソッドがあります。 URI は "ms-local-stream://appname_KEY/folder/file" の形式で、KEY はリゾルバーを識別します。 BuildLocalStreamUri を使用して、読み込むローカル コンテンツを参照する正しい形式の URI を作成します。

注意

IUriToStreamResolver の実装は、UI スレッドが続行する前に IUriToStreamResolver の作業が完了するのを待機するときに発生する可能性があるデッドロックを防ぐためにアジャイルである必要があります。 詳細については、「スレッドとマーシャリング」を参照してください。

アプリに機能がある enterpriseCloudSSO 場合、WebView コントロール内でホストされている Web ページでは、Azure Active Directory (AAD) リソースでシングル サインオンを使用できます。

適用対象

こちらもご覧ください