window.open()에서 열린 창간에 데이터 교환

11987 단어 자바스크립트es6
window.open()는 새 창을 여는 메서드이지만 반환 값으로 열린 창에 대한 참조를 반환합니다.
또한 window.opener 속성은 현재 창을 연 창에 대한 참조를 반환합니다. 클라이언트측 JavaScript의 전역 변수는 window 객체의 속성이므로 window.open() 에서 열린 창은 서로의 전역 변수를 참조할 수 있게 됩니다.

샘플



이 예제에서는 창간에 값이 리액티브하게 공유되는 텍스트 입력을 작성해 보겠습니다.

test1.html
<!DOCTYPE html>
<html>
    <head>
        <script>
            let w1 = window
            let w2 = window.open("test2.html")

            Object.defineProperty(w1, "inputValue", {
                set(v){
                    console.log("w1.inputValue was set!:" + v)
                    w2.document.getElementById("input2").value = v
                }
            });

            function func(e){
                w1.inputValue = e.target.value
            }
        </script>
    </head>
    <body>
        input1 :
        <input type="text" id="input1" oninput="func(event)">
    </body>
</html>

test2.html
<!DOCTYPE html>
<html>
    <head>
        <script>
            let w1 = window.opener
            let w2 = window

            Object.defineProperty(w2, "inputValue", {
                set(v){
                    console.log("w2.inputValue was set!:" + v)
                    w1.document.getElementById("input1").value = v
                }
            });

            function func(e){
                w2.inputValue = e.target.value
            }
        </script>
    </head>
    <body>
        input2 :
        <input type="text" id="input2" oninput="func(event)">
    </body>
</html>
test1.html 를(를) 브라우저에서 열면:



이와 같이, 서로의 글로벌 변수 document 를 참조해 리액티브한 묘화를 실현하고 있습니다.

당연한 일이지만, 한쪽으로 다시 쓸 수 있습니다.

test3.html
<!DOCTYPE html>
<html>
    <head>
        <script>
            let w3 = window
            let w4 = window.open("test4.html")

            Object.defineProperty(w3, "inputValue", {
                set(v){
                    console.log("w3.inputValue was set!:"+v)
                    w4.document.getElementById("input4").value=v
                }
            });

            Object.defineProperty(w4, "inputValue", {
                set(v){
                    console.log("w4.inputValue was set!:" + v)
                    w3.document.getElementById("input3").value = v
                }
            });

            function func(e){
                w3.inputValue = e.target.value
            }
        </script>
    </head>
    <body>
        input3 :
        <input type="text" id="input3" oninput="func(event)">
    </body>
</html>

test4.html
<!DOCTYPE html>
<html>
    <head>
        <script>
            function func(e){
                inputValue = e.target.value
            }
        </script>
    </head>
    <body>
        input4 :
        <input type="text" id="input4" oninput="func(event)">
    </body>
</html>

소스는 여기에서 : htps : // 기주 b. 코 m / 요 k 등 9 / 레아 c ゔ ぇ - ゔ ぇ r ぃ んど w

참고 링크


  • window.open - Web API | MDN
  • window.opener - 웹 API | MDN
  • Object.defineProperty() - JavaScript | MDN
  • 좋은 웹페이지 즐겨찾기