diff --git a/pywb/static/wb.js b/pywb/static/wb.js index 3915eb8e..dc482a5c 100644 --- a/pywb/static/wb.js +++ b/pywb/static/wb.js @@ -136,6 +136,7 @@ this.load = function() { window._wb_js_inited = true; + // Non-Framed Replay OR top frame for framed replay! if (window.wbinfo && (!window.__WB_top_frame || window.__WB_top_frame == window)) { if (wbinfo.is_framed && wbinfo.mod != "bn_") { var hash = window.location.hash; @@ -154,6 +155,7 @@ this.load = function() { // Init Banner (no frame or top frame) add_event("readystatechange", init_banner, document); + // Framed Replay } else if (window.__WB_top_frame && window != window.__WB_top_frame && window.__WB_top_frame.update_wb_url) { add_event("readystatechange", notify_top, document); } diff --git a/pywb/static/wombat.js b/pywb/static/wombat.js index 8d6c2cc9..9af5cf08 100644 --- a/pywb/static/wombat.js +++ b/pywb/static/wombat.js @@ -2111,17 +2111,28 @@ var wombat_internal = function($wbwindow) { } function init_top_frame($wbwindow) { - function check_frame(win, frame) { + function next_parent(win) { try { - return (win && win.wbinfo && (!win.wbinfo.is_frame == !frame)); + if (!win) { + return false; + } + + // if no wbinfo, see if _wb_wombat was set (eg. if about:blank page) + if (!win.wbinfo) { + return (win._wb_wombat != undefined); + } else { + // otherwise, ensure that it is not a top container frame + return !win.wbinfo.is_frame; + } + } catch (e) { return false; } } - + var replay_top = $wbwindow; - while ((replay_top.parent != replay_top) && check_frame(replay_top.parent, false)) { + while ((replay_top.parent != replay_top) && next_parent(replay_top.parent)) { replay_top = replay_top.parent; } @@ -2129,7 +2140,7 @@ var wombat_internal = function($wbwindow) { var real_parent = replay_top.__WB_orig_parent || replay_top.parent; - if (real_parent != $wbwindow && check_frame(real_parent, true)) { + if (real_parent != $wbwindow && real_parent && real_parent.wbinfo && real_parent.wbinfo.is_frame) { $wbwindow.__WB_top_frame = real_parent; // Disable frameElement also as this should be top frame