none
Lokales JavaScript in C#-Browser ausführen RRS feed

  • Frage

  • Hallo zusammen,
    ich habe ein Problem mit meinem Testprogramm. Das Programm soll einfach nur per Knopfdruck verschiene Javascripts in dem Browser von C# ausführen (zur Vereinfachung von Arbeitsabläufen wie Genehmigungen, Ticketdelegation usw)

    Das Knackpunkt ist jedoch: Das JavaScript lliegt lokal und die Homepage in unserem Intranet. Alle Tutorials die ich finden konnte sind entweder total verworren geschrieben, veraltet oder aber erklären nicht, wie das Snippet eingefügt werden muss. Zudem werden in den Beispielen immer nur Scripts ausgeführt, welche bereits auf der Website sind, was natürlich nicht auf mein Problem zutrifft, da ich das Script lokal dazuladen möchte.

    Ich stelle es mir quasi so vor:

    webBrowser1.ApplyJavaScript("Script", "FunktionAusScript", "VariablenFürScript")
                         

    Dass dies natürlich nicht so einfach ist, sollte klar sein, aber das dient mal als Beispiel was ich meine.

    Hier bin ich für jeden Input, wie ich das angehen könnte dankbar. Ich bin leider noch sehr neu in der Materie und das Programm soll wie bereits gesagt zur Übung sein, um die Sprache zu lernen.

    Falls es Fragen oder Anmerkungen gibt: Bitte Fragen!

    LG,
    Robert




    Dienstag, 21. Februar 2017 11:03

Antworten

  • Hallo Robert,

    recht hast Du. Sorry, mein Fehler. Hatte bei dem verlinkten Beispiel nicht genau hingeschaut, das klappt wirklich nicht. Daher ist dein gefundenes Beispiel von dotnet-snippets besser.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Oha, da habe ich doch glatt vergessen, das Thema als erledigt zu kennzeichnen!

    Danke dir nochmals Stefan für deine hervorragende Hilfe!

    Ich habe auch schon das nächste Problem, an dem ich verzweifle. Hierzu mache ich jedoch ein seperates Thema auf :)

    LG,
    Robert


    Nachtrag: Hier noch der fertige Code:
            public static void ExeJs(WebBrowser browser, string Script)
            {
                //Beispiel:
                //ExeJS(webBrowser1, "document.getElementById('Ticketnr').value='test';");
                HtmlElement head = browser.Document.GetElementsByTagName("head")[0];
                HtmlElement scriptEl = browser.Document.CreateElement("script");
                IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
                element.text = Script;
                head.AppendChild(scriptEl);
            }




    Montag, 27. Februar 2017 09:27

