2011-04-29 4 views
3

위약 유형 시작 전 면책 조항 : "와일드에서"배포 할 수 없습니다. 이 기능은 Chrome 부가 기능을 통해서만 로컬에서 사용할 수 있습니다. 나는 이 아니며은 내 사이트를 방문하는 방문자를 속이거나 불쾌한 행동을 시도합니다. 나는 onbeforeunload를 연결하고자하는 이들을 질책하는 약간을 보았다.Gmail이 닫기/표시 유지하지 못하도록 함

일부 배경

멀리하고 (적어도 맥 OS)에 크롬과 멀리 내 가장 큰 불만은 그것의 탭 닫기 (나는 보통처럼) 나는 열려있는 여러 탭이, 버튼, 결과를 내 탭 자체가 상당히 작아지면서 의도하지 않게 탭을 자주 닫고 따라서 탭 닫기 버튼으로는 커버되지 않는 클릭 대상 영역이 매우 작습니다. 뉴스 기사, 블로그 게시물, 문서 등이있는 특정 탭에서는별로 불편하지 않지만 큰 불편을 겪습니다. 나는 CMD + T를 탭을 다시 열면 아무런 해를 끼치 지 않는다. 그러나 특정 탭, 특히 Gmail의 경우 폐쇄 될 수있는 단점이 있습니다. 자주 동료와 대화 대화를 하나 이상 열고 탭을 다시 열면 채팅 대화 상자가 복원되지 않고 새 채팅을 시작하면 현재 대화 기록이 사라집니다 (예, 저장되었지만 문맥에서 뒤로 스크롤하면 편리하게 액세스 할 수 없습니다) . Google에 탭 닫기 버튼을 단순히 제거하는 옵션을 추가하라는 요청이 몇 가지 있습니다 (CMD + W를 사용하는 것을 선호합니다).하지만 숨막히는 생각은 아닙니다.

부분적인 해결책

얼마 다시 친구가되는 추가 도메인 별 맞춤 자바 스크립트 실행, Greasemonkey와 유사하지만 약간의 차이를 수있는 dotJS 크롬으로 저를 지적했다. 여하튼, 그것은 내가 정기적으로 방문하는 많은 사이트에서 이슈/해결을 "고칠"수있는 수단을 주었고, 나는 그것이 지금까지 매우 도움이된다는 것을 발견했다. 다른 날에 나에게 내 Gmail, 기타 탭을 자바 스크립트로 열어 둘 수 있다고 생각한 적이있다. 정규식을 기반으로 탭을 닫기 전에 사용자에게 메시지를 표시하는 작은 스크립트를 작성했습니다. 다음과 같이 코드의 요점은 다음과 같습니다

var unloadHandler = function(e) { 
    if (/(mail.google.com|google.com\/reader|gmail.com)/.test(location)) { 
     return 'Are you sure you want to close: ' + location.host; 
    } 
}; 

window.onbeforeunload = unloadHandler; 

소호이 내가 그것을 입어 대부분의 사이트에 대한 속임수를 썼는지, 보라 단 하나 : Gmail 제외. Gmail 탭 닫기를 확인하는 메시지가 표시되면 탭이 닫히지 만 탭을 열어두면 대화 상자가 표시되기 전에 페이지가 완전히 사라졌습니다. 화이트. 엘리먼트 인스펙터는 마크 업이 여전히 (내가 말할 수있는 한) 표시하고, 엘리먼트의 스타일은 숨김 (즉, 디스플레이 : 없음, 가시성 : 숨김 등)을해서는 안되며 엘리먼트의 위치는 여전히 있음을 보여줍니다 올바른 (예 : 볼 수있는 영역 내에 있음). Gmail 인터페이스를 왜곡시키는 항목이 있는지 알아보기 위해 하나씩 삭제 요소를 살펴 보았지만 화면에 표시 할 수 없었습니다. 나는 내 삶에 대해 무슨 일이 일어나는지 알 수 없다. Gmail이 (* before * beforeunload?), 또는 Google의 브라우저가 Gmail 페이지에서 특별한 작업을하고 있거나 이상한 행동을 일으키는 지 알지 못하는 일부 이벤트에 Gmail이 연결되어 있는지 확실하지 않습니다. Google 리더는 내가 테스트 한 다른 모든 사이트와 마찬가지로이 기이 (페이지의 내용을 닫고 유지하지 못하게 할 수 있음)의 영향을받지 않습니다.

이 문제의 원인을 아는 사람이 있습니까?

기록을 위해 Mac OS X 10.6.5, Google Chrome 10.0.648.205 및 dotJS 1.3을 실행합니다.

의견을 보내 주셔서 감사합니다. 탭 고정, 내 워크 플로/사용 변경 (예 : 마우스로 탭 선택 안함) 등의 작업은 필요하지 않습니다. (또는 아마도 크롬?)이 저의 노력을 방해하고 있습니다. 미리 감사드립니다.

+0

gmail이 onbeforeunload에 후크 할 수 있습니다. 동일한 이벤트에 연결하더라도 gmail의 핸들러는 계속 호출되며 특히 목록에있는 경우 특히 유용합니다. 핸들러가 먼저 호출되도록 보장 할 수 있는지, 그리고 그렇다면 이벤트를 중지 할 수 있는지 여부는 확실하지 않습니다. onbeforeunload는 다른 이벤트와 다르게 처리되는 경향이 있습니다. 페이지의 기존 onbeforeunload 핸들러를 제거하려고 시도 할 수 있는지 확실하지 않으므로 자신의 것만 실행됩니다. – ewh

답변

2

Gmail의 자체 코드로 인해 문제가 발생한다고 생각합니다. 나는이 기능을 콘솔에서이 이벤트에 대한 가입과 (리눅스 시스템에서) 문제를 재현 나는 개발자 도구 프로파일 창을 닫은 후 마지막 호출을 시작했는데 그 후

window.onbeforeunload = function(e) { 
    return "Hey what\'s wrong with you?!"; 
}; 

(과를 선택할 수 있습니다 '질문에 대한이 페이지에 머물러 라.')는 iframe id = "canvas_frame"/ > 인 < 일부 콘텐츠를 제거하는 removeChild 함수 호출입니다. 따라서 콘텐츠 요소는 더 이상 존재하지 않습니다.

function Fc(b) { 
    return b && b.parentNode ? b.parentNode.removeChild(b) : m 
} 

난 beforeunload 이벤트에 대한 가입을위한 난독 화 코드의 일부 '흔적'을 발견했습니다,하지만 나는 파이어 폭스에서이 문제를 재현하려 :

function It(b, a) { 
    this.Qc = jCa++; 
    this.ea = b; 
    this.ka = new J(this); 
    this.Qa = a; 
    this.Ka = []; 
    this.Za = !1; 
    this.ka.ya(this.ea, "unload", this.Da); 
    this.ka.ya(this.ea, "beforeunload", this.ab); 
    Ypa(Zd(a), this); 
    this.ia() 
} 

확인하기 어렵지만 나는 google가 다른 브라우저를 위해 다른 자바 스크립트 코드를 제공한다고 생각하여 그것을 재현 할 수 없다.

관련 문제