将样式应用于 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 及其内容的加载时间比预期的要长。如果延迟太短,样式将无法应用。如果延迟太长,那么您的用户会看到flash of unstyled content (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 documentation中讨论:
推文限制:将时间线的大小固定为预设数量
推文,使用 data-tweet-limit="5" 属性,其值介于
1 和 20 条推文。时间线将渲染指定数量的
来自时间轴的推文,将小部件的高度扩展到
无需滚动即可显示所有推文。由于小部件是固定的
大小,使用此选项时不会轮询更新。
移除垂直滚动条
我需要查看您的代码才能给出明确的答案。有一个属性可以解决您的问题,在 twitter documentation 的“Chrome”部分下再次讨论:
data-chrome="noscrollbar"
noscrollbar:裁剪并隐藏主时间轴滚动条(如果可见)。
请考虑隐藏标准用户界面组件可以
影响您网站的可访问性。
CSS 样式还可以通过 overflow: hidden 等选项控制滚动条。