2 Stimmen

Wie kann ich eine Methode für ein in JavaScript erstelltes benutzerdefiniertes Objekt mit C# aufrufen?

Ich habe ein WebBrowser-Steuerelement. Ich habe einige JavaScript in den Head-Tag hinzugefügt und ich kann sehen, dass es wie erwartet funktioniert, indem eine Warnung hinzugefügt wird. Innerhalb dieser js erstelle ich eine Funktion und füge einige Mitglieder zu seinem Prototyp wie folgt hinzu:

function test() {
}

test.prototype.run = function() {
    alert('success!')
}

function createTest() {
    return new test()
}

Dann zurück innerhalb von C# ich tue:

dynamic test = this.browser.InvokeScript("createTest");
test.run();

Ich kann sehen, dass das Testobjekt ein ComObject ist, aber wenn ich run() aufrufe, passiert nichts. Ich erhalte keine Fehlermeldung, aber es passiert auch nichts. Weiß jemand, wie man diese Art von benutzerdefiniertem Objekt aufruft?

Auch angenommen, ich wollte loswerden, die createTest()-Methode, wie kann ich eine neue Instanz von Test von C# erstellen?

Auch für Bonuspunkte, gibt es etwas Besonderes, das ich über das Anhängen von Ereignissen an dieses benutzerdefinierte Objekt (auf sagen wir ein 'komplette' Mitglied) wissen müssen, so dass es in meinem C#-Code zurückrufen wird?

0voto

Phil Bennett Punkte 4733

Versuchen Sie, ein leeres System.object-Array als zweites Argument an InvokeScript zu übergeben und rufen Sie dann test.run() auf;

0voto

justin.m.chase Punkte 12037

Es stellte sich heraus, dass das Schlüsselwort "dynamic" aus irgendeinem Grund nicht intelligent genug ist, um dies herauszufinden. Sie können das von InvokeScript zurückgegebene COM-Objekt in IExpando (oder IReflect) umwandeln und die InvokeMember-Methode aufrufen. Ich habe eine Klasse erstellt, die von DynamicObject erbt, die alle TryXYZ-Methoden außer Kraft setzt und sie in IReflect/IExpando-Methodenaufrufe umwandelt. Dann können Sie mit dem Objekt wie im obigen Ausschnitt interagieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X