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:
parent
323edcf47c
commit
9ab248e791
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user