프로젝트에서 이런 문제가 발생했습니다.
상위 창에서 window.open(location.href, projectId)을 사용하여 projectId가 window.name인 새 창을 엽니다.
그런 다음 상위 창에서 창을 새로 고치지 않고 프로젝트 ID를 기반으로 해당 열린 창으로 직접 전환하고 싶습니다.
window.open(location.href, projectId)을 직접 사용하면 해당 창으로 전환되는데, 페이지를 새로고침하지 않고 전환만 할 수 있는 방법이 있나요?
window.open의 반환 값을 변수에 저장하는데, 반환 값은 해당 창의
으아악window
对象,执行focus
메서드입니다.html5
의기록
관련API
를 사용하세요html5
的history
相关API
history.pushState()
history. popstate
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을 기반으로 창 개체를 얻는 방법이 있으면 훨씬 더 편리할 것입니다.