@@ -351,7 +351,7 @@ function getDocument() {
351351
352352/** @summary Inject javascript code
353353 * @desc Replacement for eval
354- * @returns {Promise}
354+ * @returns {Promise} when code is injected
355355 * @private */
356356function injectCode(code) {
357357 if (nodejs) {
@@ -364,19 +364,26 @@ function injectCode(code) {
364364 fs.writeFileSync(name, code);
365365 return import("file://" + name);
366366 }).finally(() => fs.unlinkSync(name));
367- } if (typeof document !== 'undefined') {
367+ }
368+ if (typeof document !== 'undefined') {
368369
369370 // check if code already loaded - to avoid duplication
370371 let scripts = document.getElementsByTagName('script');
371372 for (let n = 0; n < scripts.length; ++n)
372373 if (scripts[n].innerHTML == code)
373374 return Promise.resolve(true);
374375
375- let element = document.createElement("script");
376- element.setAttribute("type", "text/javascript");
377- element.innerHTML = code;
378- document.head.appendChild(element);
379- return Promise.resolve(true);
376+ let promise = code.indexOf("JSROOT.require") >= 0 ? _ensureJSROOT() : Promise.resolve(true);
377+
378+ return promise.then(() => {
379+ return new Promise(resolve => {
380+ let element = document.createElement("script");
381+ element.setAttribute("type", "text/javascript");
382+ element.innerHTML = code;
383+ document.head.appendChild(element);
384+ setTimeout(() => resolve(true), 10); // while onload event not fired, just postpone resolve
385+ });
386+ });
380387 }
381388
382389 return Promise.resolve(false);
0 commit comments