2016-07-28 16 views
0

Ich habe eine HTML-Seite, die in C# -Projekt generiert. es funktioniert, wenn ich diese Seite in IE öffne.Windows.Forms.WebBrowser Laden von Seite mit lokaler SVG-Datei

<!DOCTYPE HTML> 
 
<meta http-equiv='X-UA-Compatible' content='IE=10' /> 
 
<html lang='en'> 
 
<head> 
 
    <title>TemplateSVG</title> 
 
    <script type='text/javascript' src='InterfaceSVG.js'></script> 
 
</head> 
 
<body style='margin: 0; overflow: hidden;'> 
 
    <div class="page-content"> 
 
     <object id='idSVG' type='image/svg+xml' data='D:\Examples\ExampleFla.svg'></object> 
 
    </div> 
 
</body> 
 
</html>

geladen ich in Web-Browser bekommen Text

if (webBrowser.Document == null) 
    { 
     webBrowser.DocumentText = theHTMLtext; 
    } 
    else 
    { 
     webBrowser.Document.OpenNew(true); 
     webBrowser.DocumentText = theHTMLtext; 
    } 

Aber InterfaceSVG.js nicht finden Datei.

Wenn ich den vollständigen Pfad zu js-Datei geben src='D:\[Path]\InterfaceSVG.js' JS-Skript generieren Ausnahme online mit getSVGDocument().

var SvgDoc; 
 
window.addEventListener('load', function() { 
 
    SvgDoc = document.getElementById("idSVG"); 
 
    if (SvgDoc == null) { alert("error"); return; } 
 
    SvgDoc = SvgDoc.getSVGDocument(); // IE created Access Deny. 
 
});

bearbeiten: Versuchen Sie Text aus js Datei einzufügen.

<script>Text from InterfaceSVG.js </scipt>  

Aber es erzeugt die gleiche Ausnahme (Zugriff verweigert) auf Linie mit getSVGDocument()

I Ergebnis HTML-Seite in einem Ordner mit SVG-Datei und verwenden Sie die Funktion Navigate statt DocumentText gespeichert. Jetzt funktioniert es ... aber ich möchte nichts auf Festplatte schreiben.

string path = Path.GetDirectoryName(pathToSvgFile); 
    string file = "\\"+Path.GetFileNameWithoutExtension(pathToSvgFile); 
    string newfile = path + file; 
    File.WriteAllText(newfile, theHTMLtext); 
    webBrowser.Navigate(newfile); 

Antwort

0

Ich habe gefunden, wie man eine Benutzerseite öffnen muss.

  1. Erstellen Sie Vorlage HTML-Seite ohne Skripts.

<!DOCTYPE HTML> 
 
<meta http-equiv='X-UA-Compatible' content='IE=10' /> 
 
<html lang='en'> 
 
<head> 
 
    <title>Empty Page</title> 
 
</head> 
 
<body style='margin: 0; overflow: hidden; '> 
 
    <div class="page-content"> 
 
     <object id='idSVG' style='height: 100%; width: 100%; position:absolute;' type='image/svg+xml' data='{0}'></object> 
 
    </div> 
 
</body> 
 
</html>

  1. Skriptdateien hinzufügen und Textkörper der HTML-Seite ändern, was Sie in Veranstaltung benötigen webBrowser.Navigated.

    static string PathToSvgFile; 
        public static void OpenSVG(this WebBrowser webBrowser, string pathToSvgFile) 
        { 
         if (webBrowser.ReadyState == WebBrowserReadyState.Complete || webBrowser.ReadyState == WebBrowserReadyState.Uninitialized) 
         { 
          webBrowser.Navigate([Path to emptyPage.html]); 
          PathToSvgFile = pathToSvgFile; 
          webBrowser.Navigated += webBrowser_Navigated; 
         } 
        } 
    
        private static void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e) 
        { 
         var webBrowser = ((WebBrowser)sender); 
         HtmlElementCollection head = webBrowser.Document.GetElementsByTagName("head"); 
    
         if (head != null) 
         { 
          var element = webBrowser.Document.CreateElement("script"); 
          element.SetAttribute("type", "text/javascript"); 
          var elementDom = (MSHTML.IHTMLScriptElement)element.DomElement; 
          elementDom.src = [JavaScriptFile.js]; 
          ((HtmlElement)head[0]).AppendChild(element); 
         } 
    
         webBrowser.Document.Body.InnerHtml = String.Format(webBrowser.Document.Body.InnerHtml, PathToSvgFile); 
         webBrowser.Navigated -= webBrowser_Navigated; 
        }