ProgramingTip

JavaScript 변수를 다른 브라우저 창에 있습니까?

bestdevel 2020. 11. 10. 22:04
반응형

JavaScript 변수를 다른 브라우저 창에 있습니까?


팝업 브라우저 창을 생성하는 페이지가 있습니다. 부모 브라우저 창에 JavaScript 변수가 팝업 팝업 브라우저 창에 전달하고 싶습니다.

이를 수행하는 방법이 있습니까? 모든 것이 확실하지 않습니다.


창이 동일한 보안 도메인에 있고 다른 창에 대한 참조가있는 경우.

자바 펼쳐의 개방 () 방법은 생성 된 창 (또는 기존 창을 사용하는 경우 기존 창)을 반환합니다. 이러한 방식으로 생성되는 각 창에는 해당 창을 생성 한 창을 적용합니다.

그런 다음 DOM (에 따라 다름)을 사용하여 다른 속성이나 문서, 프레임 액세스 할 수 있습니다.


문제에 코드를 제안면 부모 창에서 다음과 같이 할 수 있습니다.

var thisIsAnObject = {foo:'bar'};
var w = window.open("http://example.com");
w.myVariable = thisIsAnObject;

또는이 새 창에서 :

var myVariable = window.opener.thisIsAnObject;

후튼 선호합니다. 왜냐하면 새 페이지가로드 될 때까지 기다려야 할 수도 있기 때문입니다. 그러면 그 요소 나 원하는 것에 액세스 할 수 있습니다.


예, 펼쳐지는 핸들이있는 동일한 도메인의 다른 창의 속성에 액세스 할 수 있습니다 (일반적으로 window.open/opener 및 window.frames / parent를 통해 얻음). 일반적으로 변수를 직접 조작하는 것보다 다른 창에서 정의 된 함수를 호출하는 것이 더 관리하기 쉽습니다.

그러나 창은 죽거나 숫자가있는 브라우저는 그럴 때 다르게 처리합니다. 호출을 시도하기 전에 창 (a)가 아직 열려 있는지 (! window.closed) 및 (b) 사용할 수있는 기능이 있는지 확인하십시오.

클래스와 같은 단순한 값은 괜찮지 만 일반적으로 함수, DOM 요소 및 창 사이에 클로저와 같은 복잡한 언어 전달하는 것은 좋지 않습니다. 하지만 창에 오프너의 개체가 저장되면 오프너가 닫히고 해당 개체가 '죽거나'(IE와 같은 일부 브라우저에서) 누수가 저장됩니다. 이상한 오류가 보관됩니다.


창 (창이 동일한 도메인에있는 경우)간에 변수를 전달하는 것은 다음을 통해 쉽게 수행 할 수 있습니다.

  1. 쿠키
  2. localStorage. 브라우저가 localStorage를 지원하는지 확인하고 변수 유지 관리 권한 (추가 / 삭제 / 제거)을 수행하여 localStorage를 깨끗하게 유지합니다.

부모 창에서 :

var yourValue = 'something';
window.open('/childwindow.html?yourKey=' + yourValue);

그런 다음 childwindow.html에서 :

var query = location.search.substring(1);
var parameters = {};
var keyValues = query.split(/&/);
for (var keyValue in keyValues) {
    var keyValuePairs = keyValue.split(/=/);
    var key = keyValuePairs[0];
    var value = keyValuePairs[1];
    parameters[key] = value;
}

alert(parameters['yourKey']);

키 / 값 쌍을 구문 분석 할 때 수행해야 할 오류 검사가 많이 할 것입니다. 누군가가 나중에 답변에서 더 쉽게 Javascript 쿼리 구문 분석 루틴을 제공 할 수 있습니다.


변수를 전달하고 부모 창에있는 항목을 매우 쉽게 참조 할 수 있습니다.

// open an empty sample window:
var win = open("");
win.document.write("<html><body><head></head><input value='Trigger handler in other window!' type='button' id='button'></input></body></html>");

// attach to button in target window, and use a handler in this one:
var button = win.document.getElementById('button');

button.onclick = function() {
     alert("I'm in the first frame!");   
}

'부모'창에서 '자식'창으로 메시지를 많은 수 있습니다.

'부모 창'에서 아이를 여러 다

    var win = window.open(<window.location.href>, '_blank');    
       setTimeout(function(){
                    win.postMessage(SRFBfromEBNF,"*")
                  },1000);
    win.focus();

후속에 따라 대체 될

'아이'에서

    window.addEventListener('message', function(event) {
        if(event.srcElement.location.href==window.location.href){
        /* do what you want with event.data */
        }
    }); 

테스트는 필요에 따라 변경되어야합니다.


예, 두 창이 있으면 좋습니다. window.open () 함수는 새 창에 대한 핸들을 반환합니다. 새 창은 DOM 요소 "opener"를 사용하여 부모 창에 액세스 할 수 있습니다.


또는 URL에 추가하고 스크립팅 언어 (PHP, Perl, ASP, Python, Ruby 등)가 다른 쪽에서 처리하도록 할 수 있습니다. 다음과 같은 것 :

var x = 10;
window.open('mypage.php?x='+x);

새로 열린 창에 인수를 성공적으로 전달하는 데 어려움을 겪었습니다.
내가 생각해 낸 것은 다음과 같습니다.

function openWindow(path, callback /* , arg1 , arg2, ... */){
    var args = Array.prototype.slice.call(arguments, 2); // retrieve the arguments
    var w = window.open(path); // open the new window
    w.addEventListener('load', afterLoadWindow.bind(w, args), false); // listen to the new window's load event
    function afterLoadWindow(/* [arg1,arg2,...], loadEvent */){
        callback.apply(this, arguments[0]); // execute the callbacks, passing the initial arguments (arguments[1] contains the load event)
    }
}

통화 예 :

openWindow("/contact",function(firstname, lastname){
    this.alert("Hello "+firstname+" "+lastname);
}, "John", "Doe");

라이브 예

http://jsfiddle.net/rj6o0jzw/1/


window.nameWindows 간 데이터 전송으로 사용할 수 있으며 도메인 간에서도 작동합니다. 공식적으로 지원되지는 않지만 내 이해에 따르면 실제로 크로스 브라우저에서 매우 잘 작동합니다.

이 Stackoverflow 게시물에 대한 자세한 정보


예 브라우저는 모든 참조를 지 웁니다. 창문을 위해. 따라서 메인 창에서 ClassName을 검색하거나 쿠키를 Javascript 수제 참조로 사용해야합니다.

내 프로젝트 페이지에 라디오가 있습니다. 그런 다음 라디오를 켜면 팝업 창에서 시작되고 메인 페이지의 메인 창 링크를 제어하고 재생 상태를 표시하고 FF에서는 쉽지만 MSIE에서는 전혀 쉽지 않습니다. 하지만 할 수 있습니다.


window.open () 함수는 생성 된 창에 대한 참조가 동일한 도메인에있는 경우이를 허용합니다. 변수가 서버 측에서 사용되는 경우 $ _SESSION 변수를 사용해야합니다 (PHP를 사용한다고 가정).

참고 URL : https://stackoverflow.com/questions/87359/can-i-pass-a-javascript-variable-to-another-browser-window

반응형