ウィンドウに次のstatechange
イベントが設定されています。
History.Adapter.bind(window,'statechange',function(e){
console.log("statechange event occured ");
//more code
var newDoc = document.open();
newDoc.write(file);
newDoc.close();
});
私は history.js を使用していますが、これは statechange を定期的にバインドするため、この場合は問題ではありませんfile
。
今、私はこのコード (および他のコード) を外部 js ファイル内に配置し、そのファイル内ですべてのa
タグを反復処理し、次のクリック イベントを適用します。
$(element).on("click",function(e){
e.preventDefault();
//more code
History.pushState({file : file},title, fullHref);
});
クリックするとドキュメントが期待どおりに変更されますが、戻る/進むボタンを使用しようとするとstatechange
イベントが発生しません。
このjsは、読み込み中のファイルにも含まれていることに注意してください。
したがって、私の最初の考えは、ドキュメントは変更されてもウィンドウは変更されないため、イベントは残るというものでした。これは、statechange イベントを複数回適用するため、正しくありません。だから私は一度クッキーを使ってイベントを適用しようとしましたが、それでも同じことをします。
ドキュメントを変更する代わりに、単に jQuery で適用すると.html()
、statechange イベントが期待どおりに発生するので、ドキュメントに関連していると思います。
なぜこれが起こるのでしょうか?ドキュメントを変更したときにウィンドウ イベントがどうなるかをもっと理解すれば、この問題を解決できると思います。
試行:
popstate
また、通常の History API を介してイベントにバインドしようとしましたが、それでも同じ結果が得られます。pushState
popstate は起動しませんが、戻るボタンは起動しますが、状態はありません。- 私は history.js を使用すべきではないという結論に達しました。そこから問題が発生したのではないかと疑っているので、popstate に関する問題を「解決」しました。まだ詳細情報を探しています
- を使用してみましたが
on
、同じ結果です
情報:
- この例でHistoryを使用しているのは history.js が原因です。通常の history API を使用しても同じ問題が発生します。
私はmdnでそれを読んだ:
{{ gecko_minversion_note("1.9.2", "Gecko 1.9.2 から、document.open() は
プリンシパルをスタックからフェッチする代わりに、URI を使用するドキュメントのプリンシパル。その結果、wrappedJSObject を使用しても、chrome から信頼できないドキュメントに document.write() を呼び出すことはできなくなりました。") }}
よくわかりませんが、この問題に関連している可能性があると思います