将样式应用于 Twitter 提要
我想以user2787001提供的答案为基础。我发现即使使用这种方法(在 iframe 上使用waituntilexists.js),样式也并不总是被应用。等待 iFrame 加载很重要,因为 twitter 会即时加载它。然而,iframe 然后必须加载其内容;包含 Twitter 提要的网页,如果这需要比预期更长的时间,我们将再次尝试将样式应用于不存在的内容。最终,我们要检查样式是否已实际应用到 iframe 内的页面上,只有这样我们才能对工作完成感到满意。
为了应用样式,我引用了一个包含适当样式的独立样式表,使用<link rel="stylesheet"... >
. 为了确保这已经成功应用,我给了它一个 id ( #twitter-widget-styles
),可以检查它以确认样式表已被放置。
我没有使用 waituntilexists.js 插件,而是通过使用window.setInterval
. 不要 window.setTimeout
随意延迟使用。很可能 twitter iframe 及其内容的加载时间比预期的要长。如果延迟太短,样式将无法应用。如果延迟太长,那么您的用户会看到一闪而过的无样式内容 (FOUC)
(注意:#twitter-widget-0
是 twitter 在其 iframe 上使用的 id)
//Add twitter widget styling
var $iframeHead;
var twitterStylesTimer = window.setInterval(function(){
$iframeHead = $("iframe#twitter-widget-0").contents().find('head');
if( !$('#twitter-widget-styles', $iframeHead).length ){ //If our stylesheet does not exist tey to place it
$iframeHead.append('<link rel="stylesheet" href="/stylesheets/twitter-widget.css" id="twitter-widget-styles">');
}else if( $('#twitter-widget-styles', $iframeHead).length ){ //If stylesheet exists then quit timer
clearInterval(twitterStylesTimer);
}
}, 200);
限制检查次数
一个小考虑,如果 iframe 无法加载或样式表永远不会被应用,计时器将无限期地运行。如果这是一个问题,可以添加计数器以在一定次数的尝试后退出该过程:
//Add twitter widget styling
var quitStyleCount = 0;
var $iframeHead;
var twitterStylesTimer = window.setInterval(function(){
$iframeHead = $("iframe#twitter-widget-0").contents().find('head');
if( !$('#twitter-widget-styles', $iframeHead).length ){ //If our stylesheet does not exist tey to place it
$iframeHead.append('<link rel="stylesheet" href="/stylesheets/twitter-widget.css" id="twitter-widget-styles">');
}else if( $('#twitter-widget-styles', $iframeHead).length || ++quitStyleCount > 40){ //If stylesheet exists or we've been trying for too long then quit
clearInterval(twitterStylesTimer);
}
}, 200);
延迟时间(示例中为 200 毫秒)和中断计数器(40 个周期)可以根据需要进行更改。
跨域限制
至于关于将代码插入 iframe 的问题。如果我们查看 twitter 呈现的 iframe,它没有src
可以从另一个域中提取内容的属性:
<iframe frameborder="0" height="200" id="twitter-widget-0" scrolling="no" allowtransparency="true" class="twitter-timeline twitter-timeline-rendered" allowfullscreen="" style="border: medium none; max-width: 100%; min-width: 180px; width: 520px;" title="Twitter Timeline"></iframe>
我尚未对此进行全面调查,但我希望 iframe 内容是从客户端计算机上运行的 twitter 脚本动态生成的。因此与其交互不会违反任何跨域限制。
限制推文数量
要限制推文的数量,请使用data-tweet-limit="x"
嵌入代码中使用的锚标记上的属性
<a class="twitter-timeline" data-tweet-limit="3" href="https://twitter.com/xxxxxxxxxxxx" data-widget-id="xxxxxxxxxxxxx">Tweets by xxxxxxxxxx</a>...
这在twitter 文档中进行了讨论:
推文限制:要将时间线的大小固定为预设的推文数量,请使用 data-tweet-limit="5" 属性和 1 到 20 条推文之间的任何值。时间线将从时间线渲染指定数量的推文,扩展小部件的高度以显示所有推文而无需滚动。由于小部件具有固定大小,因此在使用此选项时它不会轮询更新。
移除垂直滚动条
我需要查看您的代码才能给出明确的答案。有一个属性可以解决您的问题,再次在twitter 文档中讨论,在“Chrome”部分下:
data-chrome="noscrollbar"
noscrollbar:裁剪并隐藏主时间轴滚动条(如果可见)。请考虑隐藏标准用户界面组件可能会影响您网站的可访问性。
CSS 样式还可以通过诸如overflow: hidden
.