2011-12-19 14 views
2

へのトラバースなどHTTPサイトから状態変化をプッシュしよう:私のセキュアに...History.jsと同一生成元ポリシーは、私が<a href="https://github.com/balupton/history.js" rel="nofollow noreferrer">history.js</a>を使用しているSSL

http://www.example.com/some/resource

https://www.example.com/payment/for/some/resource

0123:のようなサイト(支払いページ)、

...しかし、私はSafariでこのエラーを取得しています:

SECURITY_ERR:DOM例外18:試行が を介してユーザエージェントのセキュリティポリシーを破るために作られました。周り掘り一部を行う

History.pushState(null, null, new_state_url); 
// new_state_url = https://www.example.com/payment/for/some/resource 

私は以来、私は、私は抵触Same Origin Policyの実行していることを示唆している、this SO questionが見つかりました:のような状態変化をプッシュしよう

...プロトコル間で状態の変更をプッシュしようとしています。そこに提案された答え(私が正しく理解した場合)は完全なURLを明示的にプッシュすることでしたが、私はすでにそれをやっており、同じエラーが発生しています。

私は自分のサイトのモバイル版を構築していますが、他のすべてのページロードで作成したものと同じAJAXを使用して支払いページをロードしたいと考えています(私はページローダーをjQueryの$.ajaxといくつかのカスタムアニメーションは、jQuery Mobileにあるものとおおよそ同様です。

この状態変更をSSL経由でプッシュすることは可能でしょうか?もしそうなら、私はこれをどのようにするのですか?

答えて

0

同じ起源は、プロトコルおよびドメインだけでなく、タプルプロトコル、ドメインおよびポートを含む。

あなたの場合は、プロトコル(HTTPとHTTPS)とポート(80と443)の両方が悪用されているようです。

SOPを回避する標準的な方法がいくつかあります。一つの方法は、同じ任意の文字列に両方のドメインでdocument.domainを設定することです:

document.domain = "foo.com"; 

もう一つの良い方法はGETを使用してドメイン間でJSONPをロードすることです。

すべてこれは、pushStateのように聞こえません。履歴APIを使用すると、と同じドメイン上のを移動しても、リソースをリロードしなくても保存できます。これは完全に別のドメインなので、新しいURL(セキュリティで保護されたサインインページ)にはdocument.locationプロパティを設定するだけで、ページをリロードしてもナビゲーション履歴は保持されます。

0

この回答は質問とは無関係ですが、window.history.replaceStateをあまりにも頻繁に呼び出すとSafariで同じエラーが発生しました。私はその機能を呼び出し、セキュリティエラーが消えたところでレート制限を追加しました。

関連する問題

 関連する問題