2012-05-23 1 views
2

좋아, window.onblur 및 window.onfocus와 같은 기본 함수에 관한 답변을 많이 찾았습니다.하지만 내가 javacript (가능하면 jquery)를 사용하여 하나의 창에서만 하나의 창을 재생합니다.

  1. 당신이 하나 개의 웹 사이트
  2. 의 여러 탭을 열고 말보다 구체적 싶습니다 그렇게 도움이되지 않습니다 당신이 메일을 수신하고 여러 것처럼 메시지
  3. 을 발표하는 소리가 말할 탭이 열리면 열린 탭의 수가 소리로 들립니다. 어떤 내가 지금까지 발견했지만, 어느 1. window.onfocus 및 window.onblur 2. 소리 재생 VAR 경우 작동하지 않습니다

최상의 솔루션 how'd'u'callit 교향곡한다 그것은 crossbrowser 4.하지 3. 경우 인포 커스이 true로 평가, 재생되지 않습니다 그것은 최고의 솔루션이 작동하지 않습니다 왜 그것은

작동하지 않습니다 5. 간단하다? 다른 웹 사이트의 다른 탭으로 포커스를 전환하면 웹 사이트가 포커스를 잃어서 소리가 나지 않게됩니다. 더 나쁜 것은, 당신이 다른 프로그램으로 전환했다면, 브라우저 자체가 초점을 잃어 버리고 소리가 들리지 않는다는 것입니다.

그럼 어떻게해야합니까?

답변

0

좋아요, 2 주 후에 나는 진짜 해결책을 찾은 것 같습니다. 어떤 실제로 당신이 뭔가를 원한다면, 단지 어떻게, 도움을 요청하지 않는 것이 증명이

이것은 내가 무슨 짓을 :

  1. 의 (a RANDON ID와 현재 시간과 함께 쿠키 만들기 winid + t1). 쿠키는로드 할 때마다 열린 탭마다 만들어집니다. document.cookie = 'winid ='+ winid + t1;

  2. set cookie의 현재 시간을 3 초마다 업데이트하는 함수를 만듭니다 (클라이언트를 오버플로하지 않으므로 3 초가 아닙니다). 함수가 쿠키의 winid와 현재 탭의 winid가 일치하지 않고 3 초가 경과 한 것을 알게되면 탭이 닫히고 동일한 기능의 기본 탭을 다시 정의합니다. 창이 나타납니다.setInterval (setwinid, 3000); 이것은 그 것이다

  3. , 당신은, 말하자면, 사운드를 재생해야 할 때마다, 당신은 그것을

트릭을 재생하는 것입니다 탭 각 탭을 가지고 있다는 것입니다 여부를 먼저 확인해야합니다 그 자신의 위니드. 그러나 하나의 winid 만 쿠키에 저장되고 업데이트되므로 하나의 탭에서 작업을 수행 할 수 있습니다. 아주 간단합니다. 실제로 음악 재생뿐만 아니라 모든 탭에서 상자의 메시지를 업데이트하기 위해이 방법을 사용하기 시작했습니다.

0

한 가지 해결책은 한 번만 알림을 재생하는 서버 측 솔루션을 사용하는 것입니다. 사이트가 메시지를 수신하는 방법은 지정하지 않지만 서버에서 메시지를 가져 오는 AJAX 호출의 일부 형태라고 가정하고 메시지는 데이터베이스에 저장됩니다.

메시지가 전송되었음을 나타내는 플래그를 데이터베이스에 추가하십시오. 사용자의 브라우저가 새 메시지를 처음 쿼리 할 때 플래그를 설정하십시오. 페이지 자체에서는 플래그가 설정되지 않은 경우에만 사운드를 재생하고, 그렇지 않으면 사운드를 재생하지 않습니다. 이제 메시지를 가져 오는 첫 페이지 만 사운드를 재생합니다.

+0

음, 실제로 서버 측 솔루션도 좋지 않은 것으로 보입니다. 사용자가 로그인하여 새 메시지가 있지만 잠시 동안 무시하는 것이 좋습니다. 이 경우 사운드는 재생되지만 사용자가 다음에 로그인 할 때 다시 재생되지는 않지만 메시지는 읽지 않은 상태입니다. 서버 쪽 플래그는 실제로 그들을 읽게합니다 ... 그렇지 않으면 보이지 않습니다. – Otvazhnii

+0

일정 시간 후 또는 사용자가 로그 아웃 할 때 플래그를 지울 수 있습니다. 읽기와 통지를위한 별도의 플래그를 가질 수 있습니다. – JJJ

1

마지막 onFocus() 이벤트의 타임 스탬프를 JavaScript 변수와 쿠키 (웹 사이트 루트에 대한 액세스 세트)에 저장할 수 있습니다. 그런 다음 경고음을 재생하려면 변수와 쿠키의 현재 값을 비교하고 일치하는 경우에만 사운드를 재생합니다.

관련 문제