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 提供了一种简单的方法来导航到静态 HTML 内容,包括引用了 CSS、脚本、图像和字体等资源的内容。 但是, NavigateToString 不提供以编程方式生成这些资源的方法。

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

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

注意

IUriToStreamResolver 实现必须是敏捷的,以防止在 UI 线程等待 IUriToStreamResolver 完成其工作后再继续时可能发生的死锁。 有关详细信息,请参阅 线程处理和封送处理

如果应用拥有 enterpriseCloudSSO 该功能,则托管在 WebView 控件内的网页可以使用单一登录与 Azure Active Directory (AAD) 资源。

适用于

另请参阅