mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-24 06:59:52 +01:00
wombat work: rewrite_html() iterate over all elements in insert doc, not just top level
setAttribute: don't disable rewriting after one set attribute call
This commit is contained in:
parent
569614da24
commit
52c6544186
@ -746,9 +746,6 @@ var wombat_internal = function($wbwindow) {
|
|||||||
if (!this._no_rewrite) {
|
if (!this._no_rewrite) {
|
||||||
var old_value = value;
|
var old_value = value;
|
||||||
var new_value = rewrite_url(value);
|
var new_value = rewrite_url(value);
|
||||||
if (new_value != old_value) {
|
|
||||||
this._no_rewrite = true;
|
|
||||||
}
|
|
||||||
value = new_value;
|
value = new_value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1071,44 +1068,19 @@ var wombat_internal = function($wbwindow) {
|
|||||||
|
|
||||||
string = string.toString();
|
string = string.toString();
|
||||||
|
|
||||||
|
for (var i = 0; i < inner_doc.all.length; i++) {
|
||||||
|
rewrite_elem(inner_doc.all[i]);
|
||||||
|
}
|
||||||
|
|
||||||
var new_html = "";
|
var new_html = "";
|
||||||
var head = "";
|
|
||||||
var body = "";
|
// if original had <html> tag, add full document HTML
|
||||||
|
|
||||||
if (inner_doc.head.innerHTML) {
|
|
||||||
var elems = inner_doc.head.children;
|
|
||||||
|
|
||||||
for (var i = 0; i < elems.length; i++) {
|
|
||||||
// Call orig write to ensure same execution order and placement
|
|
||||||
rewrite_elem(elems[i]);
|
|
||||||
}
|
|
||||||
head += inner_doc.head.innerHTML;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inner_doc.body.innerHTML) {
|
|
||||||
var elems = inner_doc.body.children;
|
|
||||||
|
|
||||||
for (var i = 0; i < elems.length; i++) {
|
|
||||||
// Call orig write to ensure same execution order and placement
|
|
||||||
rewrite_elem(elems[i]);
|
|
||||||
}
|
|
||||||
body += inner_doc.body.innerHTML;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (string && string.indexOf("<head") >= 0) {
|
|
||||||
new_html += "<head>" + head + "</head>";
|
|
||||||
} else {
|
|
||||||
new_html += head;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (string && string.indexOf("<body") >= 0) {
|
|
||||||
new_html += "<body>" + body + "</body>";
|
|
||||||
} else {
|
|
||||||
new_html += body;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (string && string.indexOf("<html") >= 0) {
|
if (string && string.indexOf("<html") >= 0) {
|
||||||
new_html = "<html>" + new_html + "</html>";
|
new_html = inner_doc.documentElement.outerHTML;
|
||||||
|
} else {
|
||||||
|
// otherwise, just add contents of head and body
|
||||||
|
new_html = inner_doc.head.innerHTML;
|
||||||
|
new_html += inner_doc.body.innerHTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new_html;
|
return new_html;
|
||||||
@ -1242,15 +1214,14 @@ var wombat_internal = function($wbwindow) {
|
|||||||
|
|
||||||
|
|
||||||
//============================================
|
//============================================
|
||||||
function override_innerHTML() {
|
function override_html_assign(elemtype, prop) {
|
||||||
if (!$wbwindow.DOMParser ||
|
if (!$wbwindow.DOMParser ||
|
||||||
!$wbwindow.HTMLElement ||
|
!elemtype ||
|
||||||
!$wbwindow.HTMLElement.prototype) {
|
!elemtype.prototype) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var obj = $wbwindow.HTMLElement.prototype;
|
var obj = elemtype.prototype;
|
||||||
var prop = "innerHTML";
|
|
||||||
|
|
||||||
var orig_getter = get_orig_getter(obj, prop);
|
var orig_getter = get_orig_getter(obj, prop);
|
||||||
var orig_setter = get_orig_setter(obj, prop);
|
var orig_setter = get_orig_setter(obj, prop);
|
||||||
@ -1864,7 +1835,8 @@ var wombat_internal = function($wbwindow) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// innerHTML can be overriden on prototype!
|
// innerHTML can be overriden on prototype!
|
||||||
override_innerHTML();
|
override_html_assign($wbwindow.HTMLElement, "innerHTML");
|
||||||
|
override_html_assign($wbwindow.HTMLIFrameElement, "srcdoc");
|
||||||
|
|
||||||
|
|
||||||
// init insertAdjacentHTML() override
|
// init insertAdjacentHTML() override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user