Я пытаюсь написать VSTO-надстройку с System.Windows.Forms.WebBrowser-Control, включающей что-то похожее на модель Office-JS-Add-In.
Элемент управления WebBrowser будет отображать некоторую HTML / JS-страницу и сможет вызывать C # -функции в VSTO-Add-In из JavaScript через window.external и свойство ObjectForScripting объекта WebBrowser.
То есть в JS вызов будет
window.external.DoFancyStuffToMyDocument(withTheseParams)
пока должно быть какое-то
class MyFunctionProxy() {
public void DoFancyStuffToMyDocument(string theParam) {
//code here
}
}
в C # -Code и это будет присоединено к WebBrowser
myWebBrowser.ObjectForScripting = new MyFunctionProxy();
Пока все хорошо. Теперь приходит улов. Я хочу, чтобы мой HTML / JS-код мог также использовать код office.js и такие функции, как
Word.run(function (context) {
var thisDocument = context.document;
var range = thisDocument.getSelection();
range.insertText('"Hitch your wagon to a star."\n', Word.InsertLocation.replace);
//...
}
Кто-нибудь видит способ заставить это работать?
Мое первоначальное предположение заключалось в том, что надстройки OfficeJS-taskpane в Word on-prem используют какой-то похожий метод, описанный выше, с классом, производным от WebBrowser, и соответствующим ObjectForScripting. Это может означать, что должен существовать класс (который, мы надеемся, доступен), который назначается свойству ObjectForScripting, обрабатывающему вызовы функций из office.js. Затем я мог бы проксировать этот ObjectForScripting-класс и добавить свои собственные функции, такие как 'DoFancyStuffToMyDocument ()'.