我创建了一个jquery插件,在左边放置一个侧边栏用于社交媒体内容。我有下面的变量,这是内容的来源。我正在尝试使用小部件提取Twitter提要,但我不断收到错误“TWTR未定义”。任何想法如何解决这个问题?
此页面正在调用我创建的插件http://social.allthingswebdesign.com
var content = (
'<div class="contentArea visible" id="fb">FB Content Area</div>'+
'<div class="contentArea" id="twit"><script src="http://widgets.twimg.com/j/2/widget.js"></script><script>new TWTR.Widget({version: 2,type: \'profile\',rpp: 4,interval: 6000,width: 250,height: 280,theme: {shell: {background: \'#333333\',color: \'#ffffff\'},tweets: {background: \'#ffffff\',color: \'#444444\',links: \'#e02046\'}},features: {scrollbar: false,loop: false,live: false,hashtags: true,timestamp: true,avatars: false,behavior: \'all\'}}).render().setUser(\'CSuitesIndepend\').start();</script></div>'+
'<div class="contentArea" id="youtube">Youtube Video</div>'+
'<div class="contentArea" id="yelp">Yelp reviews</div>'+
'<div class="contentArea" id="ta">Trip Advisor Advice</div>'+
'<div class="contentArea" id="li">The Linked In Page</div>'
);
此外 - 如果我从插件中删除此行<script src="http://widgets.twimg.com/j/2/widget.js"></script>
,并将其放在我的网页的头部,我所看到的就是推特Feed。
编辑:好的,现在我在想,为什么我不能将twitter小部件代码 - <script>
new TWTR.Widget({
version: 2,
type: 'profile',
rpp: 4,
interval: 6000,
width: 250,
height: 280,
theme: {
shell: {
background: '#333333',
color: '#ffffff'
},
tweets: {
background: '#ffffff',
color: '#444444',
links: '#e02046'
}
},
features: {
scrollbar: false,
loop: false,
live: false,
hashtags: true,
timestamp: true,
avatars: false,
behavior: 'all'
}
}).render().setUser('CSuitesIndepend').start();
</script>
- 附加到通过插件动态插入的元素?
当我尝试使用此代码时,它不会在#tweetFeed -
中插入任何内容$(document).ready(function() {
// add the sidebar plugin
$('html').social(function() {
//console.log('#tweetFeed = '+ $('#tweetFeed').parent().html());
$('#tweetFeed').insertAfter("<p>TEST</p>");
});
//console.log('#tweetFeed = '+ $('#tweetFeed').parent().html());
$('#tweetFeed').insertAfter("<p>TEST</p>");
});
答案 0 :(得分:5)
有一个未记录的功能,允许您定位要加载窗口小部件的元素的ID。 我能够使用$ .getScript以及twitter提供的普通小部件代码来加载它来代替选择。
这是我使用的脚本,我希望这有帮助...
$(document).ready(function(){ $.getScript('http://widgets.twimg.com/j/2/widget.js', function () { new TWTR.Widget({ version: 2, type: 'profile', id : 'twitterBox', rpp: 4, interval: 30000, width: 'auto', height: 'auto', theme: { shell: { background: 'transparent', //this is important color: '#333' }, tweets: { background: 'transparent', //this is important color: '#666', links: '#d14836' } }, features: { scrollbar: false, loop: false, live: false, behavior: 'all' } }).render().setUser('username').start(); }); });
答案 1 :(得分:1)
当您在该脚本中放置对象的引用的同时,您将在您添加的标记中放置对twitter js文件的引用。下载twitter js文件需要一秒左右的时间,但浏览器继续进行并解析你的内联脚本。
所以要做的第一件事就是从你的标记变量中删除对twitter脚本的引用,使用$ .getScript()获取它,并使用$ getScript中的回调添加标记,这样它只运行你的内联一次来自twitter的js已经到达了浏览器。等等。
var content = (
'<div class="contentArea visible" id="fb">FB Content Area</div>'+
'<div class="contentArea" id="twit"><script>new TWTR.Widget({version: 2,type: \'profile\',rpp: 4,interval: 6000,width: 250,height: 280,theme: {shell: {background: \'#333333\',color: \'#ffffff\'},tweets: {background: \'#ffffff\',color: \'#444444\',links: \'#e02046\'}},features: {scrollbar: false,loop: false,live: false,hashtags: true,timestamp: true,avatars: false,behavior: \'all\'}}).render().setUser(\'CSuitesIndepend\').start();</script></div>'+
'<div class="contentArea" id="youtube">Youtube Video</div>'+
'<div class="contentArea" id="yelp">Yelp reviews</div>'+
'<div class="contentArea" id="ta">Trip Advisor Advice</div>'+
'<div class="contentArea" id="li">The Linked In Page</div>'
);
$.getScript("http://widgets.twimg.com/j/2/widget.js",function(){
// dynamically add the get social sidebar
$('body').prepend('<div id="social"><div id="outer"><span><img src="getSocial.png" alt="Get Social" />' +
'<ul id="icons"><li><img class="tiny" src="fb.png" alt="Facebook" /></li>'+
'<li><img class="tiny" src="twit.png" alt="Twitter" /></li></ul></span>'+
'</div><div id="inner"><div id="innest"><div id="message">Get Social With Comfort Suites!</div>'+
'<div id="close"><a id="closeB" href="#">X</a></div><ul class="idTabs">'+
imgs +'</ul>'+content +'</div></div></div>');
});
但是我谦虚地建议将内联脚本从你附加到DOM的字符串中移出,并将其直接放入回调中,这样可以让你更整齐地将变量传递给它,假设下行了你想发送你的插件选项。最后一个选项会给你
var content = (
'<div class="contentArea visible" id="fb">FB Content Area</div>'+
'<div class="contentArea" id="twit"></div>'+
'<div class="contentArea" id="youtube">Youtube Video</div>'+
'<div class="contentArea" id="yelp">Yelp reviews</div>'+
'<div class="contentArea" id="ta">Trip Advisor Advice</div>'+
'<div class="contentArea" id="li">The Linked In Page</div>'
);
$.getScript("http://widgets.twimg.com/j/2/widget.js",function(){
// dynamically add the get social sidebar
$('body').prepend('<div id="social"><div id="outer"><span><img src="getSocial.png" alt="Get Social" />' +
'<ul id="icons"><li><img class="tiny" src="fb.png" alt="Facebook" /></li>'+
'<li><img class="tiny" src="twit.png" alt="Twitter" /></li></ul></span>'+
'</div><div id="inner"><div id="innest"><div id="message">Get Social With Comfort Suites!</div>'+
'<div id="close"><a id="closeB" href="#">X</a></div><ul class="idTabs">'+
imgs +'</ul>'+content +'</div></div></div>');
new TWTR.Widget({
version: 2,
type: 'profile',
rpp: 4,
interval: 6000,
width: 250,
height: 280,
theme: {
shell: {
background: '#333333',
color: '#ffffff'
},
tweets: {
background: '#ffffff',
color: '#444444',
links: '#e02046'
}
},
features: {
scrollbar: false,
loop: false,
live: false,
hashtags: true,
timestamp: true,
avatars: false,
behavior: 'all'
}
})
.render()
.setUser('CSuitesIndepend')
.start();
});
除了你的引号之外,还有额外的好处,jsHint(或其他)也将评估该脚本。
最后,考虑使用jQuery创建标记的this方法。它使更改更容易在版本控制差异中发现。只是个人偏好。
希望这有帮助。
<强>更新强>
看起来在创建窗口小部件时(新的TWTR.Widget),它调用.init()并记住它嵌入页面的位置,然后在那里插入它想要的HTML代码。因为我们在头部的脚本中调用它,它将它放在文档的根目录中,覆盖其他所有内容。
尝试在函数中封装“new TWITR.Widget”调用,然后从标记中的内联脚本调用该函数,以便显示小部件。这样,变量仍然在标记之外,并且内联脚本中的所有内容都是对头部脚本中函数的引用。
所以你现在有一个类似
的功能 var makeTwitterWidget = function () {
new TWTR.Widget({
version: 2,
type: 'profile',
rpp: 4,
interval: 6000,
width: 250,
height: 280,
theme: {
shell: {
background: '#333333',
color: '#ffffff'
},
tweets: {
background: '#ffffff',
color: '#444444',
links: '#e02046'
}
},
features: {
scrollbar: false,
loop: false,
live: false,
hashtags: true,
timestamp: true,
avatars: false,
behavior: 'all'
}
})
.render()
.setUser('CSuitesIndepend')
.start();
});
}
,内容变量如下:
var content = (
'<div class="contentArea visible" id="fb">FB Content Area</div>'+
'<div class="contentArea" id="twit"><script>makeTwitterWidget();</script></div>'+
'<div class="contentArea" id="youtube">Youtube Video</div>'+
'<div class="contentArea" id="yelp">Yelp reviews</div>'+
'<div class="contentArea" id="ta">Trip Advisor Advice</div>'+
'<div class="contentArea" id="li">The Linked In Page</div>'
);
答案 2 :(得分:0)
答案 3 :(得分:0)
如果有人还在努力解决这个问题,Twitter可能会为您解决问题, http://blog.twitter.com/2012/09/more-tweets-across-web.html