1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +01:00

client-side rewrite: add rewrite_script() to wrap generated script in proxy js obj wrapper, if Proxy exists

This commit is contained in:
Ilya Kreymer 2017-09-04 01:16:51 -07:00
parent b22904e5f1
commit 31dbbc4f05

View File

@ -1317,6 +1317,42 @@ var _WBWombat = function($wbwindow, wbinfo) {
return false;
}
//============================================
function rewrite_script(elem) {
if (elem.getAttribute("src") || !elem.textContent || !$wbwindow.Proxy) {
return rewrite_attr(elem, "src");
}
if (elem.textContent.indexOf("_____WB$wombat$assign$function_____") >= 0) {
return false;
}
var override_props = ["window",
"self",
"document",
"location",
"top",
"parent",
"frames",
"opener"];
var insert_str =
'var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; }\n' +
'if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { return obj; } }\n' +
'{\n';
var prop;
for (var i = 0; i < override_props.length; i++) {
prop = override_props[i];
insert_str += 'let ' + prop + ' = _____WB$wombat$assign$function_____("' + prop + '");\n';
}
var content = elem.textContent.replace(/(.postMessage\s*\()/, ".__WB_pmw(self.window)$1");
elem.textContent = insert_str + content + "\n\n}";
return true;
}
//============================================
function rewrite_elem(elem)
{
@ -1340,6 +1376,8 @@ var _WBWombat = function($wbwindow, wbinfo) {
changed = rewrite_attr(elem, "value", true);
} else if (elem.tagName == "IFRAME" || elem.tagName == "FRAME") {
changed = rewrite_frame_src(elem, "src");
} else if (elem.tagName == "SCRIPT") {
changed = rewrite_script(elem);
} else if (elem.tagName == "image") {
changed = rewrite_attr(elem, "xlink:href");
} else {