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

URI,識別要載入的本機 HTML 內容。

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 方法,您必須傳入 IUriToStreamResolver 實作,以將 URI 模式轉譯成內容資料流程。 您可以這麼做,為網頁或一系列頁面所使用的所有資源提供內容。 例如,您可以使用這個方法,將儲存在本機檔案系統上的內容顯示為加密檔案或 cab 套件中。 要求內容時,您可以使用 IUriToStreamResolver 實作即時解密內容。

IUriToStreamResolver介面有一種方法UriToStreamAsync,它會接受 URI 並傳回資料流程。 URI 的格式為 「ms-local-stream://appname_KEY/folder/file」,其中 KEY 會識別解析程式。 使用 BuildLocalStreamUri 以正確的格式建立 URI,參考要載入的本機內容。

注意

您的 IUriToStreamResolver實作必須是敏捷式,以防止在 UI 執行緒等候IUriToStreamResolver完成其工作之前發生的死結。 如需詳細資訊,請參閱 執行緒和封送處理

如果應用程式擁有 enterpriseCloudSSO 功能,則裝載于 WebView 控制項內的網頁可以搭配 Azure Active Directory (AAD) 資源使用單一登入。

適用於

另請參閱