Определение области щелчка для прокрутки, имитация щелчка

На веб-сайте Microsoft OneDrive есть много страниц, на которых полоса прокрутки не работает с клавишами вверх/вниз при загрузке страницы: вам нужно щелкнуть область страницы рядом с полосой прокрутки, после чего клавиши начнут работать. (Происходит с целевой страницей, страницей «В этот день» и т. д.)

Я хочу написать сценарий tampermonkey, который будет делать этот щелчок при загрузке страницы. Я довольно долго копался в DevTools, пытаясь выяснить, что происходит/меняется, когда я делаю этот щелчок, и я в растерянности.

Как мне наблюдать за этой работой в DevTools? Какая точка зрения раскрывает это? Должен ли я использовать другой инструмент? Есть ли команды js, которые я могу запустить с консоли, которые мне здесь помогут?

Я использую последнюю версию браузера Google Chrome.

MRE недоступен по очевидным причинам, но если у вас есть учетная запись, страницы будут находиться на сайте onedrive.live.com или под ним, например «В этот день».

Обновление: setInterval(() => { console.trace('Focus:', document.activeElement); }, 5000); Всегда показывает активный элемент, являющийся элементом body, когда перелистывание клавиатуры работает, а когда нет.

вы имеете в виду сайт Microsoft 365? (www.office.com), предоставьте дополнительную информацию.

GTK 19.05.2024 18:30
onedrive.live.com или страницу с фотографиями «В этот день» под ним. Спасибо за рассмотрение моего вопроса.
JimB 19.05.2024 22:29

Я не могу воспроизвести эту проблему и не могу найти страницу «В этот день», возможно, она доступна только в платной/старой учетной записи? на главной странице (onedrive.live.com) я могу использовать клавиатуру для прокрутки сразу после загрузки страницы

GTK 19.05.2024 23:38

Это платный аккаунт. Если я открою новую вкладку и перейду на onedrive.live.com, перелистывание с клавиатуры не будет работать. Если я щелкну область, которая начнет работать, а затем перезагрузлю страницу с помощью F5, перелистывание клавиатуры все равно будет работать после перезагрузки. Любопытная разница.

JimB 20.05.2024 03:48

попробуйте сфокусировать эту область в коде, используя element.focus(); обычно это происходит, когда вы щелкаете по элементу. Вы также можете проверить значение document.activeElement, когда прокрутка работает, а когда нет.

GTK 20.05.2024 04:28

Спасибо за предложение! Я обновил пост: activeElement всегда body -- когда он работает, а когда нет.

JimB 20.05.2024 13:55

это, вероятно, <div>, попробуйте добавить div.tabIndex = -1, затем div.focus(); например: страница фотографий/альбома: $('div[aria-label = "Photos list"]').tabIndex=-1; $('div[aria-label = "Photos list"]').focus()

GTK 20.05.2024 18:47

Это сделало это! добавив tabIndex, я думаю, и используя метку aria (я использовал xpath, но то же самое.) Сделайте ответ и получите признание @GTK.

JimB 20.05.2024 23:20
Поведение ключевого слова "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) для оценки ваших знаний,...
1
8
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Некоторые страницы OneDrive действуют как SPA, а другие вызывают полную загрузку, поэтому вам следует применить «исправление» как к load, так и к navigation.

в зависимости от желаемого поведения вы можете preventScroll на целевом div и отключить его outline.

примечание: элементы div не могут быть сфокусированы по умолчанию, но если задать значение tabIndex, они станут фокусируемыми.

// ==UserScript==
// @name         OneDrive keyboard scroll
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Auto-enable keyboard scrolling on OneDrive
// @author       You
// @match        https://photos.onedrive.com/*
// @match        https://onedrive.live.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=onedrive.com
// @grant        none
// ==/UserScript==

// delays are to make sure  target element has loaded
window.addEventListener('load', () => setTimeout(focusDiv, 500));
window.navigation.addEventListener('navigatesuccess', () => setTimeout(focusDiv, 800) );

function focusDiv(){
    const target = document.querySelector('div[aria-label = "Photos list"]'); // add more selectors if needed
    if (!target) return;

    target.tabIndex = -1; // to make div focusable
    target.style.outline = 'none'; // to remove black outline from div when focused
    target.focus({preventScroll: true}); // if we don't want to scroll to the div when focusing it
}

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