From bbe3cebd2f9c1c14e10bf043a9e354d573200df7 Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Wed, 16 Aug 2017 22:08:00 -0700 Subject: [PATCH] client side fixes for proxy obj: - add general override_func_first_arg_proxy_to_obj() to dereference proxy->obj for first arg - used for MutationObserver.observe() and Node.compareDocumentPosition() for now --- pywb/static/wombat.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/pywb/static/wombat.js b/pywb/static/wombat.js index ee4780eb..4af33bd8 100644 --- a/pywb/static/wombat.js +++ b/pywb/static/wombat.js @@ -2138,15 +2138,15 @@ var _WBWombat = function($wbwindow, wbinfo) { } //============================================ - function init_mo_from_proxy() { - var orig_observe = $wbwindow.MutationObserver.prototype.observe; + function override_func_first_arg_proxy_to_obj(prototype, method) { + var orig = prototype[method]; - function observe_deproxy(target, options) { - target = proxy_to_obj(target); - return orig_observe.call(this, target, options); + function deproxy() { + arguments[0] = proxy_to_obj(arguments[0]); + orig.apply(this, arguments); } - $wbwindow.MutationObserver.prototype.observe = observe_deproxy; + prototype[method] = deproxy; } //============================================ @@ -2817,6 +2817,10 @@ var _WBWombat = function($wbwindow, wbinfo) { override_iframe_content_access("contentWindow"); override_iframe_content_access("contentDocument"); + // override funcs to convert first arg proxy->obj + override_func_first_arg_proxy_to_obj($wbwindow.MutationObserver.prototype, "observe"); + override_func_first_arg_proxy_to_obj($wbwindow.Node.prototype, "compareDocumentPosition"); + override_frames_access($wbwindow); // setAttribute @@ -2880,8 +2884,6 @@ var _WBWombat = function($wbwindow, wbinfo) { init_window_obj_proxy($wbwindow); init_document_obj_proxy($wbwindow.document); - init_mo_from_proxy(); - // expose functions var obj = {} obj.extract_orig = extract_orig;