버튼을 클릭 할 때마다 포커스를받는 "팝업 창"을 만들고 싶습니다. 아래 함수는 onclick
이벤트 에서 제대로 실행되지만 상위 페이지가 새로 고쳐지고 onload 이벤트에서 실행될 때 예상대로 실행되지 않습니다.
내 기능은 다음과 같습니다.
function PopupDelete(delete_images)
{
var win = window.open('URL','PopupDelete','width=500,height=400,scrollbars=yes');
win.focus();
}
따라서 아래 버튼에서 이것을 사용하면 예상대로 작동합니다.
<input type="button" name="delete" value="Images" class="smallbutton" onclick="PopupDelete(delete_images);">
이제 내가 가진 문제는 PopupDelete
함수 를 직접 호출하는 대신 버튼에 set_mode라는 다른 메서드를 사용하고 있다는 것입니다.
function set_mode(mode)
{
document.MASTER.mode.value = mode;
document.MASTER.submit();
}
<input type="button" name="delete" value="Images" class="smallbutton" onclick="set_mode('delete');">
마스터 양식의 모드를 삭제로 설정하고 양식을 제출합니다. 랜딩 페이지는 양식이있는 페이지와 동일합니다. 그래서 그것은 약간의 PHP 유효성 검사를 수행 하고 body 태그 내의 메소드로 PopupDelete
함수를 실행합니다 onload
.
<body onload='PopupDelete(delete_images)'>
팝업 창이 열려 있지 않으면 제대로 작동하지만 팝업 창이 이미 열려 있고 최소화되어 있으면 팝업 창이 포커스를 얻지 못합니다. 재미있는 점은 팝업 창에 렌더링 된 내용을 인식하고 업데이트하지만 .focus ()는 인식하지 못한다는 것입니다.
어떤 제안이라도 널리 감사하겠습니다.
사용자 상호 작용없이 팝업 창을 여는 것과 사용자 상호 작용없이 팝업 창에 초점을 맞추는 것은 브라우저 보안 때문입니다. 또한 보안이 독립적으로 유지되기 때문에 이는 브라우저에 따라 다릅니다.
사용자가 이미 차단 된 팝업 표시를 수락 한 경우 사용자 상호 작용없이 팝업 창을 열 수있는 것으로 보입니다. 그러나 팝업을 허용한다고해서 focus
팝업 창 개체 에서 메서드 를 호출 할 수는 없습니다 . 이 다른 SO 대답 은 더 많은 정보를 원하면 이것에 대해 다룹니다 .
다음 코드로이 문제를 시연 할 수 있습니다 . 페이지를로드해도 Safari, Chrome 또는 Firefox에서 팝업이 열리지 않습니다 (Mac을 사용하고 있으므로 브라우저 결과가 Windows와 다를 수 있음을 명심하십시오). 차단 된 팝업을 허용하거나 이전에 사이트를 방문했을 때 이미 팝업 창이 열려있는 경우 창은 3 개의 브라우저 모두에서 URL로 다시로드됩니다. Safari에서만 focus
사용자 상호 작용없이 이미 팝업 창에서을 호출 할 수 있습니다 (onload
), Chrome 및 Firefox는 그렇지 않습니다. 그러나 보시다시피 포커스 버튼을 클릭해도 세 브라우저 모두에서 팝업 창에 포커스가 맞춰져 가능하다는 것을 보여 주지만 브라우저가 차단하고 있습니다. 그래서 내가 말할 수있는 것은 Safari에서만 가능합니다 (다시 한번 IE를 시도하지 않았 음을 기억하십시오). 그러나 어느 쪽이든 사용자가 특정 브라우저를 사용하여 사이트를 올바르게 보도록 강요하는 것은 좋지 않다고 생각합니다.
var w;
function PopupDelete(delete_images) {
w = window.open('/testing/t/', 'PopupDelete', 'width=500,height=400,scrollbars=yes');
console.log(w);
w.focus();
}
$(function () {
PopupDelete();
$('#open').click(PopupDelete);
$('#focus').click(function () {
console.log('f', w);
w.focus();
});
});
또한 이렇게 할 수 있더라도 부모를 다시로드하면 팝업 창을 다시window
열고 이전 창을 대체하는 것입니다 ( 이는 이전에 열린 창의 개체를 가져올 수 없기 때문에 수행해야합니다. , 먼저 다시 열지 않고 초점을 맞추기 위해 해당 변수를 유지할 방법이 없습니다). 따라서이 팝업 창은 어쨌든 무결성을 유지하지 않습니다. 이 작업을 완료하는 더 좋은 방법이 있어야한다고 생각합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다