2016-06-01 9 views
2

Ich entwickle eine uwp App mit C#. Ich habe eine Anforderung zum Herunterladen der Ressourcen einer Website, einschließlich Bilder, Skripte und HTML-Seiten, so dass es offline angezeigt werden kann. Ich lade die Ressourcen unter dem lokalen Ordner herunter und speichere sie. Aber wenn ich versuche, auf sie zuzugreifen (aus einem Javascript-Skript), wird das Ereignis UnsupportedUriSchemeIdentified ausgelöst.ms-appdata scheme triggert Nicht unterstütztesUriSchemeIdentified in UWP WebView

ist hier ein Stück Javascript-Code, der die Ressourcen

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; 
} 

Dieser Code eine HTML-Seite versucht, verwendet in lokalen Speicher heruntergeladen zuzugreifen und sie als Quelle eines IFrame gesetzt. Die sthBaseUrl Variable wird früher von C# Code geliefert und ist so etwas wie ms-appdata:///local/folder/

Von meinem Verständnis des ms-appdata Schema ist eine der unterstützten Systeme der UWP WebView. Ich habe Beispiele gesehen, wo es verwendet wird, um zu Inhalten wie diesem zu navigieren webView1.Navigate("ms-appdata:///local/intro/welcome.html");

Ich verstehe nicht, warum das Ereignis ausgelöst wird.

Das Javascript ist nicht von mir geschrieben und ist Teil eines größeren komplexeren Systems, so dass ich keine direkte Kontrolle habe, es geändert zu haben (ohne ein sehr überzeugendes Argument).

Kennt jemand eine Möglichkeit, dieses Problem zu umgehen und das JavaScript die Seite (und andere Ressourcen) aus dem lokalen Speicher laden lassen?

Wenn es keinen solchen Weg gibt, wie kann das Javascript geändert werden, um dies zu erreichen?

Dies löst das unsupportedUriSchemeIdentified-Ereignis aus.

+0

Ich glaube nicht, dass Sie das ms-appdata Schema aus einer Webansicht verwenden können. Nur beim Laden über die C# apis der Steuerung. Es gibt noch weitere Einschränkungen, so wie alle Dateien in bestimmten Fällen im selben Ordner liegen müssen. und lokale URLs funktionieren nicht, wenn Sie den Webview über 'NavigateToString 'geladen haben. Viele seltsame Fälle. Leider erinnere ich mich nicht an die genauen Gründe, denn es war vor über einem Jahr ... –

Antwort

1

Von offiziellen Dokumentation:

WebView unterstützt die Navigation zu URIs diese Systeme mit: http, https, ms-appx-web und ms-local-stream.

  1. Soweit ich aus dem Code zu sehen, ist das Problem, dass Sie zu diesen sthUrl in einem Iframe innerhalb WebView navigieren, nicht die Webansicht selbst ein. Dort wird diese Ausnahme ausgelöst - und aus Sicherheitsgründen können Sie nicht zu potenziell unsicheren Inhalten navigieren.
  2. Sie können nicht die gleichen (Webview) Kontextdateien aus verschiedenen Ordnern mischen.

    Jeder dieser Unterordner der ersten Ebene ist vom Inhalt anderer untergeordneter Ordner der ersten Ebene isoliert. Zum Beispiel können Sie zu ms-appdata: ///temp/folder1/file.html navigieren, aber Sie können in dieser Datei keinen Link zu ms-appdata: ///temp/folder2/file.html haben.

  3. Schließlich die Verwendung der Methode NavigateToLocalStreamUri in Betracht ziehen. Es sollte ermöglichen, lokal zwischengespeicherten Inhalt in einen Stream einzubetten, den Sie in der Webansicht über das Protokoll ms-local-stream referenzieren können. Hier ist ein good description wie es in der Web Application Template für genau offline Szenarios verwendet wurde.