I encountered such a problem in the project.
Use window.open(location.href, projectId) in the parent window to open a new window with projectId as window.name.
Then in the parent window, I want to switch directly to the corresponding opened window based on the projectId, but without refreshing the window.
Using window.open(location.href, projectId) directly will switch to the corresponding window, but the page will be refreshed. Is there any way to only switch without refreshing?
淡淡烟草味2017-05-19 10:36:22
Use a variable to save the return value of window.open, and the return value is the window
对象,执行 focus
method of that window.
win1 = window.open(url1);
win2 = window.open(url2);
// 后续用 win1 这个引用执行 focus 方法
if (!win1.closed) {
win1.focus();
}
为情所困2017-05-19 10:36:22
Use html5
的history
相关API
history.pushState()
history. popstate
Events and more
For related content, please refer to the history record of the browser MDN
某草草2017-05-19 10:36:22
Suppose A window opens B window, B window opens C window, A has a reference to B, and B has a reference to C.
At this time, jumping from A window to B, or jumping from B window to C can be directly implemented using window.focus().
But I want to jump to C in window A. After checking various APIs, I haven’t found how to directly obtain the corresponding window object through window.name. I tried localstorage but couldn't save the window object. This situation is a bit troublesome.
After thinking about it, if it must be realized, there should be a way. Roughly, localStorage is used to save the entire tree structure. The root node is A when it is opened for the first time, the child node of A is B, and the child node of B is C. In this way, all windows can finally find the owner of the last window to be jumped, and then notify the owner of that window layer by layer through postMessage, allowing him to trigger the target window.focus() method
But this way, the project The tree structure will become a bit complicated if the number of switching times is high, and the communication overhead of each layer is estimated to be quite high. It would be much more convenient if the browser had a method to obtain the window object based on window.name.