2009-05-28 15 views
3

我有一個頁面,執行以下操作:PHP/JavaScript。瀏覽器「負荷」,直到永遠,畢竟資源下載完成後,加上歌劇/鉻問題

  1. 瀏覽器加載一個非常簡單的頁面,有效的頭部和身體,只有腳本/無腳本對作爲內容。

  2. 在正文中,它有一個運行onLoad函數的腳本(腳本a)。這個函數動態地包含第二個腳本(腳本b),並在它可用時運行一個函數。

  3. 第二個腳本是一個可執行各種工作的.js文件。

這兩個腳本都是由PHP解析並使用application/x-javascript內容類型。

現在,我有這一切工作得很好,除了幾個JS打嗝。 JavaScript不是我強大的語言之一,所以我希望這些都是簡單的問題,有人可以指引我朝着正確的方向發展。

問題1:如果我做了一個簡單的提示('你在腳本b');在第二個腳本中,它按預期工作。但是,如果我做了其他任何事情,它都可以正常工作,然後瀏覽器始終指示它永久加載。這是Firefox中的顏色​​補間,或IE中的旋轉東西。

我試過用不同的方式結束腳本,似乎沒有任何幫助。任何想法如何向瀏覽器表明腳本完全加載?這是一個強制通過PHP解析的.js文件。

問題2:第二個腳本似乎根本不包含在Opera或Google Chrome中。在加載問題之外,在FF/IE中正常工作。任何人都可以看到我是否使用不兼容的加載第二個腳本的東西?

謝謝!

更新:

感謝您的答案。我其實有螢火蟲,這就是爲什麼我知道一切正常工作(至少在FF中)。我實際上並不知道該腳本在Opera/Chrome中不起作用,但沒有任何反應。

這是相當多的代碼= o)我會將實際的響應從firebug中複製出來併發布,這樣你就可以準確地看到代碼是什麼。至於關閉連接的網絡服務器,我也在想,但是如果我把腳本b變成alert('whatever'),這似乎很奇怪。它會提醒然後停止加載,但是我做的一切完全相同,但是使腳本document.write('whatever);它會永久加載。

這裏有腳本,更新,直接從螢火淨標籤複製:

注意discoverfire.net是內部域,所以你將無法從那裏加載任何東西...

初始HTML頁面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
    <title>Welcome!</title> 
    <style>body { font-family:arial; }</style> 
    <script language="JavaScript" type="text/javascript" src="http://www.discoverfire.net/analytics/l/a.js"> 
    </script> 
    <script language="JavaScript" type="text/javascript"> 
     document.onload = Start(); 
     function Start(){ 
      TAFKing_version = '1.0'; 
      TAFKing_lkey = '19-8O-KKA8HV'; 
      TAFKing_Lander(); 
     } 
    </script> 
</head> 
<body> 
    <noscript> 
     Oops! We can't forward you properly because your JavaScript is turned off.<br /><br /> 
     <a href='http://www.discoverfire.net/analytics/l/noscript/19-8O-KKA8HV.html'>Please click here to continue.</a> 
     <img src='http://www.discoverfire.net/analytics/l/imp/19-8O-KKA8HV.png' border='0' alt='tell a friend' /> 
    </noscript> 
</body> 
</html> 

**腳本A(...一個。JS):http://www.discoverfire.net/analytics/l/a.js **

function TAFKing_Lander(){ 

    version = TAFKing_version; 
    lkey = TAFKing_lkey; 

    var scrb = document.createElement('script'); 
    scrb.type = 'text/javascript'; 
    scrb.src = 'http://www.discoverfire.net/analytics/l/b.js?lkey='+lkey+'&version='+version+'&cb=4eohe8e65' 
; 

    document.getElementsByTagName('head')[0].appendChild(scrb); 
    Interval = setInterval("Waiter()", 10); 

    return; 

} 

function Waiter(){ 
    if(window.TAFKing_LanderB) { 
     clearInterval(Interval); 
     TAFKing_LanderB(); 
    } 
} 

腳本B(... b.js):http://www.discoverfire.net/analytics/l/b.js?lkey=19-8O-KKA8HV&version=1.0&cb=4eohe8e65

function TAFKing_LanderB(){ 
    document.write("there are just a whole bunch of doc.writes here that build a simple table"); 
} 

回答

2

我敢打賭,這是沒有什麼用的腳本有關,但與網絡服務器。您的描述,特別是它影響到許多瀏覽器,其中一些甚至不運行腳本,導致我相信網絡服務器沒有關閉連接。 Web服務器可能沒有正確處理HTTP/1.1 Keep-alive請求。

在Firefox中嘗試使用Firebug。安裝它,爲你的頁面啓用它,重新加載頁面,並檢查「網絡」選項卡,確保保持連接的開放。

1

這是很多需要經歷的代碼。你一定要得到Firebug來幫助你診斷它。最新版本甚至會在/發生onload事件時顯示。

Firebug還允許您通過編寫console.log('somevar=',var);來輸出消息以測試其值。自從使用全局名稱空間以來,甚至可以在頁面加載後使用控制檯測試值。

關閉我的頭頂,我會確保連接正確關閉在PHP中。另外

document.onload = Start();

會將Start()的結果分配給onload,而不是Start,這是稍後定義的。

此外window.onload更兼容/標準。

您可能希望將js文件的輸出保存爲outputphpA.js和outputphpB.js,直接將這些文件輸出並查看加載行爲是否有所不同。這應該有助於診斷它是否是一個PHP問題。

相關問題