If we load a webpage referencing office.js
outside Office client, we will get a warning: Office.js is loaded outside of Office client
.
This information is useful.
Does anyone know if there is an API to check that inside my code?
Edit 1:
I explain a little bit my scenario and why I ask this question. I am making an application with angularjs which can be loaded in a browser as a web page or in Office as an add-in. And I realise that we should not do <body ng-app="myApp">
and angular.bootstrap(document, ['myApp'])
together, otherwise controllers will execute twice. So I decided to not write <body ng-app="myApp">
and always use angular.bootstrap
in both cases (ie, web page & add-in).
So for a web page, I could write:
$(document).ready(function () {
angular.bootstrap(document, ['myApp'])
})
app = angular.module('myApp', ['ui.router', 'ui.bootstrap'])
...
So for a web page, I need to write angular.bootstrap
inside Office.initialize
, and share other code with the case of add-in:
Office.initialize = function (reason) {
$(document).ready(function () {
angular.bootstrap(document, ['myApp'])
});
}
app = angular.module('myApp', ['ui.router', 'ui.bootstrap'])
// share the same code
However, if I write these two cases together as follows, it works for a web page, whereas I gives Error: ng:btstrpd App Already Bootstrapped with this Element for add-in.
$(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']).
If I set a flag, console will display bootstrapped outside Office.initialize
followed by isBootstrapped
, then running the code will show that Office.context
or Office.context.document
is undefined:
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'])
So I really need an efficient way to check if Office.js is loaded outside of Office client (ie, whether it is a web page or an add-in), to decide which piece of angular.bootstrap
should be executed.
Office.js
outside an add-in. It is just because this app servers a web site and an Office add-in at the same time, it is simple to loadOffice.js
for both of the two cases. But we do need to check in the code if it is loaded as a web site or an add-in. – GongExcel.JS
. But really, main reason for wanting this was simply so I can debug outside Excel. I don't want to load Excel just to test changes that don't deal w/Office
orExcel
objects, I can just test in pure HTML/JS w/ a Browser. Also, i needed to debug theHTML/JS
using a CORs extension.. – Koa