2016-12-21 3 views
1

Ich habe WinForm mit WebBrowser Steuerelement, wo ich HTML5 + Angular JS (TypeScript) -Form öffnen. Ich möchte Typoskript-Funktion von meinem C# -Code aufrufen, aber es funktioniert nicht mit InvokeScirpt() -Methode.Call TypeScript-Funktion von C# Webbrowser Steuerelement

webBrowser1.Document.InvokeScript ("Methode", neues Objekt [] {"123", "453")});

Ich kann Javascript-Methode auf diese Weise aufrufen, wenn ich HTML + Javascript-Seite in Webbrowser-Steuerelement laden.

Beachten Sie auch, Typoskript Funktion ich in der Lage bin von der HTML-Seite aufrufen I (auf den Knopf klicken) haben

Können Sie vorschlagen, ob dies eine richtige Weg ist, Typoskript Funktion von C# Web-Browser-Steuerung oder ich anrufen müssen Sie etwas anderes versuchen?

Danke,

+0

Soweit ich weiß, Typoskript Methoden JavaScript-Methoden kompilieren, wenn Sie Ihre Anwendung erstellen, so sie nennen, so können Sie kompilierten Methoden wie alle anderen JavaScript-Methoden aufrufen. –

+0

richtig, ich habe das gleiche Verständnis, aber irgendwie funktioniert es nicht. Ich sehe keine Möglichkeit, das auch zu debuggen. Irgendwelche anderen Optionen sollte O hier versuchen? – ManojP

+1

Wahrscheinlich ist die Methode, die Sie aufrufen möchten, die Methode eines Objekts und Sie können sie nicht direkt aufrufen. Sie sollten zuerst eine Instanz dieses Objekts erstellen (mithilfe von JavaScript-kompiliertem Code) und dann die Methode des Objekts aufrufen. –

Antwort

1

Typoskript Methoden JavaScript-Methoden kompilieren, wenn Sie Ihre Anwendung erstellen, so sie nennen, können Sie kompilierten Methoden wie alle anderen JavaScript-Methoden aufrufen.

Beispiel

Im Beispiel, ich nehme an, Sie haben eine app.ts dieser Klasse:

class Greeter { 
    greeting: string; 
    constructor(message: string) { 
     this.greeting = message; 
    } 
    greet() { 
     return "Hello, " + this.greeting; 
    } 
} 

Und ich nehme an, Sie app.js in index.html fügen Sie diesen Code hinzugefügt haben:

<html> 
<head> 
    <script src="app.js"></script> 
</head> 
<body> 
    ... 
</body> 
</html> 

Dann können Sie in Ihrer Windows Forms-Anwendungverwendenauf diese Weise:

string javascript = "var greeter = new Greeter('World!'); alert(greeter .greet());"; 
webBrowser1.Document.InvokeScript("eval", new object[] { javascript }); 
+0

Danke. Ich werde versuchen, Sie wissen zu lassen, wie es geht. – ManojP

+0

Dank dieser Ansatz funktionierte für mich. 2 Fragen 1. Gibt es einen besseren Ansatz? Das sieht sehr eng mit meinem Angular Code aus. Jede Änderung im Konstruktor kann dies beeinflussen. 2. Was passiert, wenn ich mehr Parameter wie $ Scope, $ State, $ windo, $ Timeout usw. im Konstruktor habe? Ist es wirklich möglich, ein Objekt aus meinem C# -Code mit diesen Paramustypen zu erstellen, oder sollte ich jedes Mal einen Standardkonstruktor als Workaround erstellen? Ich bin neu in Angular so nicht sehr sicher über Params $ Scope, $ State, $ Windo, $ Timeout in während der Erstellung Konstruktor außerhalb der App übergeben. Danke für Ihre Hilfe. – ManojP

+0

Gern geschehen :) - Leider bin ich nicht vertraut mit eckigen und ich habe keine Ahnung über den besten Weg, wie Sie diese Parameter verwenden können, aber Sie können Javascript-Code, den Sie brauchen, und mit 'webBrowser1.Document. InvokeScript ("eval", neues Objekt [] {javascript}); 'Sie können den Code ausführen und das Ergebnis erhalten. Um zwischen der Browsersteuerung und Ihrer Windows-Formularanwendung zu kommunizieren, werfen Sie einen Blick auf [diesen Beitrag] (http://stackoverflow.com/a/34840461/3110834). Um moderne Inhalte im WebBrowser-Steuerelement anzuzeigen, werfen Sie einen Blick auf [diesen Beitrag] (http://stackoverflow.com/a/38514446/3110834). –

Verwandte Themen