Twitter文本js,不计算包含带有#的url的文本的长度!
Posted
技术标签:
【中文标题】Twitter文本js,不计算包含带有#的url的文本的长度!【英文标题】:Twitter text js , not calculating the length from text which contains urls with #! 【发布时间】:2016-03-17 09:56:43 【问题描述】:我正在使用 Twitter 文本 js 来计算包含 #! 的 url 的文本长度。 例如:
"Some text http://domain.com#!/path/p/56319216 #tag1 #tag2".
在 twitter 文本 js 中的这一行上生成 firefox 调试器错误
twttr.txt.regexen.extractUrl.exec(text);
没有记录具体错误,而是我的页面冻结并提醒我停止脚本,请帮助。
【问题讨论】:
如果你想计算text
的长度,那么为什么不简单地text.length
呢?
@Moin Twitter 将推文中的所有 url 包装为 t.co 短 url。所以我需要在发送到 Twitter 之前计算推文的长度。
你在使用github.com/twitter/twitter-text/tree/master/js/pkg这里的最新版本吗?
【参考方案1】:
2012 年 5 月 31 日在 github 存储库中合并的拉取请求引入了 twttr.txt.getTweetLength(text, options) 函数,该函数考虑了 t.co URL 并定义如下:
twttr.txt.getTweetLength = function(text, options)
if (!options)
options =
short_url_length: 22,
short_url_length_https: 23
;
var textLength = text.length;
var urlsWithIndices = twttr.txt.extractUrlsWithIndices(text);
for (var i = 0; i < urlsWithIndices.length; i++)
// Subtract the length of the original URL
textLength += urlsWithIndices[i].indices[0] -urlsWithIndices[i].indices[1];
// Add 21 characters for URL starting with https://
// Otherwise add 20 characters
if (urlsWithIndices[i].url.toLowerCase().match(/^https:\/\//))
textLength += options.short_url_length_https;
else
textLength += options.short_url_length;
return textLength;
;
所以你的函数将变成:
function charactersleft(tweet)
return 140 - twttr.txt.getTweetLength(tweet);
另外,关于 t.co 的最佳实践,我们应该从 twitter 检索 short_url_length 和 short_url_length_https 值,并将它们作为选项参数传递给 twttr.txt.getTweetLength 函数:
每天在您的应用程序中请求 GET 帮助/配置一次,并将“short_url_length”(t.co 当前的最大长度值)缓存 24 小时。缓存“short_url_length_https”(基于 HTTPS 的 t.co 链接的最大长度)并将其用作基于 HTTPS 的 URL 的长度。 特别是知道 t.co url 长度的一些更改将在 2013 年 2 月 20 日生效,如 twitter 开发者博客中所述
【讨论】:
以上是关于Twitter文本js,不计算包含带有#的url的文本的长度!的主要内容,如果未能解决你的问题,请参考以下文章
带有 twitter bootstrap 的 javascript 数据表
带有英雄单元文本的 Twitter Bootstrap 进度条未正确显示