2016-12-30 2 views
2

일부 HTML (다른 방법으로 외부 소스에서받은)을 WebView에로드하고이 HTML에서 참조되는 이미지를 표시하는 코드를 작성해야합니다. 이러한 이미지는 Windows.Storage.ApplicationData.Current.LocalFolder의 어딘가에 저장됩니다.UWP WebView 컨트롤에 로컬 이미지 표시

use local image to display in webview for windows phone 8.1 또는 Use local images in Webbrowser control에 대한 제안 사항이 없습니다. 내가 web.NavigateToString (HTML)와 같은 HTML로드하는 경우 :

<html><head></head><body>A <img src="file:///c:/Users/idh/AppData/Local/Packages/d783af9f-88eb-42f5-ab0f-abb025f32baa_5cy2zb9g43kb2/LocalState/folder/image001.jpg"> B</body></html> 

을 그냥 A B가 표시 얻을. 나는 파일 뒤에 슬래시와 백 슬래시, 더블과 트리플 슬래시를 시도했다. : ms-appx :와 file : 등의 상대 경로. 이미지는 결코 표시되지 않는다. 동시에 HTML 파일에 저장하고 내 앱 외부에서 열면 괜찮습니다. 나는 또한 성공적으로 저장하고 이러한 파일을 읽습니다 (내 응용 프로그램이 무단으로 액세스 할 수 없으므로 폴더에 실제로 나타납니다). package.manifest는 사설 네트워크를 포함합니다.

저는 실제 응용 프로그램 개발자가 아니기 때문에 base64, 사용자 지정 URI 리졸버 및 기타 특수 기술을 사용하지 않는 것이 좋습니다. HTML을 가져 와서 이미지를 로컬 저장소에 저장하는 라이브러리를 만듭니다. 이제는 이전 .NET 프레임 워크에서했던 것처럼 WebView에 저장된 콘텐트를 시각화하는 데 사용하기 쉬운 메서드를 보여줄 필요가 있습니다. 나는. 나는 실제로 내 라이브러리의 사용자 인 개발자를위한 샘플을 작성하고 있으며이 사람들은이 샘플을 사용하여이 HTML 및 이미지를 처리합니다.

최후의 수단으로 필자는 UWP 버전의 샘플을 base64 또는 사용자 지정 해결 프로그램으로 작성할 수 있습니다. 반면 (일반 .NET Framework와 같은 다른 플랫폼에서는 동일한 절차가 훨씬 쉽습니다). 그러나 최소한 소스 HTML에서 이미지의 적절한 URL을 선택하는 직접적인 경로가 불가능하고 내가 꽤 복잡한 것들을 쓴 상황이 ​​끝나지 않고 UWP 응용 프로그램에서 경험 한 사람이 나는 물건을 과도하게 조작했다. 나는. 일부 전문가의 의견은 "아니오, UWP에서 가능하지 않으며 base64 임베딩 또는 사용자 지정 URI 해석을 사용해야합니다"라는 메시지가 나와 함께 작동합니다.

+0

내가 아는 한, 당신은 유일한 옵션이 돌아왔다 사용해 URIResolver https://code.msdn.microsoft.com/windowsapps/Windows-Store-Apps-How-to-8073b0da 사용해야합니다 그런 다음 새로운 것이 생겼다고 생각하지 마십시오 – RTDev

+1

샘플에있는 위치가 가장 가능성이 높지 않습니다. webview에서 로컬 데이터 (ApplicationData.Local)에 있으면 ms-appdata : /// local을 통해 로컬 파일을 참조하거나 appx의 내용에있는 경우 ms-appx : ///를 통해 로컬 파일을 참조 할 수 있습니다. –

+0

나는 실제로 ms-appdata를 시도하지 않았다 : (그리고 그 옵션을 알지 못했다) 아직 시도를 할 것이다. 감사! – Alex

답변

5

비록 NavigateToString은 CSS, 스크립트, 이미지 및 글꼴과 같은 외부 파일에 대한 참조로 내용을 지원합니다. 하지만 ms-appx-web 구성표를 사용하는 앱 패키지의 콘텐츠와 httphttps URI 스키마을 사용하는 웹 콘텐츠 만 지원합니다. 앱 로컬 폴더에있는 애셋에서는 작동하지 않습니다. 따라서 file:///을 사용하면 ms-appdata:/// 또는 ms-appx:/// 스키마가 여기에서 작동하지 않습니다.

원하는대로하려면 Base64 인코딩 이미지 또는 사용자 지정 URI 확인 자을 사용할 수 있습니다. 또한 이러한 이미지 자산을 저장하는 동일한 하위 폴더 아래에 파일에 html 문자열을 저장할 수 있다고 생각합니다. html에서는 상대적 URI를 사용하여 my previous answer에서와 같이 이러한 애셋을 참조 할 수 있습니다. 그런 다음 을 사용하는 Uri과 함께 Navigate 메서드를 사용합니다. 예를 들면 :

var html = "<html><head></head><body>A <img src=\"image001.jpg\"> B</body></html>"; 

var folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("folder", CreationCollisionOption.OpenIfExists); 
var file = await folder.CreateFileAsync("html.html", CreationCollisionOption.OpenIfExists); 
await FileIO.WriteTextAsync(file, html); 

webView.Navigate(new Uri("ms-appdata:///local/folder/html.html")); 
+0

감사! 이 방법이 효과가있다! HTML 파일이 로컬에 저장되고 이미지 경로가 해당 경로와 관련된 경우 – Alex

관련 문제