2015-12-11 13 views
11

Ich benutze Twitter Text js, um Länge des Textes mit URLs zu berechnen, die # enthalten !. zB:Twitter Text js, berechnet nicht die Länge von Text, der URLs mit # enthält!

"Some text http://domain.com#!/path/p/56319216 #tag1 #tag2". 

In firefox Debugger Fehler auf dieser Linie erzeugt in twitter Text js

twttr.txt.regexen.extractUrl.exec(text); 

keine spezifische Fehler protokolliert wird stattdessen meine Seite friert ein und alarmieren mir das Skript zu stoppen, bitte helfen Sie.

+1

wirksam werden Wenn Sie Länge von Text berechnen möchten, dann warum nicht einfach 'text.length '? – Moin

+0

@Moin Twitter wickelt alle URLs in einem Tweet in t.co kurze URLs. Also muss ich die Länge des Tweets vor dem Senden an Twitter berechnen. – Dharmendra

+0

Verwenden Sie die neueste Version von hier https://github.com/twitter/twitter-text/tree/master/js/pkg? – morloch

Antwort

5

Ein Pull-Anforderung, wie auf der github Repository auf 2012-05-31 fusioniert worden, um die Einführung von twttr.txt.getTweetLength (Text, Optionen) Funktion, die Berücksichtigung nimmt t.co URLs und definiert wie folgt:

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; 
}; 

so wird Ihre Funktion nur werden:

function charactersleft(tweet) { 
return 140 - twttr.txt.getTweetLength(tweet); 
} 

plus die besten Praktiken mit t.co bezüglich wir die short_url_length und short_url_length_https Werte von twitter abrufen und verwenden sie als Optionen Parameter im twttr.txt geben .getTweetLength-Funktion:

Fordern Sie GET-Hilfe/Konfiguration einmal täglich in Ihrer Anwendung an und speichern Sie die "short_url_length" (t.co's aktuelle maximale Länge) für 24 Stunden. Cache "short_url_length_https" (die maximale Länge für HTTPS-basierte t.co-Links) und diese als Länge von HTTPS-basierten URLs verwenden. Insbesondere wissen, dass einige Änderungen in der Länge der t.co URLs am 2013-02-20 wie im Twitter Developer Blog beschrieben