我正在使用C#开发一个uwp应用程序。 我需要下载网站的资源,包括图像,脚本和html页面,以便在离线时显示。我下载并保存本地文件夹下的资源。但是当我尝试访问它们时(从javascript脚本中),会触发UnsupportedUriSchemeIdentified事件。
这是一段使用资源的JavaScript代码
function startSth(sth,tracking){
sthAPI.SetSth(sth, tracking);
var sthUrl = sthBaseUrl + sth.Href;
if(sth.Parameters !== undefined && sth.Parameters !== null && sth.Parameters !== ""){
if(sth.Parameters.indexOf('?')===0) sth.Parameters = sth.Parameters.substring(1);
sthUrl += "?"+sth.Parameters;
}
if ( urlParams != "" )
{
sthUrl += (sthUrl.indexOf( '?' ) === -1) ? '?' : '&';
sthUrl += urlParams;
}
document.getElementById('mainFrame').src = sthUrl;
}
此代码尝试访问在本地存储中下载的html页面,并将其设置为IFrame的源。 sthBaseUrl变量早先从c#代码提供,类似于ms-appdata:///local/folder/
根据我的理解,ms-appdata
方案是UWP WebView支持的方案之一。我已经看到了一些示例,用于导航到像webView1.Navigate("ms-appdata:///local/intro/welcome.html");
我不明白为什么事件会发生。
javascript不是由我编写的,而是更复杂系统的一部分,所以我没有直接控制权来改变它(没有一个非常有说服力的论点)。
有没有人知道绕过这个问题的方法,让javascript从本地存储加载页面(和其他资源)?
如果没有这种方式,如何修改javascript来实现这个目标?
这会触发unsuppoertedUriSchemeIdentified事件。
答案 0 :(得分:1)
来自官方文件:
WebView支持使用以下方案导航到URI:
http
,https
,ms-appx-web
和ms-local-stream
。
sthUrl
,而不是自己的webview。这就是抛出此异常的地方 - 出于安全原因,您无法导航到可能不安全的内容。您不能混合来自不同文件夹的相同(webview)上下文文件。
这些第一级子文件夹中的每一个都与其他第一级子文件夹中的内容隔离。例如,您可以导航到ms-appdata:///temp/folder1/file.html,但是此文件中没有链接到ms-appdata:///temp/folder2/file.html。
最后考虑使用NavigateToLocalStreamUri
方法。它应该允许将本地缓存的内容包装到您可以通过ms-local-stream
协议在webview中引用的流中。以下是关于如何在Web应用程序模板中使用它来完全脱机风格的good description。