diff --git a/src/ecmascript/ecmascript.cpp b/src/ecmascript/ecmascript.cpp index 18464f8f..6d98b926 100644 --- a/src/ecmascript/ecmascript.cpp +++ b/src/ecmascript/ecmascript.cpp @@ -373,12 +373,12 @@ check_for_rerender(struct ecmascript_interpreter *interpreter, const char* text) struct cache_entry *cached = document->cached; if (!strcmp(text, "eval")) { - if (interpreter->element_offset) { + if (interpreter->write_element_offset) { if (interpreter->writecode.length) { std::map *mapa = (std::map *)document->element_map; if (mapa) { - auto element = (*mapa).find(interpreter->element_offset); + auto element = (*mapa).find(interpreter->write_element_offset); if (element != (*mapa).end()) { xmlpp::Element *el = element->second; @@ -408,6 +408,7 @@ check_for_rerender(struct ecmascript_interpreter *interpreter, const char* text) } } } + interpreter->write_element_offset = 0; } else { if (interpreter->writecode.length) { fromstart: diff --git a/src/ecmascript/ecmascript.h b/src/ecmascript/ecmascript.h index 2c4d06fd..3aae9cac 100644 --- a/src/ecmascript/ecmascript.h +++ b/src/ecmascript/ecmascript.h @@ -110,6 +110,7 @@ struct ecmascript_interpreter { #endif bool changed; int element_offset; + int write_element_offset; }; struct ecmascript_timeout { diff --git a/src/ecmascript/spidermonkey/document.cpp b/src/ecmascript/spidermonkey/document.cpp index 9d47edab..bd2dea5e 100644 --- a/src/ecmascript/spidermonkey/document.cpp +++ b/src/ecmascript/spidermonkey/document.cpp @@ -1307,6 +1307,7 @@ document_write_do(JSContext *ctx, unsigned int argc, JS::Value *rval, int newlin if (argc >= 1) { + interpreter->write_element_offset = interpreter->element_offset; for (unsigned int i = 0; i < argc; ++i) { char *str = jsval_to_string(ctx, args[i]);