プロジェクトでこのような問題に遭遇しました。
親ウィンドウで window.open(location.href, projectId) を使用して、projectId を window.name として新しいウィンドウを開きます。
次に、親ウィンドウで、プロジェクト ID に基づいて、ウィンドウを更新せずに、対応する開いているウィンドウに直接切り替えたいと考えています。
window.open(location.href, projectId) を直接使用すると、対応するウィンドウに切り替わりますが、ページが更新されてしまいます。更新せずに切り替えるだけの方法はありますか?
変数を使用して window.open の戻り値を保存します。戻り値はそのウィンドウの
リーリーwindow
对象,执行focus
メソッドです。使用
html5
的history
相关API
history.pushState()
history. popstate
イベントなど関連コンテンツについては、ブラウザMDNの履歴記録を参照してください
A ウィンドウが B ウィンドウを開き、B ウィンドウが C ウィンドウを開き、A は B への参照を持ち、B は C への参照を持っているとします。
現時点では、AウィンドウからBウィンドウへのジャンプ、またはBウィンドウからCウィンドウへのジャンプは、window.focus()を使用して直接実装できます。
しかし、ウィンドウ A の C にジャンプしたいのです。さまざまな API を確認した結果、window.name を通じて対応するウィンドウ オブジェクトを直接取得する方法が見つかりませんでした。 localstorageを試してみましたが、ウィンドウオブジェクトを保存できませんでした。この状況はちょっと面倒です。
考えた結果、どうしても実現しなければならないのであれば、方法はあるはずです。大まかに言うと、localStorage は、初めて開いたときのツリー構造全体を保存するために使用されます。ルート ノードは A、A の子ノードは B、B の子ノードは C です。このようにして、すべてのウィンドウは最終的にジャンプされる最後のウィンドウの所有者を見つけることができ、postMessage を通じてそのウィンドウの所有者にレイヤーごとに通知し、ターゲットの window.focus() メソッドをトリガーできるようになります
ただし、この方法では、スイッチング回数が多いとツリー構造が少し複雑になり、各層の通信オーバーヘッドがかなり大きくなることが予想されます。ブラウザに window.name に基づいてウィンドウ オブジェクトを取得するメソッドがあれば、さらに便利になります。