<html>
  <script>
    onpageshow = function(pageShowEvent) {
      var bc = new BroadcastChannel("ship_beforeunload");
      bc.onmessage = function(event) {
        if (event.data.action == "register_beforeunload") {
          onbeforeunload = function() {
            bc.postMessage("beforeunload_fired");
            bc.close();
          }
          if (event.data.loadNextPageFromSessionHistory) {
            history.back();
          } else {
            location.href += "?differentpage";
          }
        } else if (event.data.action == "navigate_to_page_b") {
          bc.close();
          if (event.data.blockBFCache) {
            window.blockBFCache = new RTCPeerConnection();
          }
          location.href += "?pageb";
        } else if (event.data.action == "back_to_page_b") {
          if (event.data.forwardNavigateToPageB) {
            history.forward();
          } else {
            history.back();
          }
          bc.close();
        } else if (event.data.action == "close") {
          bc.close();
          window.close();
        }
      }
      bc.postMessage({type: pageShowEvent.type, persisted: pageShowEvent.persisted});
    }
  </script>
</html>
