2011-11-06 43 views
1

僅當用戶請求時才從Google plus按鈕加載腳本。使用的代碼如下:在完成外部JavaScript時獲取警報

var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; 
    po.src = 'https://apis.google.com/js/plusone.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); 

當我啓動這個腳本時,它會將佔位符更改爲google plus按鈕。佔位符如下所示:

<g:plusone size="tall" annotation="none"></g:plusone> 

還有其他一些按鈕,我只是在需要時才加載。

現在有時按鈕需要一段時間才能加載。有沒有辦法在加載所有按鈕時發出警報。

然後,我可以只顯示一個加載器,直到它完全加載,然後很好地顯示它。

我使用jQuery作爲我的javascript框架。

編輯

對於一個更好的解決辦法看看這個問題:Invoking handler when all scripts finished loading via $.getScript

一種更好的方式去使用jQueries deffered object。我添加了一個小例子,並找出答案。

回答

2

jQuery提供一個機制來定義的腳本加載處理程序:

$.getScript('https://apis.google.com/js/plusone.js', function() { 
    // the script has loaded and executed 
}); 

調用這個處理函數劇本後已經執行,所以它應該滿足您的需求...

+0

啊是的,這是我正在尋找的功能。你知道這是否也適用於多個文件。只有在所有腳本完成加載後才激活該功能。 –

+0

@SaifBechan好問題。我正在尋找一個解決方案... –

+0

@Saif:它可能會返回一個延遲對象,然後您可以使用'$ .when'。 –

1

如果你想在不修改現有內容的情況下添加該功能,請使用以下代碼:

(function(){ 
    var poller = window.setInterval(function(){//Set poller 
     if($('g\\:plusone').length == 0){  // When the document doesn't have 
      clearInterval(poller);    // any g:plusone elements, clear 
               // poller, and execute your code 
      //Run your code.. 
     } 
    }, 200); //Checks at a frequence of 200ms 
})(); 
+0

有趣的做法。我想這也適用於多個元素。我可以爲所有元素添加一個獨特的類,當它們都是filles時,我可以清除輪詢器。我會檢查這一點。 –