2010-08-22 6 views
2

Je développe un site Web et je dois laisser le titre du document clignoter lorsque le navigateur a perdu le focus pour attirer l'attention de l'utilisateur.Clignotant document.title et IE7 (pas moyen?)

Ceci est une tâche courante par exemple dans un réseau social. Btw mon code javascript fonctionne très bien dans Chrome, Firefox, Opera, mais pas dans IE7 (que je teste avant de libérer le site)

IE7 ont un comportement étrange, car si j'imprime le document.title dans un texte de débogage (vous peut voir dans le code), il est changé mais le navigateur affiche toujours le titre du document précédent

J'essaie de chercher beaucoup sur internet pour essayer de résoudre ce problème mais sans succès donc j'ai décidé de poster la question dans ce site . Voici mon code javascript ci-dessous et merci d'avance pour les suggestions.

la méthode JS est appelée par this.blink (true)

// other methods above and below .... 

this.blink = function(Action) 
{ 
    if (Action) 
    { 
     if (!this.blinking) 
      this.oldTitle=top.document.title; 
     else 
      clearInterval(this.blinkTimer); 

     // debug current title 
     $('debugText').value = 'ORIGINAL ' + top.document.title + '\n' + $('debugHistory').value; 

     this.blinkTimer = setInterval(function() { 

      var msg='MSG', newTitle 

      if (top.document.title == msg) 
       newTitle = '----'; 
      else 
       newTitle = msg; 

      // assign title 
     top.document.title = newTitle; 

      // debug blinking, is really changed but not shown <--- 
      $('debugText').value = 'BLINK ' + top.document.title + '\n' + $('debugHistory').value; 

     }, 1000); 

    } 
    else 
    { 
     clearInterval(this.blinkTimer); 

     if (this.blinking) 
      top.document.title = this.oldTitle; 
    } 

    this.blinking = Action; 
} 
+3

Aargh, des choses qui clignotent! Êtes-vous * sûr * que vous voulez ennuyer vos utilisateurs? – Piskvor

+0

Très probablement, la fonction ne sera pas du tout déclenchée par votre window.blur ou équivalent, c'est pourquoi cela arrive. Essayez d'exécuter le code ci-dessus sans les critères de flou, c'est-à-dire de l'exécuter de force et de voir si la barre de titre de la fenêtre change? –

+0

@Piskvor: Je serais d'accord avec vous si nous savions que ce clignotement était inutile, mais il y a une quantité * limitée * d'applications valides pour le clignotement, comme un message instantané entrant. – MvanGeest

Répondre

0

Au lieu de top.document.title essayer top.document.getElementsbyTagName('title')[0] (Cela suppose haut est une certaine forme de cadre ou fenêtre)

+0

Salut Alex, tout d'abord merci pour votre suggestion et j'ai essayé sur IE7: document.getElementsbyTagName ('title') [0] = newTitle et document.getElementsbyTagName ('title') [0] .text = newTitle dans les deux cas jeter IE une erreur: "Object ne prend pas en charge cette propriété ou méthode" (i utiliser IE Toolbar debug/Companion JS debugg er/DebugBar pour essayer debug IE7) i également essayé d'utiliser prototype.js ($$ est équivalent de GetElementsByTagName) $$ ('title') [0] .text = newTitle Dans ce travail de cas dans tous les navigateurs sauf IE :(aucune erreur ne sort, mais aucun effet comme avant document.title = newTitle –

+0

Ressemble à IE7 ne pas avoir l'accent, ne peut pas changer la barre de titre, peut-être est un problème de sécurité pour éviter phising ou quelque chose? Je vérifierais toutes les options dans IE et mettrais la basse sécurité pour le test mais toujours pas de chance. En vrai je n'aime pas IE 7 mais je dois le supporter car encore beaucoup d'utilisateurs utilisent IE 7. –

+0

Luka, '.text' n'est pas la propriété. Vous voulez changer 'document.getElementsbyTagName ('title') [0] .childNodes [0] .nodeValue', qui est le noeud de texte lui-même. –

0

Essayez ceci dans IE

this.blink = function (Action) 
{ 
    if (Action) 
    { 

     if (!this.blinking) 
      this.oldTitle=top.document.title; 
     else 
      clearInterval(this.blinkTimer); 


     this.blinkTimer = setInterval(function() { 

      var msg='MSG', newTitle 

      if (top.document.title == msg) 
       newTitle = '----'; 
      else 
       newTitle = msg; 

      // assign title 
     top.document.title = newTitle; 


     }, 1000); 

    } 
    else 
    { 
     clearInterval(this.blinkTimer); 

     if (this.blinking) 
      top.document.title = this.oldTitle; 
    } 

    this.blinking = Action; 
} 
    window.blink('now');​​​​ 

Généralement ce sera un problème que window.onblur etc. ne déclenche pas votre fonction de clignotement. Si ce qui précède fonctionne, vous pouvez utiliser le mouvement de la souris pour suivre le délai.

+0

Merci Alec pour votre suggestion, en fait, je préfère surveiller les événements sur la mise au point comme mentionné dans mes commentaires ajoutés ci-dessus, mais je vais essayer aussi votre suggestion :) –

+0

en réel le code ci-dessus que je poste est plus long et l'événement est bien déclenché car dans le débogage textarea je vois le changement et le clignotement, si vous remarquez dans mon code post ci-dessus, la chose étrange est que cette ligne '$ ('debugText'). value = 'BLINK' + top.document.title' vraiment montré le texte clignotant comme prévu et proviennent de la propriété title la barre de titre mais dans IE7 n'est pas affichée et toujours montré le titre normal sans aucun changement. –

1

Si vous utilisez jQuery, j'ai créé un plugin appelé Title Alert dans le but de faire clignoter les messages de notification dans la barre de titre du navigateur. Avec lui, vous pouvez spécifier différentes options comme la durée, l'intervalle de clignotement, si le clignotement devrait s'arrêter quand la fenêtre/onglet est focalisée, etc. J'ai vérifié que le plugin fonctionne dans IE6, IE7, IE8, Firefox, Chrome et Safari.

Voici un exemple sur la façon de l'utiliser:

$.titleAlert("New chat message!", { 
    requireBlur:true, 
    stopOnFocus:true, 
    interval:600 
}); 

Si vous ne l'utilisez jQuery, vous pouvez toujours regarder le source code (il y a quelques bugs bizarres et des cas de pointe que vous besoin de gérer en faisant clignoter le titre si vous voulez soutenir pleinement tous les principaux navigateurs).