1

我正在努力检查我的托管 Web 应用程序是否由浏览器或 Outlook 2013/2016 客户端打开。

这是我的方法:

/**
 * Check if the app is running in outlook
 */
$rootScope.isOutlook = false;
$(document).ready(function () {
    try {
        Office.initialize = function() {
            var hostType = Office.context.mailbox.diagnostics.hostName;
            if (hostType === "Outlook" || hostType === "Mac Outlook" || hostType === "OutlookWebApp") {
                $rootScope.isOutlook = true;
            }
        };
    } catch (e) {
        if (e instanceof TypeError) {
            // catch error if web app is opened in browser.
            console.log('Not in office context! Generated error: ' + e);
        }
    }
});
$log.debug('isOutlook: ' + $rootScope.isOutlook);

该函数本身就像一个魅力,但我无法摆脱'Uncaught TypeError'。它一直在我的浏览器控制台中向我抛出这个 Uncaught TypeError:

Uncaught TypeError: window.external.GetContext is not a function
4

1 回答 1

1

Office.context.mailbox.diagnostics.hostName 告诉您您拥有哪种类型的 Office 主机。但似乎您可能正在尝试在 Office 主机内部和完全独立的网页上运行相同的应用程序。

Simon JK Pedersen有一篇关于该场景的帖子,其中涉及检查是否存在相同的 window.external.GetContext 函数。这没有记录。

 Office.initialize = init;
 try {
     if (!window.external.GetContext) {
         $rootScope.isOutlook = false;
         init(); // Manually call init
     }
 } catch (e) {
     // when in office context unable to access external.
 }

您还可以执行一些操作,例如在您的 Office 清单中包含一个查询字符串参数并检查它,以便您知道它来自 Office。

于 2016-01-28T14:41:36.967 回答