office-js:未捕获TypeError:window.external.GetContext不是函数

时间:2016-01-28 13:57:50

标签: javascript office365 office365-apps office-js

我正在努力检查我的托管网络应用程序是由浏览器还是在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: window.external.GetContext is not a function

1 个答案:

答案 0 :(得分:1)

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

关于该场景有post by Simon J.K. 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。