2014-03-26 139 views
0

我們放在我們的網站(在標籤內的某處)一段代碼調用外部的CGI文件外部JavaScript停止頁面加載

<script language="JavaScript" type="text/javascript" src="http://www.externaldomain.com/cgi-bin/file.cgi?foo=bar"></script> 

這個腳本記錄了一些數據,然後輸出以下代碼

document.write('<a href="http://www.link.com/" target="_blank"><img src="http://www.externaldomain.com/image/banner.jpg" height=60 width=468 alt="foobar"/></a>'); 

這反過來顯示圖像。

我們遇到的問題是file.cgi在外部服務器上,無法移動到我們的服務器。如果該服務器發生停機,我們會發現它停止了其餘的頁面加載。有沒有辦法解決?

編輯 - 更多信息閱讀評論

的服務器的CGI文件是超時,當我們有這個問題之前就掛了。

我也嘗試添加異步的JavaScript調用,但得到的dubugging控制檯

A call to document.write() from an asynchronously-loaded external script was ignored. 

問候以下警告

+0

如果該圖像是動態編號。如果該請求失敗,您可以提供一個佔位符img fallback。 –

+0

爲什麼它會阻止頁面的其餘部分加載?當然會返回一個404代碼,並且該頁面將繼續加載。 – Curt

+0

這就是我認爲的Curt,但顯然不是,我沒有目睹我遇到的問題我正在通過我被告知的信息 – pjknight

回答

0

當外部服務器宕機,也許他們的主機發送停機通知及不正確的200響應碼。

也許腳本返回這樣的:

<script type="text/javascript"> 
    <html> 
    <head> 
    <title>Downtime!</title> 
    </head> 
    <body> 
    <p>sorry, cheap-ass hosting is experiencing some downtime. Cheerio!</p> 
    </body> 
    </html> 
</script> 

當然,這是一個語法錯誤,並會造成一些瀏覽器炸燬。


眼看外部服務將如何掛起幾分鐘,你應該異步加載腳本是這樣的:

<script async language="JavaScript" type="text/javascript" src="http://www.externaldomain.com/cgi-bin/file.cgi?foo=bar"></script> 

async屬性告訴瀏覽器保持加載下一個腳本,而無需等待此一個先完成。

有關異步的信息,請參見a broswer compatibility chart


要做的最後一件事就是編寫自己的代理服務。在node.js中很容易:http://www.catonmat.net/http-proxy-in-nodejs/

您可以對其進行修改,以便它向external_domain.com發送請求,剝離document.write並將其替換爲有用的內容。

+0

有問題的服務器會在暫停之前掛起 – pjknight

+0

A ha!堅持我正在編輯我的答案。 –

+0

我早些時候嘗試過,但在調試控制檯中得到以下消息: - '從異步加載的外部腳本調用document.write()時被忽略。「# – pjknight