| Index: sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
|
| ===================================================================
|
| --- sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart (revision 26171)
|
| +++ sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart (working copy)
|
| @@ -857,7 +857,11 @@
|
| return js.fun('oldIsolate', [
|
| js('var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'),
|
|
|
| - js(r'isolateProperties.$currentScript = null'),
|
| + js(r'isolateProperties.$currentScript ='
|
| + 'typeof document == "object" ?'
|
| + '(document.currentScript ||'
|
| + 'document.scripts[document.scripts.length - 1]) :'
|
| + 'null'),
|
|
|
| js('var isolatePrototype = oldIsolate.prototype'),
|
| js('var str = "{\\n"'),
|
| @@ -2968,47 +2972,24 @@
|
| buffer.write(N);
|
| }
|
| addComment('BEGIN invoke [main].', buffer);
|
| - // This code finds the currently executing script by listening to the
|
| - // onload event of all script tags and getting the first script which
|
| - // finishes. Since onload is called immediately after execution this should
|
| - // not substantially change execution order.
|
| buffer.write("""
|
| -;(function (callback) {
|
| - if (typeof document === 'undefined') {
|
| - callback(null);
|
| - return;
|
| - }
|
| - if (document.currentScript) {
|
| - callback(document.currentScript);
|
| - return;
|
| - }
|
| -
|
| - var scripts = document.scripts;
|
| - function onLoad() {
|
| - for (var i = 0; i < scripts.length; ++i) {
|
| - scripts[i].removeEventListener('load', onLoad, false);
|
| +if (typeof document !== "undefined" && document.readyState !== "complete") {
|
| + document.addEventListener("readystatechange", function () {
|
| + if (document.readyState == "complete") {
|
| + if (typeof dartMainRunner === "function") {
|
| + dartMainRunner(function() { ${mainCall}; });
|
| + } else {
|
| + ${mainCall};
|
| + }
|
| }
|
| - callback(event.target);
|
| - }
|
| - for (var i = 0; i < scripts.length; ++i) {
|
| - scripts[i].addEventListener('load', onLoad, false);
|
| - }
|
| -})(function(currentScript) {
|
| - ${namer.isolateName}.${namer.isolatePropertiesName}.\$currentScript =
|
| - currentScript;
|
| -
|
| - if (typeof console !== 'undefined' && typeof document !== 'undefined' &&
|
| - document.readyState == "loading") {
|
| - console.warn("Dart script executed synchronously, use <script src='" +
|
| - currentScript.src + "' defer></scr" + "ipt> to execute after parsing " +
|
| - "has completed. See also http://dartbug.com/12281.");
|
| - }
|
| + }, false);
|
| +} else {
|
| if (typeof dartMainRunner === "function") {
|
| dartMainRunner(function() { ${mainCall}; });
|
| } else {
|
| ${mainCall};
|
| }
|
| -});
|
| +}
|
| """);
|
| addComment('END invoke [main].', buffer);
|
| }
|
|
|