전달하는 사전 ObjectForScripting WPF 웹 브라우저
-
11-12-2019 - |
문제
내가 사용하는 WebBrowser
구성 요소에 WPF 하는 호스트는 몇 가지 자바 스크립트+HTML 하고 싶을 통과 할 수 있정 개체에로 ObjectForScripting
을 제공합니다.나의 최종 목표는 자바스크립트 실행 WebBrowser
할 수 있는 호출을 다음과 같습니다.
window.external['lookup'].getValue(someId);
내가 달성할 수 있는 가까운 무언가를 이해서 구현하는 클래스 ComVisible
설정 true
가 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)
.
참고로 전달할 수도 있습 ComVisible 체를 통해 자바스크립트를 InvokeScript 방법에 그들과 상호 작용하는 방법으로,같은 것을 사용하는 webBrowser.InvokeScript("RegisterProperty", "lookup", lookupObject)
고 관리하는 개체 당신은 노출 자바 스크립트 측면에서.