Wie Sie eine jQuery-Funktion aus .NET-WebBrowser-Steuerelement mithilfe InvokeScript()?
Hatte eine Windows Forms-Anwendung mit einem WebBrowser-Steuerelement (.NET 4) zum laden einer web-Seite, die kommuniziert mit der app. Ich hatte einen Anruf zu InvokeScript()
zum aufrufen einer Javascript-routine, die in der web-Seite an einem Punkt.
Nun Dinge wurden "aktualisiert", und jQuery wird nun verwendet. Anstatt also einen OnVenueSelected()
- Funktion aufrufen, ist es jetzt einige $.city.venue.onVenueSelected: function(param)
kuriosität.
Einfach ändern mein Anruf von InvokeScript("OnVenueSelected", new object[] { params })
zu InvokeScript("$.city.venue.onVenueSelected", new object[] { params })
hat nicht funktioniert. Ich bekomme keine beobachtbare Fehler oder Ausnahmen, aber die Logik in dem Aufruf wird nicht aufgerufen.
Einige Graben um, hatte mich versucht zu verwenden eval
wie den Aufruf und die übergabe der Funktionsname und die Parameter als Zeichenfolge eval
. Das hat nicht funktioniert entweder.
Gibt es einen bekannten Weg, um eine Funktion aufzurufen, die eingebettet ist in ein paar Schichten von jQuery-Magie?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK - bekomme ich Antwort auf meine eigene Frage. Dank der Antwort von an Wie Sie eine jQuery-Funktion aus .NET-WebBrowser-Steuerelement mithilfe InvokeScript()?, ich war in der Lage zu ändern, rufe ich die jQuery-Funktion zu
Erstaunlicherweise scheint das zu funktionieren.
In meinem Fall, der Ergebnis-Variablen wird der Typ
bool
(im Falle, dass für jeden wichtig).Für diejenigen, die möglicherweise nicht bewusst sind, können Sie auch verwenden .execScript in pre-.NET Versionen von WB Steuerung und Strom -/.NET-Versionen von WB-Kontrolle. Sie können auch wählen Sie die Sprache für das Skript, das Sie ausführen möchten, z.B.: "JScript" oder "VBScript". Hier ist die one-liner:
Yeah, das ist wahrscheinlich der Schnellste Weg, das zu tun, weil die 'invokescript' braucht einfach nur einen Namen einer globalen Funktion. So nach dem betätigen der Funktionen, die sich tiefer in einige Strukturen, und noch in der Lage sein, um den Aufruf über InvokeScript in ein "schöner" Weg, hätte Sie, zum Beispiel, schreiben Sie eine einzige GLOBALE wrapper - (a 'dispatcher' wäre ein besserer name), ähnlich wie die:
und später so nennen:
von JS:
(aber ich wirklich weiß nicht, warum könnte man es nennen will von JS :))
und von CS:
so, ich glaube, Sie wäre in der Lage, übergeben Sie Objekte als Funktionsargumente direkt, ohne stringifying Sie
..aber aus meiner Erfahrung, in >80% der Fälle, Sie müssen nur einige einfache zahlen und Zeichenketten-oder setup-Optionen, sodass alle, dass ärger in der Regel ist nur ein code aufblasen