У меня есть следующий код в моем документе:
<a class="twitter-widget" href="url" data-widget-id="138843679974442730">Twitter Timeline</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
data-widget-id
подключен к одному стилю. Прямо сейчас, если на веб-сайте есть изменение темы (я заменяю все ответственные таблицы стилей и изображения), все меняется, но виджет Twitter.
Поскольку сам виджет является iframe, я не могу изменить любые прикрепленные к нему таблицы стилей.
Есть ли простой способ изменить стиль виджета без его перезагрузки (удаление тега, создание тега, запуск js)?
Нет прямого способа сделать это, поэтому я решил привнести другую зависимость, которая будет задерживать событие onload
.
<script type="text/javascript" src="//platform.twitter.com/widgets.js"></script>
И вот код, который сделал эту работу:
var twitterBox = document.getElementsByClassName("twitterBox");
if (!twitterBox || twitterBox.length == 0) { return true; }
var twitterTimeline = document.createElement('a');
twitterTimeline.className = 'twitter-timeline';
twitterTimeline.href = 'url';
twitterTimeline.innerHTML = 'Twitter Timeline';
twitterTimeline.setAttribute('data-widget-id', '388742673974046720');
twitterBox[0].removeAttribute('data-twttr-id');
twitterBox[0].innerHTML = '';
twitterBox[0].appendChild(twitterTimeline);
twttr.widgets.load();
Вы можете стилизовать элементы в виджетах Twitter iframe с помощью JavaScript.
Во-первых, вам нужен активный документ в контексте вложенного просмотра iframe:
var doc = document.getElementById("twitter-widget-0").contentDocument;
Затем вы можете применять стили (например):
doc.querySelector(".timeline-header").style["background-color"] = "black";
doc.querySelector(".timeline-header a").style["color"] = "white";