web-dev-qa-db-ja.com

Javascript history.PushStateが機能していませんか?

ここにこのコードがあります:

<script type="text/javascript">
function goFunction(){
  history.pushState("google.ca", "GOOGLE CANADA", "http://www.google.ca");
  return event.preventDefault();
}
</script>

そして

<a href="#" onclick="javascript:goFunction();">GO</a>

リンクをクリックすると、エラーログに次のエラーが記録されます。

 Uncaught SecurityError: A history state object with URL 'http://www.google.ca/' cannot be created in a document with Origin 'http://cowelllaserhair.com'. 

これは次の場所で見ることができます: http://cowelllaserhair.com/test.html

私は何を間違えていますか?

何かを参照する必要がありますか?

ありがとう、J

18
user1269625

pushStateへのURL引数は、現在のページ、または独自のドメインの絶対URLに対して相対的でなければなりません。クロスドメイン状態をプッシュすることはできません-これは重大なセキュリティ上の欠陥です。

MDNドキュメント は次のとおりです。

新しい履歴エントリのURLは、このパラメーターによって指定されます。ブラウザーは、pushState()の呼び出し後にこのURLのロードを試行しませんが、ユーザーがブラウザーを再起動した後など、後でURLのロードを試行する場合があることに注意してください。新しいURLは絶対である必要はありません。相対的な場合は、現在のURLを基準にして解決されます。新しいURLは、現在のURLと同じOriginである必要があります。そうでない場合、pushState()は例外をスローします。このパラメーターはオプションです。指定されていない場合は、ドキュメントの現在のURLに設定されます。

URLパラメーターは、ほとんどの場合空白のままにするか、#/helloなどの独自のサイトで相対URLを設定します。

26
joews