Frage

Ich verwende ein WebBrowser Komponente in WPF zum Hosten von JavaScript + HTML und ich möchte in der Lage sein, ein anpassbares Objekt als zu übergeben ObjectForScripting Eigentum.Mein Endziel ist, dass das Javascript im läuft WebBrowser kann so etwas nennen wie:

window.external['lookup'].getValue(someId);

Ich kann etwas Ähnliches erreichen, indem ich eine Klasse mit implementieren ComVisible einstellen true das hat ein lookup Eigentum darauf:

[ComVisible(true)]
public class ScriptingContext
{
    public LookupService lookup { get; set; } //where LookupService is also ComVisible
}

Allerdings möchte ich hinsichtlich der Mitgliederzahl flexibel sein ObjectForScripting die ich übergebe, sodass ich nicht im Voraus angeben kann, wie die einzelnen Objekte aussehen werden.

Idealerweise würde ich gerne nur ein Name-Objekt-Paar angeben, das übergeben werden soll, aber das funktioniert nicht.

Was ich bisher versucht habe (und damit gescheitert bin):

  • Verwendung einer Dictionary<string,object> als mein Kontext
  • mit einer Erweiterung von Dictionary<string,object> das ist markiert als ComVisible
  • mit einem ExpandoObject
  • Verwendung einer List<KeyValuePair<string,object>>
  • mit einer Erweiterung von List<KeyValuePair<string,object>> das ist markiert als ComVisible

Gibt es eine Möglichkeit, eine anpassbare Version zu übergeben? ObjectForScripting in die WPF WebBrowser dass ich vermisse?

War es hilfreich?

Lösung

Ich bin mir nicht sicher, was Sie unter „anpassbar“ verstehen, aber es gibt viele Möglichkeiten, das zu erreichen, was Sie wollen, wie zum Beispiel die Erstellung eines Wrappers für Ihr Wörterbuch und die Verwendung dieses Wrappers als ObjectForScripting:

[ComVisible(true)] 
public class ScriptingContext 
{
    private Dictionary<string, object> objectsForScripting;
    public object GetValue(string s) 
    {
        return objectsForScripting[s];
    }
}

Mit dem entsprechenden Javascript window.external.GetValue("lookup").getValue(someId).

Beachten Sie, dass Sie ComVisible-Objekte auch über die InvokeScript-Methode an Javascript übergeben und auf diese Weise mit ihnen interagieren können, indem Sie beispielsweise Folgendes verwenden: webBrowser.InvokeScript("RegisterProperty", "lookup", lookupObject) und verwalten Sie die Objekte, die Sie auf der Javascript-Seite verfügbar machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top