C'è un modo utilizzando JavaScript o jQuery per rilevare se viene visualizzata una finestra di conferma o di avviso?Rileva se un avviso o una conferma è visualizzata su una pagina
risposta
No, non c'è. È possibile verificare che il valore restituito di un comando confirm
sia effettivamente true
o false
ma non è possibile verificare se ci sia visivamente lì.
Queste cose fanno parte del browser non fanno parte del DOM. Sono sicuro che c'è un trucco sporco che funziona per IE perché è un figlio bastardo del sistema operativo Windows.
+1 per il fatto che il tuo secondo paragrafo è quasi sicuramente vero. – Moses
@Moses Vi sfido a trovare un collegamento al sistema operativo Windows che consente di verificare acutamente che l'avviso sia fisicamente visualizzato in IE – Raynos
Questo è quello che ho pensato, grazie per le vostre risposte persone !! – Uggers2k
Le caselle di conferma e avviso sono eventi di blocco: l'esecuzione del codice Javascript viene interrotta mentre vengono visualizzate. Quindi no - non è possibile rilevare se uno è attualmente visualizzato, per quanto ne so.
È vero che blocca il thread dell'interfaccia utente, ma ciò non significa che sia possibile sniffarlo. –
Se si voleva eseguire del codice quando un alert()
incendi, si potrebbe provare qualcosa di simile:
ho testato solo in Chrome, quindi non sono sicuro circa il supporto del browser.
Esempio:http://jsfiddle.net/Q785x/1/
(function() {
var _old_alert = window.alert;
window.alert = function() {
// run some code when the alert pops up
document.body.innerHTML += "<br>alerting";
_old_alert.apply(window,arguments);
// run some code after the alert
document.body.innerHTML += "<br>done alerting<br>";
};
})();
alert('hey');
alert('you');
alert('there');
Naturalmente questo consente solo di eseguire codice prima e dopo un allarme. Come notato da @kander, l'esecuzione di JavaScript viene interrotta mentre viene visualizzato l'avviso.
Si potrebbe fare questo se si vuole ...
(function() {
// remember the normal alert
var oldAlert = (function(){ return this.alert; }()),
oldConfirm = (function(){ return this.confirm; }());
// inject ourself into the window.alert and window.confirm globals
alert = function (msg) {
oldAlert.call(document, msg);
document.onAlert(msg);
};
confirm = function (msg) {
var result = oldConfirm.call(document, msg);
document.onConfirm(msg, result);
return result;
};
// these just chill and listen for events
document.onAlert = function (msg) {
window.console && console.log('someone alerted: ' + msg);
};
document.onConfirm = function (msg) {
window.console && console.log('someone was asked: ' + msg);
window.console && console.log('and they answered: ' + (msg ? 'yes' : 'no'));
};
}());
L'aspetto negativo di questo è che
- stai violazione al sistema un metodo serie di un browser (roba che non dovrebbe tipicamente fare - http://perfectionkills.com/whats-wrong-with-extending-the-dom/)
- si dovrebbe solo essere meglio tenere traccia del proprio
alert()
confirm()
utilizzo, haha
Se si desidera rilevare se questi sono bloccati. Dovrai fare le tue cose con il messaggio che ti verrà visualizzato ma ignorare l'avviso nativo/confermare.
window.nativeAlert = window.alert;
window.alert = function (message) {
var timeBefore = new Date();
var confirmBool = nativeAlert(message);
var timeAfter = new Date();
if ((timeAfter - timeBefore) < 350) {
MySpecialDialog("You have alerts turned off, turn them back on or die!!!");
}
}
window.nativeConfirm = window.confirm;
window.confirm = function (message) {
var timeBefore = new Date();
var confirmBool = nativeConfirm(message);
var timeAfter = new Date();
if ((timeAfter - timeBefore) < 350) {
MySpecialDialog("You have alerts turned off, turn them back on or die!!!");
}
return confirmBool;
}
Ovviamente ho impostato il tempo su 3,5 millisecondi. Ma dopo alcuni test siamo stati in grado solo di cliccare o chiudere le finestre di dialogo in circa 5 millisecondi più
Nella conferma() è possibile anche restituire null se il tempo è troppo breve; questo potrebbe essere rilevato sia dai chiamanti che dall'aspetto 'falso' per la maggior parte degli usi normali. –
Ignorare il ritorno a null (o falso) in un intervallo di tempo troppo breve può anche aiutare a impedire la conferma automatica accidentale quando qualcuno invia un modulo, ma tiene premuto il tasto Invio troppo a lungo. –
Questa non è una cattiva idea, ma mi preoccupo di ignorare la decisione degli utenti, potrebbe essere che sapessero che ci sarebbe stata una conferma. Anche se vedo il vantaggio di farlo perché questa è l'unica scappatoia nel farlo. Qualcuno che può tenere premuto aprirà la finestra di dialogo speciale. Ma funzionerà il 99,9% delle volte. – DeadlyChambers
Per aggiungere alla risposta di @ user113716 puoi contare sul tempo. Presumo che se la finestra di dialogo di conferma impiega meno di 200 ms, viene bloccata dal browser. Sotto restituisco true se la finestra di conferma è bloccata (per impostazione predefinita restituisce false, il codice è in TypeScript).
let oldConfirm = window.confirm;
window.confirm = (msg) => {
let time = new Date().getTime();
let conf = oldConfirm(msg);
return new Date().getTime() - time > 200 ? conf : true;
}
- 1. Rileva se una pagina è all'interno di un iframe - serveride
- 2. Rileva se sta scorrendo una pagina Web su Android
- 3. rileva se una pagina web viene modificata
- 4. Rileva se Angular2 è caricato su una pagina quando si utilizza Systemjs
- 5. Rileva se una stringa contiene una tabella
- 6. Chiedere conferma quando si chiude una scheda
- 7. Ottenere pagina visualizzata usando JS o JQuery
- 8. Rileva se il focusout è dovuto a una pressione di tasto o a un clic
- 9. Rileva se una variabile è un oggetto datetime
- 10. Rileva se un tipo è una std :: tupla?
- 11. fare un avviso sul keyup solo se la chiave è una lettera o un numero
- 12. Come sapere se l'app di Facebook è su una pagina?
- 13. Javascript: Rileva quando una casella di avviso è OK e/o chiusa
- 14. C++ - Rileva se un file è PNG o JPEG
- 15. Rileva se un UIImage è PNG o JPEG?
- 16. Automazione parola: rileva se è necessaria l'interruzione di pagina?
- 17. Rileva se MATLAB startup.m è in esecuzione su un worker
- 18. Rileva se è stata ricevuta una chiamata in uscita
- 19. Rileva se la pagina web iframe è reattiva
- 20. Come sapere se la tastiera visualizzata è Split o normale?
- 21. Come ricarico una pagina senza un avviso POSTDATA in Javascript?
- 22. Rileva che la tastiera su schermo è stata visualizzata su Windows Phone 7
- 23. Rileva se un div ha più di una riga
- 24. Controlla se un fstream è un file o una directory
- 25. Creare un semplice Bootstrap Sì/Nessuna conferma o solo un avviso di notifica in Angular
- 26. Rileva una nuova notifica Android
- 27. Directory visualizzata come una cartella grigia su github, ma che non ne rileva il contenuto. Perché?
- 28. Rileva se l'indirizzo IP pubblico è dinamico o statico
- 29. Espresso - Come verificare se viene visualizzata una vista
- 30. Come verificare se un testo è presente su una pagina Web utilizzando il selenio 2?
Cosa intendi per "essere visualizzato" esattamente? Vuoi dire se c'è un riferimento al comando nel codice? –
Con Web Workers potresti ... –
@SimeVidas spiega come? – Raynos