2017-01-15 2 views
-1
<abbr title="Sunday, January 01, 2017 at 12:12am" 
data-utime="0000000000" data-shorten="1" 
class="_5ptz timestamp livetimestamp"> 
<span class="timestampContent" id="js_d">1 hr</span></abbr> 

Я нашел скрипт, но он больше не работает. Итак, кто-нибудь здесь хочет поделиться тем, как это можно сделать?abbr [название] | Facebook, всегда показывать подсказку {timestamp}?

document.addEventListener("load", DisplayTimestamp()); 

function DisplayTimestamp() { 
    var i; 

    if (document.getElementsByTagName && document.getElementsByTagName("abbr").length > 0) { 
     for (i = 0; i < document.getElementsByTagName("abbr").length; i++) { 
      document.getElementsByTagName("abbr")[i].innerHTML += " 
    (" + new Date(document.getElementsByTagName("abbr")[i].title).toLocaleString() + ")"; 
     } 
    } 
} 

До сих пор я добился прогресса, несмотря на то, что не знал javascript.

Я обнаружил, что,

document.getElementsByTagName("abbr").title; 
document.getElementsByTagName("abbr")[i].innerHTML;  
document.getElementsByTagName("abbr")[i].title; 

На самом деле получает название и выводит его в консоль. Не уверен, что делать дальше.

Дальнейший прогресс, и мне удалось заставить его внести изменения на фактическую страницу с консоли.

var i = 0; 
var d = new Date(); 
var n = d.toLocaleString(); 
document.getElementsByTagName("abbr")[i].title; 
document.getElementsByTagName("abbr")[i].innerHTML;  
document.getElementsByTagName("abbr")[i].title; 
document.getElementsByTagName("abbr")[i].innerHTML = n; 

Я не знаю, что мне нужно сделать, чтобы получить работу в скрипте и всегда отображать метку времени, я мог бы сделать кнопку в этот момент, однако, что при нажатии показывает метку времени, и просто вставьте его в расширение браузера.

Если я хочу, чтобы отобразить фактический день и месяц в формате слова,

var i = 0; 
var n = document.getElementsByTagName("abbr")[i].title.toLocaleString(); 
document.getElementsByTagName("abbr")[i].title; 
document.getElementsByTagName("abbr")[i].innerHTML; 
document.getElementsByTagName("abbr")[i].title; 
document.getElementsByTagName("abbr")[i].innerHTML = n; 

Дальнейший прогресс:

(function DisplayTimestamp() { 
    var i; 
    var abbrs = document.getElementsByTagName("abbr") 
    if (document.getElementsByTagName && abbrs.length > 0) { 
     for (i = 0; i < abbrs.length; i++) { 
      abbrs[i].innerHTML += "(" + abbrs[i].title.toLocaleString() + ")"; 
      //console.log(document.getElementsByTagName("abbr")[i].title.toLocaleString()) 
     } 
    } 
})() 
+0

@JZersche Вы, кажется, принимаете комментарии не так. ** Ответы не входят в суть вопроса. ** Это довольно просто. Если вы хотите предоставить дополнительную информацию, которая отвечает на ваш вопрос, она принадлежит в ответе ниже, как и в другом. Ваш вопрос зарезервирован только для вопроса. Если вы хотите пометить свой вопрос, воспользуйтесь галочкой рядом с ответом. Не добавляйте «решаемый» в заголовок - это неуместно. – animuson

+0

Когда люди ищут google, это полезно. Приношу свои извинения за то, что вы ищете менее осведомленное сообщество. Я буду уверен, что буду хранить все знания в будущем, а не включать его в основное тело. –

+0

Никто не просил вас держать это в себе, поэтому, пожалуйста, перестань быть таким кислым. Мы просим вас поместить знания в * правильное место *. Там есть большая кнопка, которая гласит «Ответ на ваш вопрос» - нажмите на нее и введите свой ответ в появившемся окне. Если вы хотите продолжить обсуждение правил сайта, перейдите в [Meta] (http://meta.stackoverflow.com). – animuson

ответ

0

Используйте data-utime атрибут для построения даты, поэтому если предположить abbr является ссылка на элемент:

new Date(abbr.dataset.utime * 1000).toLocaleString() 

Однако, поскольку Facebook загружает контент динамически, лучше использовать MutationObserver для обработки сообщений, добавленных после загрузки страницы (также при прокрутке). Это также поможет нам сделать временные метки появляются без каких-либо задержек, добавив @run-at document-start:

// ==UserScript== 
// @name  FB: full timestamps 
// @match *://www.facebook.com/* 
// @run-at document-start 
// @grant GM_addStyle 
// @require https://greasyfork.org/scripts/12228/code/setMutationHandler.js 
// ==/UserScript== 

GM_addStyle(
    '.full-timestamp { opacity: 0.5; }' + 
    '.full-timestamp:hover { opacity: 1.0; }' + 
    '.full-timestamp:before { content: " ("; }' + 
    '.full-timestamp:after { content: ")"; }' 
); 

// process the already loaded portion of the page if any 
expandDates(document.querySelectorAll('abbr[data-utime]')); 

// process the stuff added from now on 
setMutationHandler(document, 'abbr[data-utime]', expandDates); 

function expandDates(nodes) { 
    for (var i = 0, abbr; (abbr = nodes[i++]);) { 
     if (abbr.querySelector('.full-timestamp')) { 
      // already processed 
      continue; 
     } 
     abbr.insertAdjacentHTML('beforeend', '<span class="full-timestamp">' + 
      new Date(abbr.dataset.utime * 1000).toLocaleString() + '</span>'); 
    } 
} 

код использует простой MutationObserver обертку setMutationHandler.

+0

Используйте [toLocaleDateString] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString) с параметрами, вы можете найти много примеров. – wOxxOm

+0

http: // stackoverflow.com/questions/41767088/i-have-a-script-that-shows-fb-timestamps-at-exact-time-using-moment-js-but-one По какой-то причине более старые сообщения показывают, что они составляют 3 часа за. Любая идея почему? –

+0

Звучит как сдвиг часовой пояс. Попробуйте 'new Date (abbr.dataset.utime * 1000 + (новая дата()). GetTimezoneOffset() * 60 * 1000)' – wOxxOm

Смежные вопросы