質問

私は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側で公開しているオブジェクトを管理します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top