2010-08-15 8 views
3

Sur mon téléphone Android (2.1), je vois un comportement étrange avec setTimeout lorsque vous maintenez un doigt appuyé sur l'écran tactile pendant un moment.setTimeout pas appelé dans android webkit

Ce code très simple, en fait, fonctionne très bien (1 appel par seconde), jusqu'à ce que je défiler pendant un certain temps la fenêtre (2-3 secondes suffisent), quand il cesse d'être appelé

$(document).ready(function(){ 
    spam(); 
}); 

function spam(){ 
    console.log("cia") 
    setTimeout(spam, 1000); 
} 
+3

Observation intéressante. Quelle est précisément la question si? Cherchez-vous une explication? Une solution de contournement? –

Répondre

3

I a le même problème.

La solution consistait à définir la fonction appelée en tant que variable, plutôt que de passer ist en paramètre à setTimeout.

Essayez ceci:

var spam = function(){ 
    console.log("cia") 
    setTimeout(spam, 1000); 
} 

$(document).ready(function(){ 
    spam(); 
}); 
+0

Le réglage à l'intérieur d'une variable fait travailler pour moi, merci! –

0

Pour moi Varriotts réponse ne fonctionne pas ... la seule façon que je pouvais faire fonctionner setTimeout sur le téléphone Android i utilisé pour les tests (en cours d'exécution 2.Quelque chose v) est par la notation suivante:

function foo() {} 
window.setTimeout(foo, 200); 

Cela semble étrange, en passant simplement le nom d'une fonction, mais après les heures d'essayer autour, il était la seule façon cela a fonctionné.

1

J'ai déjà eu ce problème sur mon appareil lors d'un développement, mais aucune de ces solutions n'a fonctionné pour moi. De la lecture que j'ai faite, il est raisonnablement bien documenté que cela se produit mais semble ne pas être une manière cohérente de le résoudre. Ce qui a fonctionné pour moi, c'était de fermer la fenêtre, de faire disparaître mon site de test, de vider le cache, de quitter le navigateur puis d'ouvrir le gestionnaire de tâches et d'arrêter le processus. Lorsque j'ai ouvert à nouveau mon navigateur et que je suis allé sur mon site de test, le code standard que j'avais initialement commencé à fonctionner à nouveau. Ma seule supposition est que le navigateur lui-même se trouve dans un état étrange où il n'exécute pas de fonctions de navigateur intégrées standard (ni setTimeout() ni setInterval() ne fonctionnaient pour moi mais les deux fonctions javascript existaient).

Je testais avec un Samsung Galaxy S fonctionnant sous Android 2.1, je ne sais pas si cela va aider quelqu'un d'autre mais c'est ce qui a fonctionné pour moi.

+0

Cela m'a vraiment aidé :) – krzychukula

1

essayer cette

function spam(){ 
     console.log("cia") 
     setTimeout("spam()", 1000); 
    } 

setTimeout:

/** 
    @param {String|Function} vCode 
    @param {Number} iMillis 
    @return Number 
    */ 
    window.setTimeout = function(vCode,iMillis) {}; 
0

J'ai essayé et il a résolu mon problème.

setTimout(function(){aFunction(text);}, 200); 
Questions connexes