Вопрос

я использую WebBrowser компонент в WPF для размещения некоторого JavaScript + HTML, и я хочу иметь возможность передавать настраиваемый объект в качестве ObjectForScripting свойство.Моя конечная цель состоит в том, чтобы javascript, работающий в 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 что я передаю, поэтому не могу заранее указать, каким будет каждое свойство.

В идеале я хотел бы просто указать пару имя-объект для передачи, но это не работает.

Что я пробовал (и не смог) до сих пор:

  • используя 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 в javascript через метод InvokeScript и взаимодействовать с ними таким образом, используя что-то вроде webBrowser.InvokeScript("RegisterProperty", "lookup", lookupObject) и управляйте объектами, которые вы предоставляете на стороне JavaScript.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top