How To Receive Scriptnotify From Html In Appdata On Uwp C#
Windows won't let my WebView_ScriptNotify Event receive a call if the html is loaded from ms-appdata. I'm aware that I can use the ms-appx-web protocol to load such a file from my
Solution 1:
Ref Script notify changes in XAML:
For content to be able to send notifications the following conditions apply:
- The source of the page should be from the local system via NavigateToString(), NavigateToStream() or ms-appx-web:///
Or
- The source of the page is delivered via https:// and the site domain name is listed in the app content URI’s section of the package manifest.
So to solve this issue, we can use WebView.NavigateToLocalStreamUri method with the protocol ms-local-stream://
, rather than ms-appdata://
. For example:
publicsealedpartialclassMainPage : Page
{
publicMainPage()
{
this.InitializeComponent();
}
protectedoverridevoidOnNavigatedTo(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 = webView.BuildLocalStreamUri("MyTag", "index.html");
StreamUriWinRTResolver myResolver = new StreamUriWinRTResolver();
// Pass the resolver object to the navigate call.
webView.NavigateToLocalStreamUri(url, myResolver);
}
privatevoidwebView_ScriptNotify(object sender, NotifyEventArgs e)
{
System.Diagnostics.Debug.WriteLine("ScriptNotifyValue: " + e.Value);
}
}
publicsealedclassStreamUriWinRTResolver : IUriToStreamResolver
{
public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri)
{
if (uri == null)
{
thrownew Exception();
}
string path = uri.AbsolutePath;
// Because of the signature of the this method, it can't use await, so we// call into a seperate helper method that can use the C# await pattern.return GetContent(path).AsAsyncOperation();
}
privateasync Task<IInputStream> GetContent(string path)
{
// We use app's local folder as the sourcetry
{
Uri localUri = new Uri("ms-appdata:///local" + path);
StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(localUri);
IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read);
return stream;
}
catch (Exception) { thrownew Exception("Invalid path"); }
}
}
For more info, please see Remarks and Examples in WebView.NavigateToLocalStreamUri method and also Custom URI resolving in What’s new in WebView in Windows 8.1. Besides, there is also a WebView control (XAML) sample on GitHub.
Post a Comment for "How To Receive Scriptnotify From Html In Appdata On Uwp C#"