2

WPFのコンポーネントを使用してWebBrowserJavaScript+HTMLをホストしており、カスタマイズ可能なオブジェクトをプロパティとして渡せるようにしたいと考えていObjectForScriptingます。私の最終目標は、で実行されているjavascriptが次のWebBrowserようなものを呼び出すことができるようにすることです。

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

プロパティを持つにComVisible設定されたクラスを実装することで、これに近い何かを達成できます。truelookup

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

ただし、渡すメンバーについては柔軟に対応したいObjectForScriptingので、各プロパティを事前に指定することはできません。

理想的には、渡す名前とオブジェクトのペアを指定したいのですが、これは機能しません。

私がこれまでに試した(そして失敗した)こと:

  • Dictionary<string,object>私のコンテキストとしてを使用する
  • その拡張子を使用すると、Dictionary<string,object>としてマークされますComVisible
  • を使用してExpandoObject
  • を使ってList<KeyValuePair<string,object>>
  • その拡張子を使用すると、 List<KeyValuePair<string,object>>としてマークされますComVisible

不足しているカスタマイズ可能なものObjectForScriptingをWPFに渡す方法はありますか?WebBrowser

4

1 に答える 1

2

カスタマイズ可能とはどういう意味かわかりませんが、辞書のラッパーを作成してそれをObjectForScriptingにするなど、目的を達成する方法はたくさんあります。

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

対応するjavascriptを使用しwindow.external.GetValue("lookup").getValue(someId)ます。

InvokeScriptメソッドを介してComVisibleオブジェクトをjavascriptに渡しwebBrowser.InvokeScript("RegisterProperty", "lookup", lookupObject)、javascript側で公開しているオブジェクトのようなものを使用してそれらを操作し、それらと対話することもできることに注意してください。

于 2012-05-19T00:34:33.910 に答える