Нужен контроль над TaskPane из CustomTab Word веб-надстройки

Я разрабатываю надстройку Word Web с помощью CustomTab и TaskPane. Из файла Manifest.xml я запускаю события в функцию JavaScript через ExecuteFunctionФункция JS получает удар, но в пользовательском интерфейсе TaskPane обновления не происходит

manifest.xml

<FunctionFile resid="Contoso.FunctionFile.Url" />
<bt:Urls>
    <bt:Url id="Contoso.FunctionFile.Url" DefaultValue="~remoteAppUrl/Home.html" />
</bt:Urls>
<Action xsi:type="ExecuteFunction">
    <FunctionName>appendText</FunctionName>
</Action>

JavaScript

function appendText() {
    var count = 10;
    $("#main").append(count);
}

HTML

<div style="width:100%" id="main"></div>

Та же функция JQuery работает при обычном вызове функции нажатия кнопки, которая существует внутри панели задач.

Как я могу вызвать события, которые должны выполняться правильно?

1 ответ

Файл функции HTML и вызываемый им файл JavaScript выполняются в совершенно отдельном контексте выполнения из области задач. Если я понимаю, что вы сделали, вы установили home.html в качестве своего FunctionFile и в качестве домашней страницы области задач. Если вы сделаете это, вы загружаете вторую копию home.html при вызове FunctionFile (и я думаю, что вторая копия будет невидимой, поскольку в файле функций никогда не отображается пользовательский интерфейс). Ваш метод добавления работает со вторым экземпляром страницы, а не с экземпляром на панели задач.

Лучший способ взаимодействия между файлом функции (который должен быть страницей без пользовательского интерфейса) и областью задач - использовать LocalStorage. Ваш метод appendText должен хранить значение "10" в LocalStorage с ключом, таким как "count". JavaScript в вашей области задач должен прочитать "count" из LocalStorage и добавить его значение в #main.

Если вам нужно, чтобы это происходило автоматически, то код в области задач, проверяющий "количество" в LocalStorage, должен выполняться по таймерному циклу.

ОБНОВЛЕНИЕ 16/16/18: В ответ на комментарий ОП: здесь работают два разных контекста исполнения; то есть два разных экземпляра Internet Explorer и встроенный движок JavaScript:

Во-первых, есть домашняя страница для панели задач, home.html. Он имеет пользовательский интерфейс и загружает JavaScript.

Во-вторых, есть FunctionFile.html, который запускается кнопкой ленты. Это должна быть страница HTML, отличная от домашней страницы области задач. Эта страница не должна иметь пользовательского интерфейса; нет видимых элементов HTML в его теле. Это должно загрузить JavaScript. Это должен быть файл JS, отличный от того, который загружен домашней страницей панели задач. Вы не хотите загружать две копии одного и того же файла. Когда вызывается эта страница, окно IE или панель задач не открываются. Это никогда не видели.

Эти два экземпляра IE неизвестны друг другу. Они могут общаться только посредством записи и чтения в локальное хранилище машины. По этой причине, если вы хотите, чтобы JavaScript, вызываемый кнопкой на пользовательской вкладке, изменял элементы DOM на странице в области задач, вы можете сделать это только путем передачи сигнала через LocalStorage.

JavaScript, загруженный FunctionFile.html, должен хранить значение "count" в LocalStorage и больше ничего не делать. JavaScript в этом файле не может адресовать элементы DOM на домашней странице, потому что этот DOM находится в совершенно ином экземпляре IE.

JavaScript, загруженный домашней страницей, должен прочитать значение "count" из LocalStorage и добавить его к #main элемент в DOM домашней страницы.

Итак, JavaScript, который пишет в LocalStorage, и JavaScript, который читает LocalStorage, находятся в разных функциях, в разных файлах JavaScript, работающих в разных экземплярах IE.

Если вы еще этого не сделали, см. " Команды надстроек" и " Шаг 6" учебника по Excel.

Другие вопросы по тегам