iframeでwindow.location.replaceを使用できますか?
履歴window.location.replaceを回避し、ページをリロードせずにページ上のアンカーをターゲットにするために使用できますが、iframeではできませんか? 問題は、CSP(コンテンツセキュリティポリシー)違反、状態をscript-src 'unsafe-inline'有効にする必要があります。CSPを定義していない場合を除いて、CSPを定義して許可しscript-src 'unsafe-inline'ても、同じ違反エラーが発生します。ie11 / chrome / ffでも同じ結果になります。 同じドメイン(同じディレクトリ内)の iframe 。 コンソールでiframeをターゲットにして、コンソールで使用window.location.replace('/samepage.html#onpage_anchor')します。 できます。 これは、ページをリロードすることなく、履歴なしでページ上のアンカーをターゲットにします。 同じコードをアンカーリンクにインラインで配置すると機能します。 外部スクリプトで同じコードを使用すると、csp違反エラーが発生します。 これは、iframe内でなくても正常に機能します。 私は、CSPを作成しようとしたアクションを許可しますが、いなくても、最も寛容なコンテンツセキュリティポリシー可能性は、それを可能にします。 編集:複数のファイルを許可する例をプランカーにまとめて、親/子ページを参照する適切なhrefを使用できるようにします。 プランカーの例に関するメモ: 問題はこれらの例では再現されません。 スクリプトは、iframeでも完全に機能します。ただし、同じコードがローカルサーバーで機能しないか、VPSでライブ実行すると機能しません。 プランカーはある種の抽象化レイヤーを介してブラウザーにコンテンツを提示しているため、CSP違反はプランカーでトリガーされないのではないかと思います。 親のアコーディオンリンクを初めてクリックすると、更新されます。これは、ページが最初にロードされる方法がindex.htmlを参照しないためです。以降のクリックは、ページをリロードしなくても期待どおりに機能します。最初はchild.htmlを参照するため、iframeの問題ではありません これらは、コードを機能させるために変更を必要とせずにコードを表示するのに適した例です(下記のStackoverflowスニペットで機能させるためにhrefを変更する必要がある場合など)。また、javascriptが正常に機能していることも示しています。しかし、それは実際の問題を示していません。実際の問題を確認するには、エディターにロードしてローカルサーバーまたはライブホスティング環境で実行する必要があります。 プランカーの例 スクリプトあり: 履歴 なしスクリプトなし: 履歴あり 簡略化されたコード例 1つのエントリを持つ単純なアコーディオン。問題を再現するのに十分です。 開く/閉じるをクリックすると、アコーディオンが展開/折りたたまれます。JSは必要ありません。JSはまったく同じことを行いますが、履歴はありません。正常に機能しますが、iframeでは機能しません。 コードスニペットのメモ: スニペットを実行して、私が説明していることについてのアイデアを得ることができますが、実際には問題を示していません。 スニペットは実際のブラウザのように動作せず、JavaScriptは機能しません。 スニペットはコードを示していますが、問題を確認するにはiframeで実行する必要があります。iframeの外で実行して、違いとその動作を確認します。 リンクがJSでどのように機能するか(URL全体を置き換える)のため、スニペットに表示されるのと同じようにリンクするのではなく、 実際にはこのようにする必要があります(スニペットの実際のHTMLページをターゲットにすることはできません)。あなたがあれば、あなたのエディタでこれを試してください(行ってください)、その後、することを忘れないでください、この形式へのリンクを変更し、彼らはまだあるので、同じページのアンカー、しかしpage.htmlがリンクに含まれています。href="https://stackoverflow.com/thispage.html#ac1"href="#ac1" this_document.html#anchor コードスニペットを表示 $(document).ready(function() { // anchor links without history $.acAnch = …