Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ms appdata方案触发UWP WebView中标识的UnsupportedUriSchemeIdentified_Javascript_C#_Webview_Uwp - Fatal编程技术网

Javascript ms appdata方案触发UWP WebView中标识的UnsupportedUriSchemeIdentified

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

我正在用C#开发一个uwp应用程序。 我需要下载网站的资源,包括图像、脚本和html页面,以便在脱机时显示。我下载并保存本地文件夹下的资源。但是当我尝试访问它们(从javascript脚本内部)时,会触发不受支持的DurischemeIdentified事件

下面是一段使用这些资源的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#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不起作用。很多奇怪的案例。遗憾的是,我不记得确切的原因了,因为那是一年多以前的事了。。。