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

rewrite: don't rewrite ajax-requested html content

js regex: add special regex to rewrite '?location:'
This commit is contained in:
Ilya Kreymer 2016-10-20 11:30:14 -07:00
parent 52ce45beee
commit 40b0a291a9
5 changed files with 16 additions and 4 deletions

View File

@ -134,6 +134,8 @@ class JSLocationRewriterMixin(object):
# (r'(?<![/$])\blocation\b(?!\":)', RegexRewriter.add_prefix(prefix), 0),
(r'(?<![/$\'"-])\b(?:location|top)\b(?!(?:\":|:|=\d|-))', RegexRewriter.add_prefix(prefix), 0),
(r'(?<=[?])location[:]', RegexRewriter.add_prefix(prefix), 0),
(r'(?<=\.)postMessage\b\(', RegexRewriter.add_prefix('__WB_pmw(window).'), 0),
(r'(?<=\.)frameElement\b', RegexRewriter.add_prefix(prefix), 0),

View File

@ -6,12 +6,12 @@ from pywb.rewrite.rewrite_content import RewriteContent
# ============================================================================
# Expiermental: not fully tested
class RewriteContentAMF(RewriteContent): #pragma: no cover
def handle_custom_rewrite(self, rewritten_headers, stream, mod, env):
def handle_custom_rewrite(self, rewritten_headers, stream, urlrewriter, mod, env):
if rewritten_headers.status_headers.get_header('Content-Type') == 'application/x-amf':
stream = self.rewrite_amf(stream, env)
return (super(RewriteContentAMF, self).
handle_custom_rewrite(rewritten_headers, stream, mod, env))
handle_custom_rewrite(rewritten_headers, stream, urlrewriter, mod, env))
def rewrite_amf(self, stream, env):
try:

View File

@ -120,6 +120,7 @@ class RewriteContent(object):
res = self.handle_custom_rewrite(rewritten_headers,
stream,
urlrewriter,
wb_url.mod,
env)
if res:
@ -255,7 +256,9 @@ class RewriteContent(object):
return (status_headers, gen, True)
def handle_custom_rewrite(self, rewritten_headers, stream, mod, env):
def handle_custom_rewrite(self, rewritten_headers, stream,
urlrewriter, mod, env):
text_type = rewritten_headers.text_type
status_headers = rewritten_headers.status_headers
@ -263,7 +266,8 @@ class RewriteContent(object):
if text_type is None:
return (status_headers, self.stream_to_gen(stream), False)
if text_type == 'plain' and not mod in ('js_', 'cs_'):
if ((text_type == 'html' and urlrewriter.rewrite_opts.get('ajax')) or
(text_type == 'plain' and not mod in ('js_', 'cs_'))):
rewritten_headers.readd_rewrite_removed()
return (status_headers, self.stream_to_gen(stream), False)

View File

@ -48,6 +48,9 @@ class RewriteHandler(SearchPageWbUrlHandler):
url = wbrequest.urlrewriter.get_new_url(type=type_, timestamp='')
return WbResponse.redir_response(url)
if wbrequest.options['is_ajax']:
wbrequest.urlrewriter.rewrite_opts['is_ajax'] = True
try:
return self.render_content(wbrequest)

View File

@ -163,6 +163,9 @@ class ReplayView(object):
if wbrequest and wbrequest.wb_url:
wbrequest.wb_url.url = cdx['url']
if wbrequest.options['is_ajax']:
wbrequest.urlrewriter.rewrite_opts['is_ajax'] = True
head_insert_func = None
if self.head_insert_view:
head_insert_func = (self.head_insert_view.