Twitter предотвращает блокировку скриптов

471
user21820

Я столкнулся со странной проблемой. Когда я включил UBlock Origin в Pale Moon, чтобы заблокировать все скрипты (включая inline-скрипты), веб-страница Twitter как-то показывает следующее неприятное поведение:

  1. Это не показывает контекстное меню при щелчке правой кнопкой мыши (но двойной щелчок правой кнопкой вызывает его).

  2. Многие стандартные клавиши не работают, включая Up / Down / PgUp / PgDn и F5 и Backspace и Alt + Left / Right / Home. Ctrl + W не закрывает вкладку, а Ctrl + T не вызывает новую вкладку (но Ctrl + Tab работает).

Я подтвердил, что это связано с блокировкой скриптов Twitter, потому что у меня есть два других аддона (одно из которых AdBlock Lite ), которые блокируют загрузку скриптов через NsIContentPolicy, оба из которых утверждают, что успешно блокируют:

Но не блокируйте

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

У меня даже есть Greasemonkey скрипт установлен @run-at document-startи stopImmediatePropagationна любом KeyDown события, но он не в состоянии предотвратить угон клавиатуры.

Мои вопросы

  1. Я вижу, что первый файл JS, который явно заблокирован, связан с <script>тегом, а не только с <link>тегом. Так что я предполагаю, что NsIContentPolicy не работает для <link>тегов (особенно с атрибутом rel='preload'?). Буду признателен, если кто-нибудь сможет объяснить, что происходит.

  2. Есть ли способ, которым я могу иметь 100% гарантию блокировки всех скриптов от запуска, если я не внесу их в белый список на индивидуальной основе?

Мобильная версия Twitter отлично работает и не угнать мыши и клавиатуры.

0
Я не вижу поведения, которое вы описываете. Если я блокирую все inline-script + сторонние и сторонние сценарии, все сценарии блокируются, контекстное меню, вызываемое правой кнопкой мыши, отображается правильно, страница dn / up работает нормально. Кроме того, _ «Я подозреваю» _ абсолютно бесполезен - вам не нужно «подозревать», просто используйте консоль разработчика, чтобы подтвердить, что все сценарии заблокированы. rhill 8 лет назад 0
@rhill: Буду признателен, если вы скажете мне, как правильно проверить. В профилировщике Javascript я ничего не вижу из запущенного Twitter, но если так, как можно похитить клавиши и мышь? Можете ли вы сказать мне, как обрабатывается тег ` `? Как мне захватить эти запросы? user21820 8 лет назад 0
@rhill: Когда я комментировал ранее, я не знал, что у консоли была возможность отключить Javascript. Действительно блокирует все сценарии, как и мой сценарий GM. Так что с UBlock Origin явно что-то не так. Похоже, что он успешно блокирует встроенные сценарии на других веб-сайтах, поскольку мой прослушиватель событий, введенный GM, не запускается на них в отличие от веб-страницы Twitter, а консоль регистрирует нарушения CSP. Я думаю, что мой метод лучше, чем использование CSP, поскольку для чего-либо, кроме другого расширения, должно быть невозможно внедрить прослушиватель событий перед моим. Я ошибаюсь? user21820 8 лет назад 1
@rhill: Кстати, вы разработчик UBlock Origin? На веб-странице Twitter он генерирует следующую ошибку, когда я нажимаю на страницу: `TypeError: elem.matches не является функцией @ chrome: //ublock0/content/js/scriptlets/load-large-media-interactive.js: 160 `. user21820 8 лет назад 0

1 ответ на вопрос

1
user21820

Наконец-то у меня было время вернуться к этому. Я использовал сценарий GreaseMonkey, чтобы внедрить прослушиватель событий для beforescriptexecuteпредотвращения загрузки всех сценариев, и обнаружил, что UBlock Origin (1.9.6) не может блокировать выполнение встроенных сценариев на веб-странице Twitter. Поэтому я, по сути, ответил на свой вопрос:

  1. Проблема была с UBlock Origin, а не с <link rel="preload" ...>тегами.

  2. Используя этот сценарий GM, я могу легко заблокировать все сценарии и, в частности, белый список любого, который я желаю.