--- markup/html/scripting-parser/parser.html 2008/04/29 02:50:00 1.14
+++ markup/html/scripting-parser/parser.html 2008/04/29 03:29:41 1.15
@@ -65,9 +65,11 @@
var logIndentLevel = 0;
function log (s) {
+ var indent = '';
for (var i = 0; i < logIndentLevel; i++) {
- s = ' ' + s;
+ indent += ' ';
}
+ s = indent + s.replace (/\n/g, "\n" + indent);
document.logElement.appendChild (document.createTextNode (s + "\n"));
} // log
@@ -501,7 +503,7 @@
// 2.4. If the script element has its "already executed" flag set
if (e.manakaiAlreadyExecuted) {
// 2.5. Abort these steps at this point.
- log ('Running a script: aborted');
+ log ('Running a script: aborted (already executed)');
logIndentLevel--;
return e;
}
@@ -612,11 +614,22 @@
doc.write.apply (doc, args);
return '';
});
- s = s.replace (/^\s*var\s+s\s*=\s*document\.createElement\s*\(\s*['"]script['"]\s*\)\s*;\s*s\.src\s*=\s*(?:'(javascript:[^']*)'|"(javascript:[^"]*)")\s*;\s*document\.documentElement\.appendChild\s*\(\s*s\s*\)\s*;\s*/,
+ var noDocumentElement = false;
+ s = s.replace (/^\s*var\s+s\s*=\s*document\.createElement\s*\(\s*['"]script['"]\s*\)\s*;\s*s\.src\s*=\s*(?:'([^']*)'|"([^"]*)")\s*;\s*document\.documentElement\.appendChild\s*\(\s*s\s*\)\s*;\s*/,
function (s, t, u) {
matched = true;
var args = [unescapeJSLiteral (t ? t : u)];
- doc._insertExternalScript.apply (doc, args);
+ noDocumentElement = !doc._insertExternalScript.apply (doc, args);
+ return '';
+ });
+ if (noDocumentElement) {
+ log ('Script error: documentElement is null');
+ break;
+ }
+ s = s.replace (/^\s*w\s*\(\s*document\.documentElement\.innerHTML\s*\)\s*;\s*/,
+ function (s, t) {
+ matched = true;
+ log (dumpTree (doc, ''));
return '';
});
if (s == '') break;
@@ -701,6 +714,7 @@
}; // document.open
JSDocument.prototype.write = function () {
+ log ('document.write: start');
logIndentLevel++;
var p = this._parser;
@@ -724,6 +738,7 @@
if (p.scriptExecutedAfterParserResumes) {
log ('document.write: processed later (there is an unprocessed