Адаптация из моих комментариев
Чтобы пойти с инъекцией взломанного стиля, просто поместите следующий код в тег скрипта. Это помещает на ваш сайт тег сценария https://platform.twitter.com/widgets.js
, чтобы он больше не нуждался в нем как отдельный тег сценария.
// widgets script loading taken from Twitter
window.twttr = (function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function (f) {
t._e.push(f);
};
return t;
}(document, "script", "twitter-wjs"));
twttr.ready(function (twttr) {
twttr.events.bind("rendered", function (event) {
var widgetFrame = event.target;
var retweets = widgetFrame.contentDocument.querySelectorAll('div.timeline-Tweet--isRetweet');
retweets.forEach(function (node) {
if (node.parentNode) { // (in)sanity check
node.parentNode.style = 'display: none;' // hide entire parent li tag
}
})
});
});
Замечание об этом
Мы родительский узел, как каждый div.timeline-Tweet--isRetweet
сидит в li
тег, который дает вам границу, так что вы в конечном итоге с какой-то странной двойной границы осталось после того, как скрытые ретвитов. Я думаю, что нет способа добраться до родителя с помощью селекторов CSS, поэтому мы должны сделать это с помощью кода.
Еще одно замечание
После хак сильно зависит от способа, как содержание сроков структурированы, и те могут быть изменены без уведомления от Twitter, так что вы рискуете здесь один прекрасный день вы проснетесь с вами штанами и ретвитов назад в вашей временной шкале;)
Update
нормально здесь v2, прослушивающие обновления s на ol
... но после того, как писать его я начинаю понимать др Франкенштейн чувства;)
window.twttr = (function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function (f) {
t._e.push(f);
};
return t;
}(document, "script", "twitter-wjs"));
twttr.ready(function (twttr) {
twttr.events.bind("rendered", function (event) {
var frameDoc = event.target.contentDocument;
// initially hide retweets
var hideRetweets = function() {
var retweets = frameDoc.querySelectorAll('div.timeline-Tweet--isRetweet');
retweets.forEach(function (node) {
if (node.parentNode && node.parentNode.style !== 'display: none;') { // (in)sanity check
node.parentNode.style = 'display: none;' // hide entire parent li tag
}
});
};
hideRetweets();
// Twitter widget emitts no events on updates so we hook up ourselves to ol element to listen on it for additions of children
var watcher = new MutationObserver(function (mutations) {
// check whether new tweets arrived
var hasNewTweets = mutations.some(function (mutation) {
return mutation.addedNodes.length > 0;
});
if (hasNewTweets) {
hideRetweets(); // rescan all tweets as it is easier
}
});
watcher.observe(frameDoc.querySelector('ol.timeline-TweetList'), { childList: true });
});
});
Доля коды, который впрыскивает стиль, может быть, есть некоторая очевидная ошибка. Хакерный подход с введением стиля работал для меня с этой маленькой мерзостью: 'document.querySelector ('# twitter-widget-0'). ContentDocument.querySelectorAll ('div.timeline-Tweet - isRetweet'). ForEach (node = > node.style = 'display: none;'); ' Предполагая, что временная шкала iframe имеет идентификатор' # twitter-widget-0'. Можно входить в кишки iframe, временные рамки iframe считаются как из одного домена. Во-вторых, я не знаю, разрешают ли лицензии виджетов Twitter для таких манипуляций. – gaa
Привет, спасибо за это! У меня действительно не было никакого кода, так как я понятия не имею о JS. Сейчас я пытаюсь, и это не работает, даже если идентификатор совпадает с вашим. Как мне вставить это? Я использовал '' – Guido
Кроме того, если вы опубликуете это как рабочий ответ, я бы определенно его принял. – Guido