2012-04-17 11 views
1

jQuery経由でTwitter共有ボタンを読み込むdivがあります。スクリプトがページの読み込み時に実行されるときの動作。しかし、その後、手動でスクリプトをロードするようには見えません。JavascriptでTwitter共有ボタンを読み込めません

オリジナルボタン:

<a href="https://twitter.com/share" class="twitter-share-button" data-via="givestreamuk">Tweet</a> 
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> 

私はちょうどリンクを持って、私はjQueryを経由して、全体のボタン(リンクプラススクリプト)をロードしようとしたが、それはうまくいきませんでした。代わりに、私はこのようなDOMにスクリプトを挿入しようとしました:ここ

は私のJSです:

var twitter = '<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://customer-url" data-via="givestreamuk" data-hashtags="socialgiving">Tweet</a>'; 
jQuery('#twitter_share').html(twitter); 

var jstext = '!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");'; 

var script = document.createElement("script"); 
script.type = "text/javascript"; 
script.text = jstext; 
jQuery('#twitter_share').append(script); 

マイDIVボタンが中に置かれます:ときにスクリプトこの作品

<div id="twitter_share"></div> 

ページロード時に実行されますが、手動で実行されると、そのリンクのみがdivに表示されます。

私はこのボタンを手動でDIVにロードしてスクリプトを実行させ、ボタンが生成されるようにどのように提案できますか?

+0

を私はこれをしたい理由を誰もが求めていた場合に。ロードするたびに '' '' data-url = "http:// customer-url" '' 'を変更する必要があります... – iamjonesy

+0

JSFiddleでこのコードを実行しました。それは私のために働く:http://jsfiddle.net/qtkdH/ –

+0

@JonnyBurgerええ、あなたは正しい。うーん。どこかに何かが干渉している必要があります – iamjonesy

答えて

2

プロジェクトでTurbolinks、PJAX、または他の同様の宝石を使用していますか?もしそうなら、このスレッドを参照してください。

https://github.com/rails/turbolinks/issues/25 

そして、これらのソリューション:あなたはdinamicallyコンテンツを挿入する場合のみ最初のウィジェットが正しくロードされますよう

http://www.blackfishweb.com/blog/asynchronously-loading-twitter-google-facebook-and-linkedin-buttons-and-widgets-ajax-bonus 

http://reed.github.com/turbolinks-compatibility/facebook.html 
0

Twitterのスクリプトは、変更する必要があります。

新しいTwitterボタンの場合、twitter-wjsのスクリプトタグが既に存在し、if(!d.getElementById(id))falseを返します。

ただ、新しい要素を検出するためにTwitterウィジェットオブジェクトを強制するために、そのifelseステートメントを追加します。

<script> 
!function(d,s,id) 
{ 
    var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https'; 

    if(!d.getElementById(id)) 
    { 
     js=d.createElement(s); 
     js.id=id; 
     js.src=p+'://platform.twitter.com/widgets.js'; 
     js.parentNode.insertBefore(js,fjs); 
    } 
    else 
    { 
     twttr.widgets.load(); 
    } 
}(document, 'script', 'twitter-wjs'); 
</script> 

出典:https://dev.twitter.com/web/javascript/initialization

関連する問題