Надстройка Excel: щелчок по ссылке на другой домен работает, но изменение местоположения с помощью JS не работает.

Я хочу перенаправить свою надстройку на URL-адрес в другом домене.

Я добавил домен в манифест следующим образом:

<AppDomains>
   <AppDomain>https://another.domain.com</AppDomain>
</AppDomains>

И я могу убедиться, что это сработало, потому что я могу добавить обычную ссылку в свою надстройку следующим образом:

<a href="https://another.domain.com/something">Click me</a>

Затем я нажимаю на эту ссылку, и все в порядке.

Но если я попытаюсь программно изменить местоположение следующим образом:

window.location.href = "https://another.domain.com/something";

затем надстройка перестает работать, показывая только экран ошибки с надписью ADD-IN ERROR Извините, мы не можем загрузить надстройку. Убедитесь, что у вас есть подключение к сети и/или Интернету. Нажмите «Повторить», как только вы снова подключитесь к сети.

Это ожидаемое поведение? Как я могу перенаправить свою надстройку на другой домен? Раньше это нормально работало с веб-просмотром IE11, но не работает с веб-просмотром Chromium.


person Victor    schedule 15.04.2021    source источник
comment
См. раздел надстройка Office не может найти сеть.   -  person Eugene Astafiev    schedule 15.04.2021


Ответы (1)


Я не эксперт в надстройках Office, но насколько я понимаю, когда вы используете WebView2 в надстройке Office, окно WebView2 запускается в IFRAME, в то время как основной документ является внутреннее окно офиса.

Теперь, когда вы внедряете скрипты с помощью CoreWebView2.ExecuteScriptAsync(String)method, эти скрипты внедряются в основной документ в соответствии с документами: CoreWebView2.ExecuteScriptAsync(String):

Запускает код JavaScript из параметра javaScript в текущем документе верхнего уровня, отображаемом в WebView.

Это означает, что window будет указывать на внутреннее главное окно Office, а не на ваш WebView2. Когда вы пытаетесь перемещаться по этому внутреннему окну, происходит сбой. Когда вместо этого у вас есть ссылка в вашем WebView2, она перемещается по WebView2 iframe.

Я вижу 2 решения:

<сильный>1. Получите доступ к объекту окна Iframe:

window.frames[0].location.href = "https://another.domain.com/something";

Здесь я предполагаю, что есть только один iframe. В противном случае повторите window.frames.

<сильный>2. Загрузите свой javascript прямо в документ:

Добавьте тег сценария к элементу <head> с помощью:

<script src="https://example.com/script.js"><script>.

Теперь window будет WebView2окном. Это требует, чтобы вы управляли html. Если вы это сделаете, я рекомендую этот метод.

person Poul Bak    schedule 21.04.2021
comment
Я управляю html, а javascript, который я запускаю, запускается внутри веб-документа, поэтому окно должно быть правильным. хотя посмотрю, посмотрим - person Victor; 22.04.2021