これは非常に簡単な作業だと思います。Webで多くの例を見てきましたが、さまざまな例外が発生したため、どれも機能していません。
html:
_<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<p>
Help html content.
</p>
</body>
</html>
_
xaml:
_<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<WebView x:Name="webView" />
<Button x:Name="buttonRefresh"
Grid.Row="1"
HorizontalAlignment="Center"
Click="buttonRefresh_Click">
Refresh
</Button>
</Grid>
_
UWPアプリケーションLocalFolderの_help.html
_ファイルに保存されている静的HTMLを表示するには、すでに次のことを試しました。
-ナビゲートメソッドを使用する:
_private void buttonRefresh_Click(object sender, RoutedEventArgs e)
{
var uri = new Uri("ms-appdata:///local/help.html");
webView.Navigate(uri);
}
_
その結果、次の例外が発生します。
_System.ArgumentException: Value does not fall within the expected range.
at Windows.UI.Xaml.Controls.WebView.Navigate(Uri source)
at SimpleUwpApp.Proxy.SimplerPage.buttonRefresh_Click(Object sender, RoutedEventArgs e)
_
-webViewのSourceプロパティをコードビハインドで明示的に設定してみてください:
_private void buttonRefresh_Click(object sender, RoutedEventArgs e)
{
var uri = new Uri("ms-appdata:///local/help.html");
webView.Source = uri;
}
_
結果:
_System.ArgumentException: Value does not fall within the expected range.
at Windows.UI.Xaml.Controls.WebView.put_Source(Uri value)
at SimpleUwpApp.Proxy.SimplerPage.buttonRefresh_Click(Object sender, RoutedEventArgs e)
_
-webViewのSourceプロパティをxamlで明示的に設定します:これは Microsoftドキュメント の正確な例です。
_<WebView x:Name="webView" Source="ms-appdata:///local/help.html" />
_
結果として、起動時の例外:
_Windows.UI.Xaml.Markup.XamlParseException: The text associated with this error code could not be found.
Failed to assign to property 'Windows.UI.Xaml.Controls.WebView.Source' because the type 'Windows.Foundation.String' cannot be assigned to the type 'Windows.Foundation.Uri'. [Line: 16 Position: 54]
at Windows.UI.Xaml.Application.LoadComponent(Object component, Uri resourceLocator, ComponentResourceLocation componentResourceLocation)
at SimpleUwpApp.Proxy.SimplerPage.InitializeComponent()
_
-このようにNavigate()
引数でURL文字列を直接使用しようとしました Microsoftの例 しかしNavigate()
は受け入れます引数としてUri
のみであるため、古いバージョンのxamlツールキットのいずれかでドキュメントが無効になります。
_webView.Navigate("ms-appx-web:///help.html");
_
結果:
_Syntax error.
_
私が一時的に思いついた唯一の解決策は、ある種のファイルマネージャーでhtmlファイルのコンテンツを読み取り、NavigateToString()
メソッドを使用することです。
_var content = fileManager.Read("help.html"); // Manually read the content of html file
webView.NavigateToString(content);
_
では、説明されている例が機能しないのはなぜですか? NavigationToStringの使用を回避する方法は?
解決策 TheTanicが提供 は、パッケージとともに提供されるファイルに対して機能します。 LocalFolderまたはTemporaryFolderに保存されているファイルの場合、 特別なURIスキームに従う :
このスキームのWebViewサポートでは、ローカルフォルダーまたは一時フォルダーの下のサブフォルダーにコンテンツを配置する必要があります。これにより、ms-appdata:///local/folder/file.htmlやms-appdata:///temp/folder/file.htmlなどのURI(Uniform Resource Identifier)へのナビゲーションが可能になります。
これは、LocalFolderを使用すると、URIが次のように開始されることを意味します。ms-appdata:///local/
この後はフォルダでファイル内にある必要があります。作業サンプルは次のとおりです。
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///help.html"));
StorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("anyFolder", CreationCollisionOption.OpenIfExists);
await file.CopyAsync(folder, "help.html", NameCollisionOption.ReplaceExisting);
webView.Navigate(new Uri("ms-appdata:///local/anyFolder/help.html"));
使用されるすべてのコンテンツは、次のようにそのフォルダーにも存在する必要があることにも注意してください。
これらの第1レベルのサブフォルダーはそれぞれ、他の第1レベルのサブフォルダーのコンテンツから分離されています。
だから私は2つの異なるものを手に入れました、それは私のために働きました:
XAMLバージョン:
<WebView x:Name="webView" Source="ms-appx-web:///help.html"/>
ここでは、ms-appx-web
プレフィックスを使用する必要があります。
コードビハインドバージョン:
webView.Navigate(new Uri("ms-appx-web:///help.html"));
お使いのバージョンとの違いは、文字列のみを入力することは許可されていないということです。 Uri
- Classの新しいオブジェクトを作成する必要があります。
どちらのバージョンでも、html
-ファイルはプロジェクトの直接の子であり、プロジェクトはWindows-10-UWP Application
です[Windows8またはWindows10を使用している場合は言わなかった]