如果我们在Office外部加载一个引用office.js的网页,我们将得到一个警告:Office.js is loaded outside of Office client。
这些信息是有用的。
有人知道我的代码中是否有一个API来检查这个吗?
编辑1:
我稍微解释一下我的情况以及为什么我会问这个问题。我正在使用angularjs制作一个应用程序,它可以作为网页加载在浏览器中,也可以在Office中作为外接程序加载。我意识到我们不应该同时执行<body ng-app="myApp">和angular.bootstrap(document, ['myApp']),否则控制器将执行两次。所以我决定不写<body ng-app="myApp">,在这两种情况下都使用angular.bootstrap (即网页和外接程序)。
所以对于一个网页,我可以写:
$(document).ready(function () {
angular.bootstrap(document, ['myApp'])
})
app = angular.module('myApp', ['ui.router', 'ui.bootstrap'])
...因此,对于网页,我需要在Office.initialize中编写Office.initialize,并与外接程序共享其他代码:
Office.initialize = function (reason) {
$(document).ready(function () {
angular.bootstrap(document, ['myApp'])
});
}
app = angular.module('myApp', ['ui.router', 'ui.bootstrap'])
// share the same code但是,如果我按照下面的方式将这两种情况写在一起,那么它适用于一个网页,,而我给出了 错误: ng:btstrpd应用程序已经用此元素引导 用于外接程序。
$(document).ready(function () {
angular.bootstrap(document, ['myApp'])
console.log("bootstrapped outside Office.initialize")
})
Office.initialize = function (reason) {
$(document).ready(function () {
angular.bootstrap(document, ['myApp'])
console.log("bootstrapped inside Office.initialize")
})
}
app = angular.module('myApp', ['ui.router', 'ui.bootstrap']).如果我设置了一个标志,控制台将显示bootstrapped outside Office.initialize和isBootstrapped,那么运行代码的将显示或 Office.context.document 是未定义的。
var isBootstrapped = false;
$(document).ready(function () {
angular.bootstrap(document, ['myApp'])
isBootstrapped = true
console.log("bootstrapped outside Office.initialize")
})
Office.initialize = function (reason) {
$(document).ready(function () {
if (isBootstrapped) console.log("isBootstrapped")
else {
angular.bootstrap(document, ['myApp'])
console.log("bootstrapped inside Office.initialize")
}
})
}
app = angular.module('myApp', ['ui.router', 'ui.bootstrap'])因此,我确实需要一种有效的方法来检查Office.js是否加载到Office之外(即,它是网页还是外接程序),以决定应该执行哪一部分angular.bootstrap。
发布于 2017-11-02 05:48:12
一种方法是使用https://github.com/OfficeDev/office-js-helpers。
OfficeHelpers.Utilities.host和OfficeHelpers.Utilities.platform都提供了有用的信息。
发布于 2017-07-08 19:25:32
目前还没有这样的API,尽管我们内部已经讨论过有一个Office.ready() (在精神上类似于$(document).ready(...)),每当Office.js完成初始化时(不管是否在外接程序中),它都会触发。
欢迎您在https://github.com/OfficeDev/office-js上推荐它,并在这里发布一个链接。我在API上的想法是,它将接受一个回调(就像$(document).ready(...)一样,它在准备好时就会启动,并且还可以以承诺的形式使用(所以您可以使用await Office.ready())。你认为这对你的场景有用吗?
FWIW:作为一种解决方法,对于脚本实验室,我们围绕Office.initialized (并确保在加载应用程序时尽早完成它,否则它将不会启动),等待它,如果我们在前3秒内没有收到任何东西,我们会显示一组按钮,让用户帮助我们消除歧义。有关该示例的示例,请参阅https://script-lab.azureedge.net/。不完美,但对我们的场景来说还不错。不过,我确实鼓励您将建议错误提交到office-js repo上,添加具体的场景来支持它。

https://stackoverflow.com/questions/44989152
复制相似问题