gpt4 book ai didi

ms-office - 检查 Office.js 是否在 Office 客户端之外加载

转载 作者:行者123 更新时间:2023-12-04 14:39:48 27 4
gpt4 key购买 nike

如果我们加载一个引用 office.js 的网页在 Office 客户端之外,我们会收到警告:Office.js is loaded outside of Office client .

这些信息很有用。

有谁知道是否有 API 可以检查我的代码中的内容?

编辑 1:

我解释了一点我的情况以及我问这个问题的原因。我正在使用 angularjs 制作一个应用程序,它可以作为网页加载到浏览器中,也可以作为加载项加载到 Office 中。我意识到我们不应该这样做 <body ng-app="myApp">angular.bootstrap(document, ['myApp'])一起,否则 Controller 将执行 两次 .所以我决定不写 <body ng-app="myApp">并始终使用 angular.bootstrap在这两种情况下(即网页和插件)。

所以对于一个网页,我可以写:

$(document).ready(function () {
angular.bootstrap(document, ['myApp'])
})

app = angular.module('myApp', ['ui.router', 'ui.bootstrap'])
...

所以对于一个网页,我需要写 angular.bootstrapOffice.initialize ,并与加载项共享其他代码:
Office.initialize = function (reason) {
$(document).ready(function () {
angular.bootstrap(document, ['myApp'])
});
}

app = angular.module('myApp', ['ui.router', 'ui.bootstrap'])
// share the same code

但是,如果我将这两种情况如下写在一起,它适用于网页, 而我给 Error: ng:btstrpdApp Already Bootstrapped with this Element插件 .
$(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.contextOffice.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 的哪一部分。应该被执行。

最佳答案

目前还没有这样的 API,尽管我们内部已经讨论过有一个 Office.ready() (本质上类似于 $(document).ready(...) ),只要 Office.js 完成初始化(无论是否在加载项中),就会触发。

欢迎您在 https://github.com/OfficeDev/office-js 上提出建议,并在此处发布链接。我对 API 的想法是它会接受回调(就像 $(document).ready(...) 一样,它会在准备好时触发,并且也可以以 promise 形式提供(所以你可以做 await Office.ready() )。你认为这适用于你的情况?

FWIW:作为一种解决方法,对于 Script Lab ,我们在 Office.initialized 周围包装了一个 Promise(并确保在应用程序加载的早期进行,否则它不会在很晚之后触发),等待它,如果我们没有收到任何东西前 3 秒,我们展示了一组按钮,让用户帮助我们消除歧义。见 https://script-lab.azureedge.net/举个例子。不完美,但对于我们的场景来说还可以。不过,我确实鼓励您在 office-js 存储库上提交一个建议错误,并添加您的具体场景来支持它。

enter image description here

关于ms-office - 检查 Office.js 是否在 Office 客户端之外加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44989152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com