8
votes

Comment prévenir "Arrêtez d'exécuter ce script" dans les navigateurs?

J'ai une page ASP.NET MVC qui a JQuery modifiable DataTable contenant 14 colonnes. J'ai un bouton (n'appliquer aucune constatation) pour faire des calculs latéraux du client SND s'appliquent à toutes les lignes de cette table.

Lorsque nous cliquons sur ce bouton, après avoir appliqué des calculs pour toutes les 4 lignes, il affiche ce "STOP exécutant le script". Un message. P>

J'ai vérifié les paramètres. Dans les options Internet, l'onglet Avancé, "Désactiver le débogage de script (Internet Explorer)" est cochée. Et "Afficher une notification sur l'erreur de script" n'est pas cochonnée. P>

J'utilise Internet Explorer 8. Je ne se produit pas sur IE9. Mais ceci étant le serveur, nous ne pouvons pas passer à IE9. P>

J'ai fait la recherche et j'ai essayé ces deux options et rien n'a fonctionné. P>

Exemple (1): Fort > http://www.codeproject.com/tips/406739/preventing- Arrêt-exécuter-this-script-in-navigateurs p>

exemple (2): strong> http://www.picnet.com.au/blogs/guido/post/2010/03/04/how-to-prevent-stop-Running-Chis-script-Message-in-Browsers/

Quelqu'un avait cette ISSE et toutes les suggestions sont fortement appréciées. P>

Ceci est le code réel qui lance le message de script: strong> P>

  RepeatingOperation = function(op, yieldEveryIteration) 
  {  
  var count = 0;  
  var instance = this;  
  this.step = function(args) 
  {    
  if (++count >= yieldEveryIteration) 
  {      
  count = 0;      
  setTimeout(function() { op(args); }, 1, [])      
  return;      
  }    
  op(args);  
  };
  };

  function ApplyNoFindings()
  {

    var i = 0;
    var ro = new RepeatingOperation(function() 
     {  

     var row = oTableAuditLines.fnGetData(i); 
            oTableAuditLines.fnUpdate("NF",i,1); 
            UndoHCPCS(row,i);
            UndoHCPCSModCodes(row,i);
            UndoLineUnitCount(row,i);
            oTableAuditLines.fnUpdate("", i, 6); //Reset Denial Reason Code
            UndoNonCoveredCharges(row,i);
            CalculateAmountPaidAtLine(row,i);
            CalculateEstimatedRecoveryAmountAtLine(row,i);

     if (++i < iTotalRecords) 
     { 
        ro.step(); 
     }  
     else 
     { 
        UpdateSummaryLine();
        UpdateSummaryLineReasonCode();
     }  
     }, 100);
     ro.step();


4 commentaires

Vous ne devriez pas regarder ne pas afficher le message d'avertissement de code lent, vous devez envisager d'optimiser votre code.


"Qu'est-ce que je fais mal ici?" ... Vous utilisez asp.net, duh!? Non mais sérieusement, Rory est correct. Votre code de table de données fait déjà beaucoup. L'un des principaux pouvoirs de ASP MVC est la possibilité de laisser le serveur, via C # ou même de la XAML, de gérer des "calculs" et d'écrire HTML à présenter dans la vue. Avez-vous déjà fait la procédure à suivre à la radio? Cela vous donne une bonne idée de la manière de gérer plus de ce côté serveur et de ne rien envoyer que HTML droit à votre "table", créant ainsi moins de la clientèle et causant moins de chances pour les erreurs côté client.


J'ai ajouté une balise JavaScript et j'ai mis à jour le titre pour être plus pertinent. J'espère que tu vas bien avec ça.


Voir aussi Désactivation du message de script à long terme Internet Explorer


3 Réponses :


11
votes

Le problème est que JavaScript est un seul fileté, donc s'il existe une fonction que prend trop de temps pour terminer em> strong>, cette fonction pourrait causer l'interface utilisateur ne répondant pas. Par conséquent, le navigateur mettra en garde l'utilisateur sur le script d'exécution à long terme en affichant le message: "Arrêtez d'exécuter ce script" strong>. Les solutions à ce problème sont les suivantes:

  • Optimisez votre code pour que la fonction ne prend pas si longtemps. Li>
  • Utilisez Settimeout code> pour casser l'exécution de la fonction en plusieurs pièces suffisamment courtes. LI> ul>

    exemple de code de code: p> xxx pré>

    La solution que vous prenez dans votre exemple (2) est correcte, mais il y a un problème dans votre code. C'est le Settimeout ne fonctionne pas em> fort>. Essayez de changer votre code comme celui-ci: p>

    if (++i < iTotalRecords) 
         { 
            ro.step(); 
         }  
         else 
         { 
            UpdateSummaryLine();
            UpdateSummaryLineReasonCode();
         }  
    


0 commentaires

0
votes

Vous pouvez également envisager HTML 5 travailleurs

Un travailleur Web est une course JavaScript en arrière-plan, sans affecter les performances de la page. Lors de l'exécution de scripts dans une page HTML, la page ne répond pas jusqu'à la fin du script. Un travailleur Web est un JavaScript qui fonctionne à l'arrière-plan, indépendamment des autres scripts, sans affecter les performances de la page. P>

Créer un nouveau travailleur est simple. Tout ce que vous avez à faire est d'appeler le constructeur ouvrier (), en spécifiant l'URI d'un script à exécuter dans le thread du travailleur, définissez le travailleur du travailleur.Almessage Propriété à une fonction de gestionnaire d'événements appropriée. P>

var myWorker = new Worker("my_task.js");

myWorker.addEventListener("message", function (oEvent) {
  console.log("Called back by the worker!\n");
}, false);

myWorker.postMessage(""); // start the worker.


1 commentaires

Les travailleurs Web méritent de faire de la publicité - mais malheureusement, ils ne vous aideront pas avec cet avertissement particulier qui se produit principalement dans IE8, comme dans cette question: IE8 ne prend pas en charge les travailleurs du Web.



4
votes

Malgré une autre réponse déjà acceptée, je veux placer ici des informations générales pour les développeurs qui auront ce problème dans la fonctionnalité:

Par ce lien Vous pouvez trouver des informations sur la procédure à suivre pour résoudre ce problème d'utilisateur http://support.microsoft. COM / KB / 175500 - L'utilisateur peut ajouter une clé de registre.

Aussi vous pouvez trouver des informations sur lorsque ce message "Exécuter Slow" apparaît:

Par défaut, la clé n'existe pas. Si la clé n'a pas été ajoutée, la limite de seuil par défaut de la boîte de dialogue Time-Out est 5 000 000 déclarations pour les versions Internet Explorer 4 et ultérieures.

Comme vous voyez la lenteur mesurée dans des déclarations JavaScript, pas à temps.


1 commentaires

Voir aussi la meilleure réponse à désactivation du message de script à long terme dans Internet Explorer qui a une méthode d'exemple Nifty pour éviter de trébucher le commutateur «5 000 000 états».