From 6dd432ab38253f6171fc9dcb52e90fd9d61e3f72 Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Fri, 7 Aug 2015 18:21:37 -0700 Subject: [PATCH] wombat: only fix window.parent on top frame if 'embeddable' is not set to true, allow for communication w/ embedding frame this way --- pywb/static/wombat.js | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/pywb/static/wombat.js b/pywb/static/wombat.js index d68562f4..fe5f6da7 100644 --- a/pywb/static/wombat.js +++ b/pywb/static/wombat.js @@ -1769,9 +1769,10 @@ var wombat_internal = function($wbwindow) { //============================================ function wombat_init(wbinfo) { - init_top_frame($wbwindow); - wb_info = wbinfo; + wb_opts = wbinfo.wombat_opts; + + init_top_frame($wbwindow); wb_replay_prefix = wbinfo.prefix; if (wb_replay_prefix.indexOf($wbwindow.__WB_replay_top.location.origin) == 0) { @@ -1782,7 +1783,6 @@ var wombat_internal = function($wbwindow) { wb_coll_prefix_check = wb_coll_prefix; wbinfo.wombat_opts = wbinfo.wombat_opts || {}; - wb_opts = wbinfo.wombat_opts; wb_curr_host = $wbwindow.location.protocol + "//" + $wbwindow.location.host; @@ -1911,17 +1911,14 @@ var wombat_internal = function($wbwindow) { } } - var replay_parent = $wbwindow; var replay_top = $wbwindow; while ((replay_top.parent != replay_top) && check_frame(replay_top.parent, false)) { replay_top = replay_top.parent; - // Update parent first time - if (replay_parent == $wbwindow) { - replay_parent = replay_top; - } } + $wbwindow.__WB_replay_top = replay_top; + var real_parent = replay_top.__WB_orig_parent || replay_top.parent; if (real_parent != $wbwindow && check_frame(real_parent, true)) { @@ -1938,11 +1935,11 @@ var wombat_internal = function($wbwindow) { $wbwindow.__WB_top_frame = undefined; } - $wbwindow.__WB_replay_top = replay_top; - - $wbwindow.__WB_orig_parent = $wbwindow.parent; - - $wbwindow.parent = replay_parent; + // Fix .parent only if not embeddable, otherwise leave for accessing embedding window + if (!wb_opts.embedded && (replay_top == $wbwindow)) { + $wbwindow.__WB_orig_parent = $wbwindow.parent; + $wbwindow.parent = replay_top; + } if (Object.defineProperty) { var getter = function() {