2009-12-16 36 views
1

我使用shadowbox一些html/iframe鏈接,這有效地打開了lightbox中的頁面。一切都很好 - 除非在加載完javascript之前有人點擊。鏈接JavaScript之前加載點擊(問題)

現在,顯而易見的答案是不使用鏈接作爲加載shadowbox的目標。但是,如果JavaScript被禁用,這會造成可用性問題。有沒有人對如何解決問題有任何想法?我正在考慮加載JavaScript內聯,將停用鏈接,直到頁面完成加載,雖然我不完全確定我會如何處理。

歡迎任何想法!

+0

我不知道這個問題是否有很好的廣義解決方案。但是,特別是對於打開iframe的shadowbox,合理的解決方案似乎是將javascript檢測放在內部頁面上,以確定它是否在iframe中打開。 – Matrym 2009-12-28 20:07:19

回答

2

一般來說,我認爲這是一個非問題,但是你不能直接在鏈接之後直接調用shadowbox處理器嗎? ( 「鏈接」)。

即:

。鏈路,。鏈路,.LINK 腳本 $太極拳(); /腳本

+0

+1我同意他做的正確,任何解決方案,以儘量減少延遲將有損可用性。 – 2009-12-16 18:30:05

+0

是的,我當然不建議你把代碼內聯。應該做的是廣泛分析什麼是保持DOM加載速度不夠快。 – Aaron 2009-12-16 18:34:37

+0

我不同意這總是不必要的。加載可能需要一段時間,因爲需要加載很多。看看GMail。您認爲通過刪除加載屏幕可以改善用戶體驗嗎? – Annabelle 2009-12-16 23:00:13

0

你可以定義你的鏈接,

<a id="myLink" href="#" onclick="return false">...</a> 

,並重新分配click事件處理程序,一旦你的JavaScript加載。或者,如果你的鏈接有非JavaScript的替代品:

<a id="myLink" href="/path/to/nonJS/alternative.html">...</a> 

同樣,當你的JavaScript加載後,你可以添加一個click事件處理程序,並覆蓋默認的動作。

如果需要一段時間才能加載所有腳本,則可能需要重新考慮是否需要立即加載所有腳本。如果你這樣做,那麼你可以實現一個載入畫面(下面的例子使用jQuery的,但它並不一定):

<div id="loading"> 
    Loading... 
</div> 
<div id="content" style="display: none;"> 
    // Site content... 
</div> 
// Load your scripts here... 
<script type="text/javascript" src="..."></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
    $('#loading').hide(); 
    $('#content').show(); 
    }); 
</script> 

這樣,直到所有腳本加載您的網站內容是不可見的。

+0

鏈接對JavaScript禁用的用戶來說毫無價值。 – 2009-12-16 18:27:27

+0

我從帖子中認爲JavaScript是該網站所必需的。我添加了一個沒有JS的替代鏈接語法。 – Annabelle 2009-12-16 18:46:36