Javascript ms appdata方案触发UWP WebView中标识的UnsupportedUriSchemeIdentified
我正在用C#开发一个uwp应用程序。 我需要下载网站的资源,包括图像、脚本和html页面,以便在脱机时显示。我下载并保存本地文件夹下的资源。但是当我尝试访问它们(从javascript脚本内部)时,会触发不受支持的DurischemeIdentified事件 下面是一段使用这些资源的javascript代码Javascript ms appdata方案触发UWP WebView中标识的UnsupportedUriSchemeIdentified,javascript,c#,webview,uwp,Javascript,C#,Webview,Uwp,我正在用C#开发一个uwp应用程序。 我需要下载网站的资源,包括图像、脚本和html页面,以便在脱机时显示。我下载并保存本地文件夹下的资源。但是当我尝试访问它们(从javascript脚本内部)时,会触发不受支持的DurischemeIdentified事件 下面是一段使用这些资源的javascript代码 function startSth(sth,tracking){ sthAPI.SetSth(sth, tracking); var sthUrl = sthBaseUrl
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#code提供,类似于ms-appdata:///local/folder/
据我所知,ms-appdata
方案是UWP支持的方案之一。我看到过一些例子,其中它用于导航到类似以下内容webView1.navigate(“ms”)-appdata:///local/intro/welcome.html");代码>
我不明白事件为什么会发生
javascript不是我写的,它是一个更大更复杂的系统的一部分,所以我没有直接的控制权来更改它(没有一个非常有说服力的论点)
有人知道绕过这个问题,让javascript从本地存储加载页面(和其他资源)的方法吗
如果没有这样的方法,如何修改javascript来实现这一点
这将触发未受支持的DurischemeIdentified事件。来自官方文档:
WebView支持使用以下方案导航到URI:http
,https
,
ms-appx-web
,以及ms-local-stream
据我从代码中看到的,问题是您在WebView内部的iframe中导航到的是sthull
,而不是WebView本身。这就是引发此异常的地方——出于安全原因,您无法导航到可能不安全的内容
不能混合使用来自不同文件夹的相同(webview)上下文文件
每个第一级子文件夹都与其他第一级子文件夹中的内容隔离。例如,您可以导航到ms-appdata:///temp/folder1/file.html,但在此文件中不能有指向ms的链接-appdata:///temp/folder2/file.html.
最后考虑使用方法。它应该允许将本地缓存的内容包装到一个流中,您可以通过ms local stream
协议在webview中引用该流。下面是一个关于它是如何在Web应用程序模板中用于完全离线场景的示例
我认为您不能在webview中使用ms appdata方案。仅当通过控件的c#API加载时。还有一些限制,比如在某些情况下所有文件都必须在同一个文件夹中;如果通过NavigateToString
加载webview,则本地URL不起作用。很多奇怪的案例。遗憾的是,我不记得确切的原因了,因为那是一年多以前的事了。。。