2016-07-01 15 views
0

두 개의 브라우저 창이 있습니다. 이 나란히 있습니다. 누군가가 창 나는 창 B에서 함수를 실행하려는에서 버튼을 클릭jQuery : 다른 탭/창에서 이벤트 실행

.

저는 현재 기능 실행을 시작하기 위해 다른 창을 말할 창 에 창 B과 window.open (myURL이, myURL이)의을 hashchange 이벤트를 사용하고 있지만, 이것은 매우 작동하지 않습니다 우물이 바뀔 때.

자바 스크립트에서 현재 창 외부의 초기화 이벤트에 대한 다른 해결책이 있습니까?

+1

[Window.postMessage()] (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)를 살펴보십시오. –

답변

1

내가 생각할 수있는 한 가지 방법은 같은 도메인에 속해 있기 때문에 같은 localStorage를 공유하는 한 다른 탭/창이 감지하는 localStorage 변경을 유발하는 것입니다. 이 같은 것을 할 이벤트 트리거 탭의 경우 :

localStorage.setItem('detectMyChange', '0'); 
localStorage.setItem('detectMyChange', '1'); 

그런 다음 당신은 다른 탭/창에서 그 변화를 감지하고 반응 할 수 있습니다 (여기에 jQuery를 사용 미안를, 순수 자바 스크립트와 유사하다) :

$(window).on('storage', function (e) { 
    var storageEvent = e.originalEvent; 
    if ((storageEvent.key == 'detectMyChange') && (storageEvent.oldValue == '0') && (storageEvent.newValue == '1')) { 
     // Event detected, do some really useful thing here ;) 
    } 
}); 
트리거 창에 두 번 로컬 스토리지를 변경하는 이유는 당신이 로컬 스토리지 변수의 변화를 감지하기 때문에, 동일한 코드를 사용하여 (같은 창 또는 기타에) 다시 이벤트를 트리거 할 수있을 것입니다

하나의 알려진 값에서 또 다른 알려진 값으로.

다른 새 값을 설정하여 다른 정보를 다른 탭/창으로 보낼 수도 있습니다. 도움이 되길 바랍니다.

+0

멋진 답변! 나는 이미 로컬 스토리지를 사용하여 다른 윈도우에 어떤 내용이 변경되었는지 알려줍니다. 그러나 저장 이벤트를 인식하지 못했습니다. 감사! – typocoder