2017-06-15 24 views
0

之前完成我寫了下面的函數從日誌文件中獲取文本並顯示在一個新的瀏覽器窗口的純文本:火狐似乎在等待AJAX​​的異步更新DOM

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'; 
     } 
    }); 
}; 

的「等待」光標對於大型日誌文件很有用。

在鉻/ IE中,「等待」,而異步AJAX請求是在後臺工作立即顯示光標。在Firefox中,因爲它似乎在等待AJAX​​功能來完成第一(一旦它被設定右後衛「默認」)僅顯示「默認」光標。

是否有在Firefox中解決類似的問題?任何建議,將不勝感激。

+0

不,firefox不像您聲稱的那樣行事 - 也許您將光標放在一個光標覆蓋了身體光標樣式的光標上 –

+0

哦,一世看 - 因爲身在**新窗口是空的**,當然光標不是您所期望(驚訝它是在其他瀏覽器是誠實的 - 你怎麼能有你的鼠標放在一個空元素??? ? ) –

回答

2

我很驚訝,它可以在任何瀏覽器 - 一個新打開的窗口將有一個身體不帶內容因此大小爲零 - 你怎麼「懸停」在沒有得到當前光標更改爲指定一個?我認爲Firefox是唯一正常運行的瀏覽器!

話雖這麼說 - 僞代碼

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'); 

我會發布它作爲一個可執行的代碼段,但誰願意讓SO剛剛打開彈出式窗口此:P

我用body.parentElement(即HTML元素) - 因爲這樣做body結束了一個垂直滾動條

+0

好點。將更新 –

+0

有趣的是,用新的代碼,現在我(偶爾)看到的東西鉻奇怪。有時光標不會改變爲「等待」,除非我移動鼠標。如果需要,應該很容易觸發這個「運動」,但我認爲這很奇怪。 –

+0

實際上在OP的Chrome版本中有些奇怪的東西。我無法從osX上的chrome中複製。 – Kaiido