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

Improved rewriting URLs within web workers by including the full URL the worker came from. (#420)

This commit is contained in:
John Berlin 2018-12-05 19:39:38 -05:00 committed by Ilya Kreymer
parent 323edcf47c
commit 9ab248e791
2 changed files with 31 additions and 9 deletions

View File

@ -1564,19 +1564,22 @@ var _WBWombat = function($wbwindow, wbinfo) {
var fetch = true;
var makeBlob = false;
var rwURL;
if (!starts_with(workerUrl, 'blob:')) {
var isBlob = workerUrl.indexOf('blob:') === 0;
var isJSURL = false;
if (!isBlob) {
if (starts_with(workerUrl, 'javascript:')) {
// JS url, just strip javascript:
fetch = false;
isJSURL = true;
rwURL = workerUrl.replace('javascript:', '');
} else if (!starts_with(workerUrl, VALID_PREFIXES.concat('/')) &&
!starts_with(workerUrl, BAD_PREFIXES)) {
// super relative url assets/js/xyz.js
var rurl = resolve_rel_url(workerUrl, $wbwindow.document);
rwURL = rewrite_url(rurl, false, 'wkr_');
rwURL = rewrite_url(rurl, false, 'wkr_', $wbwindow.document);
} else {
// just rewrite it
rwURL = rewrite_url(workerUrl, false, 'wkr_');
rwURL = rewrite_url(workerUrl, false, 'wkr_', $wbwindow.document);
}
} else {
// blob
@ -1597,10 +1600,19 @@ var _WBWombat = function($wbwindow, wbinfo) {
}
if (wbinfo.static_prefix || wbinfo.ww_rw_script) {
var originalURL;
if (isBlob || isJSURL) {
originalURL = $wbwindow.document.baseURI;
} else if (workerUrl.indexOf('/') === 0) {
// console.log(workerUrl);
originalURL = resolve_rel_url(extract_orig(workerUrl), $wbwindow.document);
} else {
originalURL = extract_orig(workerUrl);
}
// if we are here we can must return blob so set makeBlob to true
var ww_rw = wbinfo.ww_rw_script || wbinfo.static_prefix + "ww_rw.js";
var rw = "(function() { " + "self.importScripts('" + ww_rw + "');" +
"new WBWombat({'prefix': '" + wb_abs_prefix + 'wkr_' + "/'}); " + "})();";
"new WBWombat({'prefix': '" + wb_abs_prefix + 'wkr_' + "/','originalURL':'"+originalURL+"'}); " + "})();";
workerCode = rw + workerCode;
makeBlob = true;
}

View File

@ -1,13 +1,24 @@
// pywb mini rewriter for injection into web worker scripts
function WBWombat(info) {
function maybeResolveURL(origURL) {
try {
var resolved = new URL(origURL, info.originalURL);
return resolved.href;
} catch (e) {
return origURL;
}
}
function rewrite_url(url) {
if (url.indexOf('blob:') === 0) return url;
if (url && info.originalURL && url.indexOf('/') === 0) {
url = maybeResolveURL(url);
}
if (info.prefix) {
return info.prefix + url;
} else {
return url;
}
return url;
}
function init_ajax_rewrite() {
@ -35,8 +46,8 @@ function WBWombat(info) {
function rewriteArgs(argsObj) {
// recreate the original arguments object just with URLs rewritten
var newArgObj = {length: argsObj.length};
for (var i = 0; i < argsObj.length; i++) {
var newArgObj = new Array(argsObj.length);
for (var i = 0; i < newArgObj.length; i++) {
var arg = argsObj[i];
newArgObj[i] = rewrite_url(arg);
}
@ -69,4 +80,3 @@ function WBWombat(info) {
};
}
}