문제

내가 사용하는 WebBrowser 구성 요소에 WPF 하는 호스트는 몇 가지 자바 스크립트+HTML 하고 싶을 통과 할 수 있정 개체에로 ObjectForScripting 을 제공합니다.나의 최종 목표는 자바스크립트 실행 WebBrowser 할 수 있는 호출을 다음과 같습니다.

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

내가 달성할 수 있는 가까운 무언가를 이해서 구현하는 클래스 ComVisible 설정 truelookup 그것에 속성:

[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) 고 관리하는 개체 당신은 노출 자바 스크립트 측면에서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top