Alle Antworten

  • Hallo Robert,

    vorab die Frage: Welche Anwendungsart verwendest Du? WinForms? WPF? ...?

    "lokal" heißt nun was genau? Liegen die Dateien auf jedem einzelnen PC/Client, der deine Anwendung ausführt?

    Was hindert dich daran, die Datei auf einem Webserver abzulegen (sinnvollerweise auf demselben Server, der auch eure Intranetsite beherbergt) und dann von dort zu laden? Grund hierfür ist, dass es aufgrund der unterschiedlichen Sicherheitseinstellungen für die einzelnen Zonen (Intranet, lokal) zu ggfs. nicht lösbaren Problemen beim Zugriff über die Sicherheitsgrenzen hinweg kommen kann.

    Generell kannst Du lokal hinterlegte Javascript Inhalte aber schon einschleusen. Ein Beispiel findest Du hier:

      http://stackoverflow.com/questions/4029602/how-do-i-add-a-local-script-file-to-the-html-of-a-webbrowser-control

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 21. Februar 2017 11:23
    Moderator
  • Hallo Stefan und vielen Dank für die rasche Antwort

    Es ist eine Windows Forms Anwendung.
    Und ja, lokal bedeutet, es liegt auf dem Rechner im selben Pfad, in dem das Programm liegt. Da es wie gesagt nur zum Testen ist, liegt es auch vorerst nur auf meinem Rechner und wenn alles funktioniert kann man darüber nachdenken, das auch auf den Intranet Server zu legen. Allerdings ist der Weg dorthin ein Meer aus Formularen, weshalb das erstmal flachfällt..

    Mehr als Felder ausfüllen, Buttons klicken und Values auslesen werde ich nicht brauchen, daher denke ich nicht, dass es zu großen Komplikationen führen wird.

    Ich schaue mir dein Beispiel gleich einmal an!

    LG,
    Robert

    P.S.: Lieben Dank, dass meine Anfrage ernstgenommen wird und ich nicht mit "RTFM" o.ä. abgefertigt werde.

    Dienstag, 21. Februar 2017 11:31
  • Hallo nochmal,

    habe es jetzt mit folgendem Codesnippet geschafft:

    dotnet-snippets.de/snippet/javascript-in-einem-webbrowser-control-ausfuehren/2764

    Vielen Dank nochmals für die Hilfe!

    LG,
    Robert

    Mittwoch, 22. Februar 2017 06:59
  • Hallo Robert,

    es freut mich, dass es jetzt klappt.

    Aber wo ist da der Unterschied zu dem Codebeispiel in dem SO Thread, den ich dir gepostet hatte?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 22. Februar 2017 08:41
    Moderator
  • Hallo Stefan,

    erstens bin ich wie gesagt noch neu in der Materie und wusste nicht, wohin ich diesen Code schreiben musste und zweitens bekomme ich die Fehlermeldung:

    Ein Ausnahmefehler des Typs "System.NotSupportedException" ist in System.Windows.Forms.dll aufgetreten.Zusätzliche Informationen: Die Eigenschaft wird für diesen Typ von HtmlElement nicht unterstützt.

    Mittwoch, 22. Februar 2017 11:52
  • Hallo Robert,

    bei welcher Codezeile kommt diese Fehlermeldung?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 22. Februar 2017 11:59
    Moderator
  •         private void developerModeToolStripMenuItem_Click(object sender, EventArgs e)
            {
                HtmlElementCollection head = webBrowser1.Document.GetElementsByTagName("head");
                if (head != null)
                {
                    HtmlElement elm = webBrowser1.Document.CreateElement("script");
                    elm.SetAttribute("type", "text/javascript");
                    elm.InnerText = System.IO.File.ReadAllText(Environment.CurrentDirectory + @"\testscript.js");
                    ((HtmlElement)head[0]).AppendChild(elm);
                }
    
                webBrowser1.Document.InvokeScript("ClickButton");
            }

    obenstehend noch der code, habe ihn halt angepasst (testscript.js), aber sonst nichts. Mein Browser heißt auch webBrowser1.

    Der Fehler kommt in Zeile 8 (elm.InnerText usw.)

    LG,
    Robert


    Mittwoch, 22. Februar 2017 12:03
  • Hallo Robert,

    recht hast Du. Sorry, mein Fehler. Hatte bei dem verlinkten Beispiel nicht genau hingeschaut, das klappt wirklich nicht. Daher ist dein gefundenes Beispiel von dotnet-snippets besser.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 22. Februar 2017 12:17
    Moderator
  • Hallo Robert,

    recht hast Du. Sorry, mein Fehler. Hatte bei dem verlinkten Beispiel nicht genau hingeschaut, das klappt wirklich nicht. Daher ist dein gefundenes Beispiel von dotnet-snippets besser.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Oha, da habe ich doch glatt vergessen, das Thema als erledigt zu kennzeichnen!

    Danke dir nochmals Stefan für deine hervorragende Hilfe!

    Ich habe auch schon das nächste Problem, an dem ich verzweifle. Hierzu mache ich jedoch ein seperates Thema auf :)

    LG,
    Robert


    Nachtrag: Hier noch der fertige Code:
            public static void ExeJs(WebBrowser browser, string Script)
            {
                //Beispiel:
                //ExeJS(webBrowser1, "document.getElementById('Ticketnr').value='test';");
                HtmlElement head = browser.Document.GetElementsByTagName("head")[0];
                HtmlElement scriptEl = browser.Document.CreateElement("script");
                IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
                element.text = Script;
                head.AppendChild(scriptEl);
            }




    Montag, 27. Februar 2017 09:27