@@ -223,23 +223,27 @@ var wombat_internal = function($wbwindow) {
223
223
var prefix = starts_with ( url , VALID_PREFIXES ) ;
224
224
225
225
if ( prefix ) {
226
- var prefix_host = prefix + $wbwindow . location . host + '/' ;
226
+ var orig_host = $wbwindow . top . location . host ;
227
+ var orig_protocol = $wbwindow . top . location . protocol ;
228
+
229
+ var prefix_host = prefix + orig_host + '/' ;
230
+
227
231
// if already rewritten url, must still check scheme
228
232
if ( starts_with ( url , prefix_host ) ) {
229
233
if ( starts_with ( url , wb_replay_prefix ) ) {
230
234
return url ;
231
235
}
232
236
233
- var curr_scheme = $wbwindow . location . protocol + '//' ;
234
- var host = $wbwindow . location . host + '/' ;
237
+ var curr_scheme = orig_protocol + '//' ;
238
+ var host = orig_host + '/' ;
235
239
var path = url . substring ( prefix_host . length ) ;
236
240
var rebuild = false ;
237
241
238
242
if ( path . indexOf ( wb_coll_prefix_check ) < 0 && url . indexOf ( "/static/" ) < 0 ) {
239
243
path = wb_coll_prefix + WB_wombat_location . origin + "/" + path ;
240
244
rebuild = true ;
241
245
}
242
-
246
+
243
247
// replace scheme to ensure using the correct server scheme
244
248
//if (starts_with(url, wb_orig_scheme) && (wb_orig_scheme != curr_scheme)) {
245
249
if ( prefix != curr_scheme && prefix != REL_PREFIX ) {
@@ -1057,6 +1061,8 @@ var wombat_internal = function($wbwindow) {
1057
1061
}
1058
1062
1059
1063
var new_html = "" ;
1064
+ var head = "" ;
1065
+ var body = "" ;
1060
1066
1061
1067
if ( inner_doc . head . innerHTML ) {
1062
1068
var elems = inner_doc . head . children ;
@@ -1065,7 +1071,7 @@ var wombat_internal = function($wbwindow) {
1065
1071
// Call orig write to ensure same execution order and placement
1066
1072
rewrite_elem ( elems [ i ] ) ;
1067
1073
}
1068
- new_html += inner_doc . head . innerHTML ;
1074
+ head += inner_doc . head . innerHTML ;
1069
1075
}
1070
1076
1071
1077
if ( inner_doc . body . innerHTML ) {
@@ -1075,7 +1081,23 @@ var wombat_internal = function($wbwindow) {
1075
1081
// Call orig write to ensure same execution order and placement
1076
1082
rewrite_elem ( elems [ i ] ) ;
1077
1083
}
1078
- new_html += inner_doc . body . innerHTML ;
1084
+ body += inner_doc . body . innerHTML ;
1085
+ }
1086
+
1087
+ if ( string && string . indexOf ( "<head" ) >= 0 ) {
1088
+ new_html += "<head>" + head + "</head>" ;
1089
+ } else {
1090
+ new_html += head ;
1091
+ }
1092
+
1093
+ if ( string && string . indexOf ( "<body" ) >= 0 ) {
1094
+ new_html += "<body>" + body + "</body>" ;
1095
+ } else {
1096
+ new_html += body ;
1097
+ }
1098
+
1099
+ if ( string && string . indexOf ( "<html" ) >= 0 ) {
1100
+ new_html = "<html>" + new_html + "</html>" ;
1079
1101
}
1080
1102
1081
1103
return new_html ;
@@ -1614,8 +1636,9 @@ var wombat_internal = function($wbwindow) {
1614
1636
1615
1637
var new_write = function ( string ) {
1616
1638
new_buff = rewrite_html ( string ) ;
1617
- orig_doc_write . call ( this , new_buff ) ;
1639
+ var res = orig_doc_write . call ( this , new_buff ) ;
1618
1640
check_wombat ( this . defaultView ) ;
1641
+ return res ;
1619
1642
}
1620
1643
1621
1644
$wbwindow . document . write = new_write ;
@@ -1625,12 +1648,13 @@ var wombat_internal = function($wbwindow) {
1625
1648
var orig_doc_open = $wbwindow . document . open ;
1626
1649
1627
1650
var new_open = function ( ) {
1628
- orig_doc_open . call ( this ) ;
1651
+ var res = orig_doc_open . call ( this ) ;
1629
1652
check_wombat ( this . defaultView ) ;
1653
+ return res ;
1630
1654
}
1631
1655
1632
- $wbwindow . document . write = new_open ;
1633
- $wbwindow . Document . prototype . write = new_open ;
1656
+ $wbwindow . document . open = new_open ;
1657
+ $wbwindow . Document . prototype . open = new_open ;
1634
1658
}
1635
1659
1636
1660
//============================================
@@ -1719,8 +1743,8 @@ var wombat_internal = function($wbwindow) {
1719
1743
wb_info = wbinfo ;
1720
1744
1721
1745
wb_replay_prefix = wbinfo . prefix ;
1722
- if ( wb_replay_prefix . indexOf ( $wbwindow . location . origin ) == 0 ) {
1723
- wb_coll_prefix = wb_replay_prefix . substring ( $wbwindow . location . origin . length + 1 ) ;
1746
+ if ( wb_replay_prefix . indexOf ( $wbwindow . top . location . origin ) == 0 ) {
1747
+ wb_coll_prefix = wb_replay_prefix . substring ( $wbwindow . top . location . origin . length + 1 ) ;
1724
1748
} else {
1725
1749
wb_coll_prefix = wb_replay_prefix ;
1726
1750
}
@@ -1874,6 +1898,7 @@ var wombat_internal = function($wbwindow) {
1874
1898
1875
1899
// expose functions
1876
1900
this . extract_orig = extract_orig ;
1901
+ this . rewrite_url = rewrite_url ;
1877
1902
this . watch_elem = watch_elem ;
1878
1903
}
1879
1904
0 commit comments