mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-24 06:59:52 +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 fetch = true;
|
||||||
var makeBlob = false;
|
var makeBlob = false;
|
||||||
var rwURL;
|
var rwURL;
|
||||||
if (!starts_with(workerUrl, 'blob:')) {
|
var isBlob = workerUrl.indexOf('blob:') === 0;
|
||||||
|
var isJSURL = false;
|
||||||
|
if (!isBlob) {
|
||||||
if (starts_with(workerUrl, 'javascript:')) {
|
if (starts_with(workerUrl, 'javascript:')) {
|
||||||
// JS url, just strip javascript:
|
// JS url, just strip javascript:
|
||||||
fetch = false;
|
fetch = false;
|
||||||
|
isJSURL = true;
|
||||||
rwURL = workerUrl.replace('javascript:', '');
|
rwURL = workerUrl.replace('javascript:', '');
|
||||||
} else if (!starts_with(workerUrl, VALID_PREFIXES.concat('/')) &&
|
} else if (!starts_with(workerUrl, VALID_PREFIXES.concat('/')) &&
|
||||||
!starts_with(workerUrl, BAD_PREFIXES)) {
|
!starts_with(workerUrl, BAD_PREFIXES)) {
|
||||||
// super relative url assets/js/xyz.js
|
// super relative url assets/js/xyz.js
|
||||||
var rurl = resolve_rel_url(workerUrl, $wbwindow.document);
|
var rurl = resolve_rel_url(workerUrl, $wbwindow.document);
|
||||||
rwURL = rewrite_url(rurl, false, 'wkr_');
|
rwURL = rewrite_url(rurl, false, 'wkr_', $wbwindow.document);
|
||||||
} else {
|
} else {
|
||||||
// just rewrite it
|
// just rewrite it
|
||||||
rwURL = rewrite_url(workerUrl, false, 'wkr_');
|
rwURL = rewrite_url(workerUrl, false, 'wkr_', $wbwindow.document);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// blob
|
// blob
|
||||||
@ -1597,10 +1600,19 @@ var _WBWombat = function($wbwindow, wbinfo) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (wbinfo.static_prefix || wbinfo.ww_rw_script) {
|
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
|
// 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 ww_rw = wbinfo.ww_rw_script || wbinfo.static_prefix + "ww_rw.js";
|
||||||
var rw = "(function() { " + "self.importScripts('" + ww_rw + "');" +
|
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;
|
workerCode = rw + workerCode;
|
||||||
makeBlob = true;
|
makeBlob = true;
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,24 @@
|
|||||||
// pywb mini rewriter for injection into web worker scripts
|
// pywb mini rewriter for injection into web worker scripts
|
||||||
|
|
||||||
function WBWombat(info) {
|
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) {
|
function rewrite_url(url) {
|
||||||
|
if (url.indexOf('blob:') === 0) return url;
|
||||||
|
if (url && info.originalURL && url.indexOf('/') === 0) {
|
||||||
|
url = maybeResolveURL(url);
|
||||||
|
}
|
||||||
if (info.prefix) {
|
if (info.prefix) {
|
||||||
return info.prefix + url;
|
return info.prefix + url;
|
||||||
} else {
|
|
||||||
return url;
|
|
||||||
}
|
}
|
||||||
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
function init_ajax_rewrite() {
|
function init_ajax_rewrite() {
|
||||||
@ -35,8 +46,8 @@ function WBWombat(info) {
|
|||||||
|
|
||||||
function rewriteArgs(argsObj) {
|
function rewriteArgs(argsObj) {
|
||||||
// recreate the original arguments object just with URLs rewritten
|
// recreate the original arguments object just with URLs rewritten
|
||||||
var newArgObj = {length: argsObj.length};
|
var newArgObj = new Array(argsObj.length);
|
||||||
for (var i = 0; i < argsObj.length; i++) {
|
for (var i = 0; i < newArgObj.length; i++) {
|
||||||
var arg = argsObj[i];
|
var arg = argsObj[i];
|
||||||
newArgObj[i] = rewrite_url(arg);
|
newArgObj[i] = rewrite_url(arg);
|
||||||
}
|
}
|
||||||
@ -69,4 +80,3 @@ function WBWombat(info) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user