2012-11-23 2 views
3

현재 로컬 HTML 파일을로드하는 WinRT 앱을 Windows.Storage.ApplicationData.Current.LocalFolder에서로드하고 있습니다. HTML 파일에 포함 된 이미지, 오디오, 비디오, CSS, JavaScript 등의 자산을로드하는 가장 좋은 방법은 무엇인지 알고 싶습니다.winrt : webview에서 로컬 html과 해당 리소스를로드하십시오.

현재이 파일을 Windows.ApplicationModel.Package.Current.InstalledLocation에 작성하고 있지만 프로그램 파일/폴더의 소유권을 변경하지 않으면 응용 프로그램이 저장소에서 배포되었거나 Windows PowerShell을 통해 AppPackage를 설치하면 더 이상 액세스 할 수 없습니다. WindowsApps "폴더를 현재 사용자 또는"Everyone "에 추가하십시오.

미리 감사드립니다.

답변

9

여기 정확히 묻는 것이 확실하지 않습니다. Windows.ApplicationModel.Package.Current.InstalledLocation이어야하는 유일한 파일은 AppPackage와 함께 설치되는 파일, 즉 앱 배포의 일부입니다. 앱은 거기에 파일을 저장해서는 안됩니다 (심지어 허용되지 않습니다).

런타임시 생성되는 모든 파일은 보존 방법에 따라 Windows.Storage.ApplicationData.Current.LocalFolder, Windows.Storage.ApplicationData.Current.RemoteFolderWindows.Storage.ApplicationData.Current.TempFolder 중 하나에 저장해야합니다. 이 규칙의 유일한 예외는 사용자가 앱 외부에서도이 파일에 액세스 할 수있게하려는 경우입니다. 그런 다음 라이브러리에 저장하고 액세스해야합니다. 파일 선택기를 사용하여 위치를 물어보십시오. .

편집 : 그들은 응용 프로그램과 함께 배포되지 않는 지역 HTML 자원을로드는

매우 그들이 InstalledLocation에 저장 ms-appx-web 프로토콜을 통해 액세스 할 수 있습니다 즉, 제한된다. 비록 그것이 MS를 지원하는 않는 방식 :

는 또한 웹보기는 MS-APPDATA를 지원하지 않습니다 documented 같이 WebView 제어 LocalStorage, RemoteStorage 또는 TempFolder로부터 데이터를 검색하는데 사용된다 ms-appdata 프로토콜을 지원하지 않기 -appx-web : scheme. 이렇게하면 콘텐츠 파일을 프로젝트에로드 할 수 있습니다.

이것은 C# 프로젝트의 모든 옵션을 제거합니다. 다른 HTML 뷰어 컨트롤을 사용할 수도 있지만 only one을 알고 있으며 아직 완성되지 않았습니다.

JavaScript에서는 상황이 약간 개선되었습니다. ms-appdata 프로토콜은 supported only for data files입니다 :

때로는 (윈도우 런타임 API를 통해) 당신이 에서 앱의 지역 ApplicationData 스토리지로 인터넷을 다운로드 한 자료를 참조하는 데 유용합니다. 이러한 내용을 참조하려면 "ms-appdata :"스키마와 ApplicationData 로컬 저장소의 파일 경로를 사용해야합니다. 보안상의 이유로이 위치로 다운로드 한 HTML로 이동할 수 없으므로 실행 파일 또는 스크립트 나 CSS와 같은 잠재적으로 실행 가능한 코드를 실행할 수 없습니다. 이 은 이미지 또는 비디오 등과 같은 미디어 용입니다.

이 당신이 할 수있는 의미

<img src="ms-appdata:///local/img/coal.jpg" /> 

하지만하지 :

<iframe src="ms-appdata:///local/index.html" /> 

ms-appdata protocal 구문은 여전히 ​​그것을 사용을 찾을 경우 well documented입니다.

+0

로컬 HTML 리소스 (예 : 이미지, CSS, 자바 스크립트 등)를로드 할 수있는 다른 옵션을 알고 싶습니다. 지금 당장 "Windows.ApplicationModel.Package.Current.InstalledLocation" 이는 WinRT Webview 컨트롤에서 "ms-appx-web"프로토콜을 사용하는 유일한 방법이기 때문입니다. 이러한 리소스는 런타임에 생성되므로 "Current.LocalFolder", "Current.RemoteFolder"또는 "Current.TempFolder"에 저장하면 "ms-appx-web"프로토콜이 작동하지 않습니다. – Erick

+0

@Erick 불행히도 많은 옵션이 없습니다. 나는 당신에게 가능한 것을 커버하기 위해 나의 대답을 확장했다. –

+0

답변 해 주셔서 감사합니다. 이제 모든 것이 명확 해졌으며 이것이 올바른 방향으로 나아가게되었습니다. – Erick

관련 문제