2011-12-18 3 views
3

私は新しいページに特定の投稿を表示するときにfbのようなgoogle +1、tweet-buttonなどを追加したいと思います。私は、例えばaddthisがデフォルトでこれを提供していることを知っています。しかし、欠点は、あなたが多少の大きなJavaScriptファイルを取得して、時にはいくつかのエラーをスローすることです。だから私の質問です:あなたは通常、どのようなオプションと同様のシナリオで行くのですか?ありがとうAdd/ShareこのVSは「手動で」各ボタンを追加します

答えて

4

私はソーシャルボタンを含めるのが私の好みの方法ではありません。実際に気づいたように、いくつかのエラーがスローされ、追加のライブラリが失敗した場合(例えばJavaScriptエラー、サーバのタイムアウト...)すべてボタンはユニークなライブラリに依存しているため失敗する可能性があります。さらに、パフォーマンスの単純な問題のために、addthisは他のスクリプト(gzipされた33kb)を読み込んで回避することができるスクリプトであり、ソーシャルボタンを完全に管理することができます。

私は負荷非同期ですべての必要なライブラリを好むと loadscriptがあるこの

$(document).ready(function() { 

    if (('.socialshare').length) { 

     /* twitter button */  
     $('<a href="https://twitter.com/share" class="twitter-share-button">Tweet</a>').appendTo($('.socialshare')); 
     loadscript('//platform.twitter.com/widgets.js', 'twitter') 

     /* Google +1 button */  
     $('<div class="g-plusone" data-size="medium" data-annotation="bubble" data-expandTo="top"></div>').appendTo($('.socialshare')); 
     loadscript('https://apis.google.com/js/plusone.js', 'google-plusone'); 
    } 

}) 

は(パフォーマンスのために、.socialshareへの参照をキャッシュ)のように、私は本当に、それらを必要とする場合にのみ必要なマークアップを注入します私はscript要素を注入し、私のテンプレートは、ソーシャルボタン(.socialshare要素)を持つ要素が含まれている場合は、この基本的

function loadscript(url, id) { 
    var js, fjs = document.getElementsByTagName('script')[0]; 
    if (document.getElementById(id)) { return; } 
    js = document.createElement('script'); 
    js.id = id; 
    js.charset = "utf-8"; 
    js.src = url; 
    fjs.parentNode.insertBefore(js, fjs); 
}; 

のような単純なスクリプトローダ機能n id(他のスクリプトが2回も挿入できないようにするため)

+0

良いソリューション、ありがとうございました。共有してくれてありがとうございます。これは私の例であるimよりも優れているので、これを受け入れてください。 – Johan

+0

Btw、あなたは一般的に使われているライブラリの多くにURLを持っていますか? – Johan

関連する問題