2016-05-21 20 views
0

私はNodeJsを使用しています。ブラウザに表示したいサーバーからコンテンツをリクエストするために次の関数を使用します。 サーバーは完全なhtmlページを返します。クロームバックボタンが間違ったサイトにリダイレクトされる

次の手順を実行すると、クロムはリダイレクトコードを呼び出す元のページをスキップします。

  1. 私は( ... VARの勝利を使用して=)コードが、私は、サーバーの応答内容をページにリダイレクト
  2. を実行されます
  3. クロームに新しいタブから私のウェブサイトを呼び出します現在のドキュメントが上書きされています(document.open(); ...
  4. 問題:私が戻るボタンを使用すると、Chromeは私のページではなく「新しいタブ」ページに移動します。リダイレクトされました。

Firefoxを使用すると、この問題は発生しません。

これはクロームの古い問題ですが、いくつかの回避策がありますか?

コード:

function requestLink(id) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", "http://localhost:1234/link", true); 
    xhr.setRequestHeader("Content-Type", "application/json"); 
    xhr.onload = function() { 
     if (this.status == 200) { 
      // possibility 1: 
      // document.open(); 
      // document.write(this.response); 
      // document.close(); 

      // possibility 2: 
      var win = window.open("", "_self"); 
      win.document.write(this.response); 
     } 
    }; 
    xhr.send(JSON.stringify({requested: id})); 
} 

答えて

0

これは私が推測すると予想された動作です。

このページをチェックアウト、お使いのブラウザの履歴を操作するには、次の

+0

... https://developer.mozilla.org/en-US/docs/Web/API/History_API

var stateObj = { foo: "bar" }; history.pushState(stateObj, "page 2", "bar.html"); 

新しいブラウザでこれだけ作品を私も、このソリューション全体に急落したが、私は_stateObj_の代わりに何を使うのですか? ドキュメントまたはJSON.stringify(document.body)が機能しません。 **編集**私の関数_requestLink_では、現在のページを履歴に追加します。それは正しいでしょうか? – nauti

+0

これは空のオブジェクトであり、ページの状態を定義します。 (したがって、あなたのページに何が起こっているかを定義する余分なデータを追加することができます)。あなたにとって最も重要なパラメータは、3番目のパラメータです。「bar.html」は、履歴にプッシュされるべきURLです。 – dejakob

関連する問題