これはベストプラクティスか完全な間違った方法であるかわかりませんが、いくつかの関数を動的に生成してボタンのクリックに使用しようとしています。ボタンも動的に生成されます。生成された関数
私は、ギルドのウェブサイトのためのツイッチストリームスイッチャーを作成しています。サインアップするストリーマーごとに手動でコードを追加するのではなく、ただ一つの関数呼び出しを追加します。それがまたはオフラインでそれらを検出したが、ステータスを表示するために別のPNGを使用している場合
<script id="buttonScripts">
twitchStatus('player1');
twitchStatus('player2');
twitchStatus('player3');
function twitchStatus(twitchName){
$.getJSON('https://api.twitch.tv/kraken/streams/' + twitchName, function(streamData){
if (streamData.stream == null){
$(twitchButtons).append('<button type="button" class="btn btn-fill btn-round" onclick="' + twitchName + 'Function();">' + twitchName + '\'s Stream<img src="images/toffline.png"></button>');
$(buttonScripts).append('function ' + twitchName + 'Function() {var StreamObject = document.getElementById("live_embed_player_flash");if (StreamObject != null) {StreamObject.setAttribute(\'data\', \'http://www.twitch.tv/widgets/live_embed_player.swf?channel=' + twitchName + ');}}');
} else {
$(twitchButtons).append('<button type="button" class="btn btn-fill btn-round" onclick="' + twitchName + 'Function();">' + twitchName + '\'s Stream<img src="images/tonline.png"></button>');
$(buttonScripts).append('function ' + twitchName + 'Function() {var StreamObject = document.getElementById("live_embed_player_flash");if (StreamObject != null) {StreamObject.setAttribute(\'data\', \'http://www.twitch.tv/widgets/live_embed_player.swf?channel=' + twitchName + ');}}');
}
})
};
</script>
スクリプトはボタンや機能を生成します。今、私はこれを持っています。この関数自体は埋め込みオブジェクトを変更してストリームのURLを選択されたストリーミングURLに置き換え、この関数で生成されないときは完全に機能します。
生成された関数はスクリプトの一番下に追加され、同じスクリプトタグのセットに含まれます。ボタンからのonclick呼び出しにアクセスできないようなものがありますか?
いいえいくつかの形式の 'eval'の代わりにクロージャを使うべきです。 – Bergi
コンソールに何のエラーがありますか? – brso05
twitchswitcher.html:1捕らえられていないReferenceError:player1Functionが定義されていません –