Wpf WebBrowserを使用してObjectForScriptingに辞書を渡す
-
11-12-2019 - |
質問
私はaを使用しています WebBrowser
いくつかのJavaScript+HTMLをホストするWPFのコンポーネントと私はカスタマイズ可能なオブジェクトを渡すことができるようにしたい ObjectForScripting
プロパティ。私の最終目標は、javascriptが実行されていることです WebBrowser
次のようなものを呼び出すことができます:
window.external['lookup'].getValue(someId);
私はクラスを実装することでこれに近い何かを達成することができます ComVisible
に設定します。 true
それはaを持っています lookup
その上のプロパティ:
[ComVisible(true)]
public class ScriptingContext
{
public LookupService lookup { get; set; } //where LookupService is also ComVisible
}
しかし、私は上のメンバーについて柔軟になりたいです ObjectForScripting
私は渡しているので、各プロパティが事前に何になるかを指定することはできません。
理想的には、渡す名前とオブジェクトのペアを指定したいだけですが、afaictこれは機能しません。
私がこれまでに試した(そして失敗した)もの:
- を使用して、
Dictionary<string,object>
私の文脈として - の拡張子を使用して
Dictionary<string,object>
それは次のようにマークされますComVisible
- を使用して、
ExpandoObject
- を使用して、
List<KeyValuePair<string,object>>
- の拡張子を使用して
List<KeyValuePair<string,object>>
それは次のようにマークされますComVisible
カスタマイズ可能なものを渡す方法はありますか ObjectForScripting
WPFに WebBrowser
私が行方不明になっていること?
解決
カスタマイズ可能とはどういう意味かはわかりませんが、辞書のラッパーを作成し、それを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側で公開しているオブジェクトを管理します。