ASP. NET Проблема совместимости менеджера сценариев Webform с веб-надстройкой Office outlook - PullRequest
0 голосов
/ 30 января 2020

Мы используем asp. net веб-форму для разработки нашей веб-надстройки для Outlook.

В надстройке возникла проблема, когда внутри панели обновления произошла обратная передача, некоторые ошибки на стороне клиента будет брошен, и это сделает неисправности надстройки. Эта проблема довольно непостоянна, и мы так и не нашли решение.

Одна из ошибок похожа на эту h is not a constructor

Мне удалось сократить надстройку до самой простой из возможных форм. , где присутствуют только офис. js и менеджер сценариев. Можно заметить, что если нажата кнопка, происходит обратная передача, и есть некоторый шанс, что будет выдана ошибка:

Uncaught TypeError: Cannot read property 'PageRequestManager' of undefined
    at Sys._Application.dispose (VM7863 ScriptResource.axd:5)
    at Sys._Application._unloadHandler (VM7863 ScriptResource.axd:5)
    at VM7863 ScriptResource.axd:5
    at b (VM7863 ScriptResource.axd:5)

Интересно, что это произойдет только в контексте внешнего вида. Когда та же структура используется вне внешнего вида, ошибки не будет. Похоже, что введенный сценарием Javascript конфликтует с офисом. js или средой мировоззрения или обоими. Но я не могу получить ответ / решение.

Вот мой пример кода:

<!DOCTYPE html>
<html>
<head runat="server">
    <title></title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!-- For the JavaScript APIs for Office, go to https://aka.ms/officejs-overview to learn more. -->
    <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script>
</head>
<body>
    <h4>Sample APP to replicate the scripte manager issue</h4>
    <form id="form" runat="server">
        <asp:scriptmanager id="ScriptManager" runat="server" scriptmode="Release" asyncpostbacktimeout="300" />
        <asp:button id="button" runat="server" text="Click Me!" />
    </form>
    <script>
        Office.initialize = function () { };
        var prm = Sys.WebForms.PageRequestManager.getInstance();
    </script>
</body>
</html>

Я обнаружил только одну подобную проблему в SO, но она не очень помогает:

Надстройка Outlook, не удается прочитать свойство BeginRequestEventArgs с неопределенным значением

1 Ответ

0 голосов
/ 11 февраля 2020

В настоящее время обходной путь - поставить ссылку на офис. js после элемента управления scriptmanager. По сути, он должен убедиться, что сценарии, сгенерированные scriptmanager, будут загружены / выполнены до офиса. js.

<asp:scriptmanager id="ScriptManager" runat="server" scriptmode="Release" onasyncpostbackerror="ScriptManager_AsyncPostBackError" asyncpostbacktimeout="300" />
<!-- For the JavaScript APIs for Office, go to https://aka.ms/officejs-overview to learn more. -->
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script>

Посмотрите на источник офиса. js , Похоже, у него есть некоторые ссылки, относящиеся к материалу ajax (Sys, Microsoft Ajax. js et c). Возможно, это проблема.

...