2017-06-15 1 views
0

schrieb ich die folgende Funktion Text aus einer Protokolldatei zu erhalten und es als Klartext in einem neuen Browserfenster angezeigt werden:Firefox scheinbar für asynchronen Ajax warten, bevor sie abgeschlossen DOM aktualisiert

function openLog(logFile) { 
    var win = window.open('', '_blank'); 
    var doc = win.document; 
    var title = doc.createElement('TITLE'); 
    var titleText = doc.createTextNode(logFile); 
    title.appendChild(titleText); 
    doc.head.appendChild(title); 
    doc.body.style.cursor='wait'; 

    $.ajax({ 
     type: 'GET', 
     url: '/getLog', 
     data: { logFile : logFile }, 
     success: function(log) {     
      var pre = doc.createElement('PRE'); 
      var preText = doc.createTextNode(log); 
      pre.appendChild(preText); 
      doc.body.appendChild(pre); 
      doc.body.style.cursor='default'; 
     }, 
     error: function() { 
      doc.body.style.cursor='default'; 
     } 
    }); 
}; 

Die ‚wartet‘ Cursor ist nützlich für große Protokolldateien.

In Chrome/IE wird der 'wait'-Cursor sofort angezeigt, während die asynchrone Ajax-Anforderung im Hintergrund ausgeführt wird. In Firefox wird nur der "Standard" -Cursor angezeigt, da er darauf wartet, dass die Ajax-Funktion zuerst beendet wird (und wenn er dies tut, wird er wieder auf "Standard" gesetzt).

Gibt es in Firefox eine Abhilfe dafür? Irgendwelche Vorschläge würden geschätzt werden.

+0

Nein, Firefox verhält sich nicht wie Sie behaupten - vielleicht haben Sie Ihren Cursor über ein Element mit einem Cursor, der den Körper-Cursor-Stil überschreibt –

+0

oh, ich siehe - weil der Körper im ** neuen Fenster ** leer ist, natürlich ist der Cursor nicht das, was du erwartest (überrascht, dass es in anderen Browsern ehrlich ist - wie kannst du deine Maus über ein leeres Element halten ???) ?) –

Antwort

2

Ich bin überrascht, dass es in jedem Browser funktioniert - ein neu geöffnetes Fenster hätte einen Körper mit null Inhalt also null Größe - wie "schweben" Sie über nichts, um den aktuellen Cursor auf den angegebenen zu ändern? Ich denke, Firefox ist der einzige Browser, der sich korrekt verhält !!

Dass gesagt wird - Blindkode

function openLog(logFile) { 
    var win = window.open('', '_blank'); 
    var doc = win.document; 
    var title = doc.createElement('TITLE'); 
    var titleText = doc.createTextNode(logFile); 
    title.appendChild(titleText); 
    doc.head.appendChild(title); 
    // change from here 
    var html = doc.documentElement; 
    html.style.cursor = 'wait'; 
    html.style.minHeight = '100vh'; 
    // changes finished 
    // 
    // dummy setTimeout for testing 
    setTimeout(function() { 
     // remove the cursor from HTML element 
     html.style.cursor = 'default'; 
    }, 4000); 
}; 
openLog('banana'); 

ich es als ein ausführbaren Code-Schnipsel schreiben würde, aber wer will SO, damit Popups für diese nur öffnen: p

I body.parentElement verwenden (dh das HTML-Element) - weil dies für body endet mit einer vertikalen Bildlaufleiste

+0

Guter Punkt. Wird Update –

+0

Interessanterweise, mit dem neuen Code jetzt bin ich (gelegentlich) etwas seltsam in Chrom sehen. Manchmal ändert sich der Cursor nicht in 'warten', es sei denn, ich bewege die Maus. Sollte leicht genug sein, um diese "Bewegung" auszulösen, wenn es nötig ist, aber ich fand es seltsam. –

+0

Und tatsächlich gibt es in der Chrome-Version von OP etwas Seltsames. Ich kann nicht von meinem Chrom auf osX reproduzieren. – Kaiido

Verwandte Themen