我正在努力检查我的托管网络应用程序是由浏览器还是在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
答案 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。