你描述,那麼你可能需要學習一點AJAX。
實際上,您目前正在嵌入一個提供類似系統(Facebook,Twitter,Google,...)的其他一方的腳本。這會加載頁面加載並使用各種按鈕來填充某些元素。現在,您需要延遲嵌入式腳本的執行,直到發生某些事件(用戶單擊共享按鈕)。
有一個詳細的博客文章,其中包含Facebook按鈕的示例代碼,但對於所有網站來說,這個過程基本相同。請參閱http://www.torbenleuschner.de/blog/119/ladezeit-facebook-like-button-per-jquery-nachladen/(德語)
關鍵是要有一個空的元素來保存只在事件後點擊的按鈕(點擊您的案例)。例如:
<div class="popup-share"></div>
然後,您需要以當前使用的相同方式等待事件。但不是在加載的頁面上有按鈕創建腳本,我們會假定它們包含在buttons-fragment.html中。
// Delay function's execution until click and call it exactly once
$('.share').one('click', function loadLikeButtons(e) {
// Get the empty element
var likeButtonContainer = $('.popup-share');
// Fetch the code which contains the buttons (this is AJAX in the background)
$.get('your-server.com/buttons-fragment.html', {}, function fillInLikeButtons(data){
// The code in this inner function runs as soon as the code for the buttons is available/was successfully loaded.
// The argument data contains the same HTML fragment that you are currently using to create the buttons
// Place the buttons (or button initialization scripts within the still empty button holder
likeButtonContainer.html(data);
});
});
注意對於性能更好的解決方案,省略了AJAX請求來獲取HTML片段。而是將其轉換爲頁面加載,但保留在JavaScript變量中。點擊共享按鈕,將其注入空的按鈕保持元素。我沒有把這個解決方案,因爲我認爲只有一個解決方案在你的問題的答案更容易理解。您可能想要打開關於如何通過頁面加載傳輸HTML片段的另一個問題,並在某個事件中注入它。
另外請注意,我從未真正測試過上面輸入的代碼。你可能會碰到錯別字。
作爲一個附註(不是答案的一部分):在將按鈕放到您的網站以及與性能相關的東西時,請注意與隱私相關的問題。讓我們假設創建類似於下面的代碼的按鈕:
<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
<fb:like layout="box_count" show_faces="false" width="55" font="arial"></fb:like>
只要瀏覽器遇到的片段,它會從Facebook加載腳本。在這樣做的同時,您的頁面地址也會被傳送,並可能從Facebook設置Cookie。因此,如果有人仍然登錄Facebook,只要您的網站加載完畢,Facebook就能夠跟蹤他/她訪問您的網站。通過上面的回答,只會在點擊共享按鈕時發生(因爲這會導致加載外部腳本)。
熟悉AJAX? – sniper
你的這個代碼是什麼? – AlexC
我害怕Javascript並不是我的特長,所以AJAX對我來說是一個完全陌生的話題。D:我已將共享代碼添加到主帖子中。它有點混亂,但它完美的作品。 – Johnny