Скрыть div внутри (например, Twitter) shadow-dom с помощью JavaScript

Использование TamperMonkey для упрощения просмотра страниц на моей стороне и желание скрыть от печати часть внешних карточек Twitter. Изображение во встроенном твите в любом случае не печатается и оставляет большой пустой прямоугольник, занимающий ценное пространство.

Модель DOM выглядит, как на изображении ниже - как мне настроить таргетинг на DIV с классом SummaryCard-image (зеленая стрелка)? Для меня не имеет значения, удален ли DIV из DOM или просто скрыт с помощью CSS.

Я пробовал следующие методы, которые не работают:

(1) Внедрение CSS с помощью .SummaryCard-image{display:none !important;}

(2) jQuery: $('.SummaryCard-image').remove();

$('.SummaryCard-image').length возвращает 0

(Note the #shadow-root (open), 2nd element from the top)

Скрыть div внутри (например, Twitter) shadow-dom с помощью JavaScript

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
1 197
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно сначала выбрать теневой корень, чтобы перейти к этому элементу. Вам нужно что-то вроде этого

var twitterWidget= document.querySelector('twitterwidget').shadowRoot;
twitterWidget.querySelector('.SummaryCard-image').style.display = "none";

Для нескольких виджетов Twitter

    var twitterWidgets = document.querySelectorAll('twitterwidget'); 

    twitterWidgets.forEach(function(item){
      var root = item.shadowRoot; root.querySelector('.SummaryCard-image').style.display = 'none';
    })

Пример https://rawgit.com/ebidel/2d2bb0cdec3f2a16cf519dbaa791ce1b/raw/fancy-tabs-demo.html

var tabs= document.querySelector('fancy-tabs').shadowRoot
tabs.querySelector('#tabs').style.display = none

Тогда вам нужно использовать querySelectorAll.

karthick 21.09.2018 20:21

querySelectorAll возвращает список узлов. вам нужно повторить его.

karthick 21.09.2018 20:32

Без проблем. :-)

karthick 21.09.2018 20:43

Работает как босс - спасибо, Картик. Для будущих гуглеров: для Twitter, необходимо было также добавить отдельный цикл forEach, чтобы также захватывать root.querySelector('article').style.display = 'none';

crashwap 21.09.2018 21:53

Другие вопросы по теме