2011-05-01 2 views
24

3 응용 프로그램 내가 수행왜 "이 페이지의 추가 대화 상자 생성 금지"가 경고 상자에 나타 납니까? 내 레일에서

render :js => "alert(\"Error!\\nEmpty message sent.\");" if ... 

가끔, 내가 볼이 오류 메시지가 아래 (같은 경고 상자에) 및 체크 박스 "이 페이지가 추가적인 대화를 생성 방지".

이것은 무엇을 의미합니까?

이 추가 텍스트 및 확인란을 표시하지 않을 수 있습니까?

나는 파이어 폭스 4

+5

브라우저는 JS 코드가 약간의 버그가 그것이 어떤 종류의 매우 자주 메시지를 표시하고 있다고 생각 루프 따라서 브라우저는 사용자에게이 경고 상자를 허용하지 않을 수있는 옵션을 제공합니다. – Ankur

+4

Chrome은이 경고의 내용이나 길이에 관계없이 두 번째'경고 '부터 이것을 보여줍니다. –

+0

@ShadowWizard 오늘 현재까지는 경과 한 이전 알림이 닫힌 이후로 타이머는 약 1 초 정도입니다. – Dan

답변

27

그것은 또 다시 짜증나는 경고 상자를 보여 웹 사이트를 중지 브라우저 기능의 사용합니다.

웹 개발자는 사용을 중지 할 수 없습니다.

10

이것은 무엇을 의미합니까?

무한 루프에서 모달 (경고/확인) 메시지를 표시하여 페이지가 브라우저 (또는 현재 페이지)를 멈추지 않도록하기 위해 브라우저의 보안 조치입니다. 예 : Firefox 용 here

이 기능을 끌 수 없습니다. 그 주위의 유일한 방법은 JQuery UI's dialogs과 같은 사용자 지정 대화 상자를 사용하는 것입니다.

+4

그냥 추가하십시오 : Firefox 4 이후부터 그 경고는 더 이상 모달이 아니며 최소한 창 관리자에게는 아닙니다. 요즘 다른 탭/Windows로 쉽게 이동할 수 있습니다. –

0

JQuery UI's dialogs을 사용하는 것은 항상 해결책이 아닙니다. 내가 아는 한 경고 및 확인은 특정 시점에서 스크립트 실행을 중지하는 유일한 방법입니다. 이 문제를 해결하기 위해 우리는 응용 프로그램이 경고를 호출하고 확인해야한다는 것을 사용자가 알 수 있도록하는 메커니즘을 제공 할 수 있습니다. 내가 잘하면 내 웹 응용 프로그램에서 체크 박스를 우회하기 위해이 기능을 설계

var f_confirm; 
function setConfirm() { 
    f_confirm = confirm; 
    confirm = function(s) { 
    try { 
     return f_confirm(s); 
    } catch(e) { 
     showError("Please do not check 'Prevent this page from creating additional dialogs'"); 
    } 
    return false; 
    }; 
}; 
+2

"경고 및 확인은 특정 시점에서 스크립트 실행을 중지하는 유일한 방법입니다."- 동기식으로 생각할 때 사실입니다. 그러나 jQueryUI 컨트롤을 사용하여 다른 메서드를 실행하여 결과를 처리 할 수 ​​있습니다. – GalacticCowboy

+0

비동기 적으로 생각할 때도 마찬가지입니다. 콜백을 사용해도 그 사이에서 실행되는 코드는 중단되지 않습니다. 하지만 콜백 함수를 전달하는 것은 jQuery 대화 상자를 사용할 때 흐름을 제어하는 ​​좋은 방법입니다. – mozey

0

: (showError는 jQuery를 대화 상자 또는 사용자와 통신 할 다른 방법을 사용하는 경우)이 예를 들어 다음과 같이 수행 할 수 있습니다.

실행 중 페이지에서 모든 기능을 차단합니다 (사용자가 마지막 대화 상자를 닫은 후 3 초 미만이라고 가정 함). 그러나 코드를 작성할 필요가 없으므로 재귀 또는 setTimeout 함수를 사용하는 것이 좋습니다. 대화 상자가 나타날 때까지 기다리는 동안 다른 것이 클릭되거나 트리거 될 가능성.

이미 Modalbox에 포함 된 보고서에 오류/확인/확인을 표시 할 때 가장 필요합니다. 추가 대화 상자에 div를 추가 할 수는 있지만 기본 대화 상자를 사용할 수 있으면 불필요한 것처럼 보입니다.

dom.successive_dialog_time_limit이 3보다 큰 값으로 변경되고 Chrome에 Firefox와 동일한 기본값이 있는지 여부도 알 수 없습니다. 그러나 적어도 그것은 선택 사항입니다.

누구든지 개선 할 수 있다면 역시하십시오!

// note that these should not be in the global namespace 
var dlgRslt, 
    lastTimeDialogClosed = 0; 

function dialog(msg) { 
    var defaultValue, 
     lenIsThree, 
     type; 

    while (lastTimeDialogClosed && new Date() - lastTimeDialogClosed < 3001) { 
     // timer 
    } 

    lenIsThree = 3 === arguments.length; 
    type = lenIsThree ? arguments[2] : (arguments[1] || alert); 
    defaultValue = lenIsThree && type === prompt ? arguments[1] : ''; 

    // store result of confirm() or prompt() 
    dlgRslt = type(msg, defaultValue); 
    lastTimeDialogClosed = new Date(); 
} 

사용은 :

dialog('This is an alert.'); 

dialog('This is a prompt', prompt); 
dialog('You entered ' + dlgRslt); 

dialog('Is this a prompt?', 'maybe', prompt); 
dialog('You entered ' + dlgRslt); 

dialog('OK/Cancel?', confirm); 
if (dlgRslt) { 
    // code if true 
} 
0

이 브라우저 기능입니다.당신이 http://bootboxjs.com/을 사용하려고 할 수 있다면

, 당신은 서면으로

alert("Empty message sent"); 

의 동일한 기능을 수행 할 수있는이 라이브러리를 부엉 :

bootbox.alert("Empty message sent", function(result) { 
    // do something whit result 
}); 

당신은 좋은 사용자 인터페이스를 너무 얻을 것이다!

3

당신은 기본적으로 경고 기능을 무시하는 코드 아래, 자바 스크립트를 사용하여 사용자 지정 경고 상자를 만들 수 있습니다

window.alert = function(message) { $(document.createElement('div')) 
    .attr({ 
     title: 'Alert', 
     'class': 'alert' 
    }) 
    .html(message) 
    .dialog({ 
     buttons: { 
     OK: function() { 
      $(this).dialog('close'); 
     } 
     }, 
     close: function() { 
     $(this).remove(); 
     }, 
     modal: true, 
     resizable: false, 
     width: 'auto' 
    }); 
}; 
+0

이것을 사용하는 방법을 보여줄 수 있습니까? 사용 방법 및 발생 상황에 대한 설명을 추가 할 수 있습니까? – drooh