Je veux détecter lorsque l'utilisateur quitte ma page (E.g Ouvrir un nouvel onglet) afin que je puisse arrêter un compte à rebours. Je l'ai fait en utilisant: mais j'ai un iframe à l'intérieur de ma page et que le compte à rebours s'arrête également lorsque l'utilisateur clique dessus, mais je ne veux pas que l'événement ci-dessus soit exécuté lorsque quelqu'un clique sur Sur l'iframe. P> Une idée? P> Mise à jour, j'essaie un peu plus, en fonction de cette réponse CLIQUE-Evénement sur iframe? : P> if ($('iframe').is(':focus')) {
// dont stop countdown
$("iframe").blur()
$(window).focus();
}
3 Réponses :
En raison de l'isolement de l'iframe, en cliquant à l'intérieur, il compte comme flou pour le parent. Si le contenu de l'iframe pourrait être apporté avec Ajax, ce serait une meilleure option. P>
Cela serait compliqué puisque l'utilisateur peut naviguer à l'intérieur iframe. Je ne peux pas supprimer l'événement de flou si l'utilisateur clique-t-il dans l'iframe? J'ai mis à jour ma question, s'il vous plaît, donnez-lui un coup d'oeil.
Voir Stackoverflow.com/Questtions/2381336/...
Une solution serait de vérifier si l'IFrame a la mise au point et ne pas arrêter la minuterie. E.G.
<script>
function setFocus() {
// focus on an element on your page.
$('an-element-on-your-page').focus();
}
$(function () {
$(window).focus(function (e) {
// bind the blur event
setBindingEvent();
});
var setBindingEvent = function () {
// unbind
$(window).unbind('blur');
$(window).blur(function () {
// check focus
if ($('iframe').is(':focus')) {
// unbind the blur event
$(window).unbind('blur');
}
else {
// stop countdown
}
});
};
setBindingEvent();
});
</script>
Ça a marché. Merci! Maintenant, j'essaie de supprimer la mise au point de l'iframe. J'ai mis à jour ma question si vous voulez vérifier, car cela ne fonctionne pas. J'apprécie vraiment votre aide, merci.
Merci pour l'aide à nouveau. Mais le script à l'intérieur de l'iframe ne fonctionne pas, est-ce que ça va de mettre une étiquette de script à l'intérieur iframe comme ça?
J'ai édité votre réponse à votre première car cela fonctionne de manière simple et simple et je n'ai pas pu reproduire votre deuxième :)
J'ai le même problème. Dans mon cas, je n'ai pas accès à la page Iframe et à sa charge par CMS et je ne peux pas changer tous les iframes. Ma minuterie comptant avec seinterval () et à l'intérieur de l'intervalle, je vérifie l'iframe.
p>
const focus = function() {
// timer start
isBlured = 0;
};
const blur = function() {
// timer stop
isBlured = 1;
}
window.addEventListener('focus', focus);
window.addEventListener('blur', blur);
function intervalFunction() {
var activeELM = document.activeElement.tagName;
if (isBlured == 0 || activeELM == "IFRAME"){
// dont stop countdown
var stopIframe = $('iframe').blur();
}
}
Qu'est-ce qui est dans votre iframe?
Le site Web externe DOM.
J'ai résolu un problème très similaire au vôtre, voir ma réponse à Stackoverflow.com/questions/9880193/...