我正在使用WebBrowser
WPF 中的组件来托管一些 JavaScript + HTML,我希望能够将可自定义的对象传递为 ObjectForScripting
属性(property)。我的最终目标是在 WebBrowser
中运行 javascript可以这样调用:
window.external['lookup'].getValue(someId);
我可以通过使用 ComVisible
实现一个类来实现与此接近的目标设置为true
有一个 lookup
其属性:
[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
我失踪了吗?
最佳答案
我不确定你所说的可定制是什么意思,但是有很多方法可以实现你想要的,例如为你的字典构建一个包装器并将其作为你的 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 端公开的对象。
关于wpf - 使用 WPF WebBrowser 将字典传递给 ObjectForScripting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10661112/