WebView.NavigateToLocalStreamUri Method

使用 IUriToStreamResolver 加载指定 URI 处的本地 Web 内容。

语法


public void NavigateToLocalStreamUri(
  Uri source, 
  IUriToStreamResolver streamResolver
)

参数

source

类型: System.Uri [.NET] | Windows::Foundation::Uri [C++]

标识要加载的本地 HTML 内容的 URI。

streamResolver

类型: IUriToStreamResolver

将 URI 转换为流以加载的解析器。

备注

使用此方法可加载 NavigateToString 方法不会处理的本地内容。NavigateToString 提供了导航到静态 HTML 内容(包括带有对资源的引用的内容,如 CSS、脚本、图像和字体)的简单方法。但是,NavigateToString 不提供以编程方式生成这些资源的方式。

若要使用 NavigateToLocalStreamUri 方法,您必须传入 IUriToStreamResolver 实现以将 URI 模式转换为内容流。您可执行此操作以为一个网页或一系列网页使用的所有资源提供此内容。例如,可以使用此方法显示作为加密文件保存在本地文件系统中的内容或保存在 cab 程序包中的内容。请求内容时,您可使用 IUriToStreamResolver 实现来即时解密内容。

IUriToStreamResolver 接口具有采用 URI 并返回流的方法 UriToStreamAsync。URI 的格式为“ms-local-stream://appname_KEY/folder/file”,其中 KEY 标识解析程序。 使用 BuildLocalStreamUri 可以正确格式创建引用要加载的本地内容的 URI。

注意  您的 IUriToStreamResolver 实现必须是敏捷的,以便防止在 UI 线程等待 IUriToStreamResolver 完成其工作以继续时可能发生的死锁。有关更多信息,请参见线程处理和封送处理

示例

以下代码示例演示如何创建并使用从应用程序包提供文件的解析器。有关完整的示例,请参见 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 seperate 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"); }
    }
}


要求

最低支持客户端

Windows 8.1

最低支持服务器

Windows Server 2012 R2

命名空间

Windows.UI.Xaml.Controls
Windows::UI::Xaml::Controls [C++]

元数据

Windows.winmd

另请参见

WebView
IUriToStreamResolver
BuildLocalStreamUri
XAML WebView 控件示例

 

 

显示:
© 2015 Microsoft