我正在使用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事件。
根据官方文档:
的WebView支持导航使用这些方案的URI: ,
http
,https
,ms-appx-web
和ms-local-stream
。
sthUrl
WebView内的iframe中,而不是它本身的webview。那就是抛出该异常的地方-出于安全原因,您无法导航到潜在的不安全内容。您不能混入来自不同文件夹的相同(webview)上下文文件。
这些第一级子文件夹中的每一个都与其他第一级子文件夹中的内容隔离。例如,您可以导航到ms-appdata:///temp/folder1/file.html,但是此文件中没有指向ms-appdata:///temp/folder2/file.html的链接。
最后考虑使用NavigateToLocalStreamUri
方法。它应该允许将本地缓存的内容包装到可通过ms-local-stream
协议在webview内部引用的流中。这是一个很好的说明,说明了如何在完全脱机的方案中使用Web应用程序模板。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句