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); |
} |