- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我们加载一个引用 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.bootstrap
内
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
$(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
或 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'])
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 存储库上提交一个建议错误,并添加您的具体场景来支持它。
关于ms-office - 检查 Office.js 是否在 Office 客户端之外加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44989152/
我是一名优秀的程序员,十分优秀!