Wie ruft man eine jQuery-Funktion über das .NET WebBrowser-Steuerelement mit InvokeScript () auf?

8

Hatte eine Windows Forms-App, die ein WebBrowser-Steuerelement (.NET 4) verwendet, um eine Webseite zu laden, die mit der App kommuniziert hat. Ich hatte einen Aufruf an InvokeScript() , um an einer Stelle eine Javascript-Routine auf der Webseite aufzurufen.

Nun wurden die Dinge "aktualisiert" und jQuery wird jetzt verwendet. Anstatt eine OnVenueSelected() Funktion zu haben, die aufgerufen wird, ist es nun $.city.venue.onVenueSelected: function(param) oddity.

Das Ändern meines Anrufs von InvokeScript("OnVenueSelected", new object[] { params }) in InvokeScript("$.city.venue.onVenueSelected", new object[] { params }) hat nicht funktioniert. Ich erhalte keine beobachtbaren Fehler oder Ausnahmen, aber die Logik im Aufruf wird nicht aufgerufen.

Beim Umgraben wollte ich eval als Aufruf verwenden und den Funktionsnamen und Parameter als Zeichenfolge an eval übergeben. Das hat auch nicht funktioniert.

Gibt es eine bekannte Möglichkeit, eine Funktion aufzurufen, die in ein paar Schichten von jQuery magic eingebettet ist?

Danke.

    
GuyWithDogs 08.02.2012, 05:00
quelle

3 Antworten

7

OK - Ich kann meine eigene Frage beantworten. Teilweise dank der Antwort von Wie konnte ich mithilfe von InvokeScript ()? eine jQuery-Funktion über das .NET-WebBrowser-Steuerelement aufrufen, konnte ich meinen Aufruf der jQuery-Funktion in

ändern %Vor%

Erstaunlicherweise scheint das zu funktionieren.

In meinem Fall ist die Ergebnisvariable vom Typ bool (falls dies irgendjemand interessiert).

    
GuyWithDogs 08.02.2012, 19:13
quelle
2

Für diejenigen, die sich dessen vielleicht nicht bewusst sind, können Sie .execScript auch in pre.NET-Versionen von WB-Steuerelementen und aktuellen / .NET-Versionen von WB-Steuerelementen verwenden. Sie können auch die Sprache des Skripts auswählen, das Sie ausführen möchten, zB: "JScript" oder "VBScript". Hier ist der eine Liner:

%Vor%     
Erx_VB.NExT.Coder 11.02.2012 22:19
quelle
1

Ja, das ist wahrscheinlich der schnellste Weg, das zu tun, denn das 'Invokescript' muss einfach den Namen einer globalen Funktion erhalten. Nachdem Sie also die Funktionen tiefer in einige Strukturen eingefügt haben und sie immer noch über InvokeScript "hübscher" aufrufen können, müssten Sie zum Beispiel einen einzelnen GLOBAL-Wrapper schreiben (ein 'Dispatcher' wäre ein besserer Name), ähnlich dem:

%Vor%

und später nennen Sie es:

  • von JS:

    %Vor%

    (aber ich weiß wirklich nicht, warum Sie es von JS aus nennen könnten))

  • und von CS:

    %Vor%

Ich denke, auf diese Weise könnten Sie Objekte als Funktionsargumente direkt übergeben, ohne sie zu stringieren

.. aber aus meiner Erfahrung, in & gt; 80% der Fälle, müssen Sie nur ein paar einfache Zahlen und Zeichenfolgen oder Setup-Flags, so dass all dieser Ärger ist in der Regel nur ein Code blähen

    
quetzalcoatl 10.02.2012 11:15
quelle