2017-05-30 2 views
0

J'ai un problème avec la méthode mywindow,print(); car lorsque l'aperçu avant impression est ouvert mes intervalles dans les fichiers JavaScript s'arrête. Mon code est:Aperçu avant impression geler les intervalles dans javaScript

function pri() { 

    var mywindow = window.open('bileta.html', 'hello', 'height=400,width=600'); 
    mywindow.document.write('<html><head><title></title>'); 
    mywindow.document.write('</head><body >'); 
    mywindow.document.write('<h1></h1>'); 
    mywindow.document.write(document.getElementById("hello").innerHTML); 
    mywindow.document.write('</body></html>'); 

    mywindow.document.close(); // necessary for IE >= 10 
    mywindow.focus(); // necessary for IE >= 10*/ 

    mywindow.print(); 
    mywindow.close(); 

    return true; 
} 

J'ai cherché dans Google et stalckoverflow mais toutes les réponses étaient sur la version chromée et j'utilise une version chromée 58.0.3029.110 (64 bits).

Alors qu'est-ce que je demande est que n'importe quel moyen d'imprimer et ma page d'aperçu avant impression ne gèle pas mes intervalles JavaScript?

+0

Avez-vous essayé avec ['requestAnimationFrame'] (https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame)? – R3tep

+0

@ R3tep non je n'ai pas, voulez-vous dire faire mes intervalles avec 'requestAnimationFrame'? –

+0

Aussi, il gèle mes autres fonctions JavaScript aussi –

Répondre

0

Comme mentionné dans mon commentaire ci-dessus, je crois que le thread unique de Javascript est bloqué par l'appel de window.print() que vous faites, donc un intervalle normal que vous définissez s'arrêtera. Un ouvrier Web ouvre un deuxième thread, qui peut toujours le faire fonctionner. Mon script ressemble à ceci:

<!doctype html> 
<html> 
    <head></head> 
    <body> 

     <p>Press to <a href="javascript:pri()">print</a>!</p> 
     <p id="countup">Count</p> 

     <script> 

      window.onload = function() { 
       if (window.Worker) { 
        var myWorker = new Worker('worker.js'); 
        myWorker.onmessage = function(msg) { 
         console.log(msg.data); 
         document.getElementById('countup').innerHTML = msg.data; 
        }; 
       } 
      } 

      function pri() { 
       var mywindow = window.open('bileta.html', 'hello', 'height=400,width=600'); 
       mywindow.document.write('<html><head><title></title>'); 
       mywindow.document.write('</head><body >'); 
       mywindow.document.write('<h1 id="hello">Hello</h1>'); 
       mywindow.document.write('</body></html>'); 

       mywindow.document.close(); // necessary for IE >= 10 
       mywindow.focus(); // necessary for IE >= 10*/ 

       mywindow.print(); 
       mywindow.close(); 

       return true; 
      } 
     </script> 
    </body> 
</html> 

Et le script worker.js ressemble à ceci:

function counter() { 

    var count = 0; 

    self.setInterval(function() { 
     postMessage('counter =' + count); 
     count++; 
    }, 100); 

} 

counter(); 

de l'impression cours implique l'interaction avec le navigateur et OS afin que les résultats peuvent varier. Ce script fonctionne avec Chrome, IE11, bord sous Windows 10, mais pas Firefox (peut-être quelqu'un pourrait poster un commentaire de fixation que.)

Voir ces deux articles pour plus d'informations sur les travailleurs web:

MDN Using Web Workers

Basics of Web Workers

+0

Merci pour la réponse mais qu'en est-il de l'origine de la cible? –

+0

Désolé je ne sais pas ce que vous voulez dire par "origine cible"? – BlinkingCahill

+0

Merci - pouvez-vous me faire une faveur? Si vous aimez la réponse, pouvez-vous l'accepter ou le voter :) – BlinkingCahill