--- 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