다음을 통해 공유


WebView.NavigateToLocalStreamUri(Uri, IUriToStreamResolver) 메서드

정의

IUriToStreamResolver를 사용하여 지정된 URI에서 로컬 웹 콘텐츠를 로드합니다.

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 구현을 전달해야 합니다. 이 작업을 수행하여 웹 페이지 또는 일련의 페이지에서 사용하는 모든 리소스에 대한 콘텐츠를 제공할 수 있습니다. 예를 들어 이 메서드를 사용하여 로컬 파일 시스템에 저장된 콘텐츠를 암호화된 파일 또는 cab 패키지로 표시할 수 있습니다. 콘텐츠가 요청되면 IUriToStreamResolver 구현을 사용하여 즉시 해독할 수 있습니다.

IUriToStreamResolver 인터페이스에는 URI를 사용하고 스트림을 반환하는 UriToStreamAsync 메서드가 하나 있습니다. URI는 KEY가 확인자를 식별하는 "ms-local-stream://appname_KEY/folder/file" 형식입니다. BuildLocalStreamUri를 사용하여 로드할 로컬 콘텐츠를 참조하는 올바른 형식의 URI를 만듭니다.

참고

IUriToStreamResolver 구현은 UI 스레드가 계속하기 전에 IUriToStreamResolver가 작업을 완료할 때까지 대기할 때 발생할 수 있는 교착 상태를 방지하기 위해 민첩해야 합니다. 자세한 내용은 스레딩 및 마샬링을 참조하세요.

앱에 기능이 있는 enterpriseCloudSSO 경우 WebView 컨트롤 내에서 호스트되는 웹 페이지는 AAD(Azure Active Directory) 리소스에서 Single Sign-On을 사용할 수 있습니다.

적용 대상

추가 정보