LINUX.ORG.RU

уважаемые яваскриптеры, помогите с коротеньким скриптом

 ,


0

3

Здравствуйте.

Интересует совершенный пустяк: в firefox с Tampermonkey при открытии домашней страницы (about:home и about:newtab) сэмулировать четырёхкратное нажатие «TAB». И всё.

Трудность в том, что я не знаю яваскрипт. Баш и питон я просто не знаю, а яваскрипт я не знаю напрочь, навзрыд, взахлёб.

Если знающие люди уделят мне немного своего времени и навыков, то буду очень благодарен.

★★★★★

Последнее исправление: piyavking (всего исправлений: 5)

при открытии домашней страницы сэмулировать четырёхкратное нажатие «TAB»

Зачем? Чтобы что? Какого результата Вы хотите добится?

https://ru.wikipedia.org/wiki/Tampermonkey

«читается примерно как вмешивающаяся обезьяна, или обезьяна которая вмешивается!»

Shushundr ★★★★
()
Последнее исправление: Shushundr (всего исправлений: 2)
Ответ на: комментарий от piyavking

Руководствуясь заданием из шапки темы, открыл about:home, нажал TAB 4-е раза - фокус остановился на значке перезагрузки страницы (Обновить текущую страницу (Ctrl+R)).

krasnh ★★★★
()
Последнее исправление: krasnh (всего исправлений: 1)

Если тебе надо фокус на конкретный элемент перенести, то проще как-то так сделать:

document.getElementById("element_id").focus();

Трудность в том, что я не знаю джаву

Java и JavaScript имеют очень мало общего. Не надо их путать. JavaScript был так назван исключительно в маркетинговых целях.

Tanger ★★★★★
()
Ответ на: комментарий от Shushundr

Зачем? Чтобы что? Какого результата Вы хотите добится?

Я хочу добиться результата четырёхкратного нажатия клавиши «TAB». Если вкратце и не полностью - чтоб фокус на нужный мне элемент сам переместился, без того чтоб я сам по кнопке молотил.

Большое спасибо, что обогатили меня переводом названия расщирения на российский язык, я скачкообразно развился во все стороны от этой информации.

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от Tanger

Теперь вы оценили степень моего невежества в этом вопросе)

document.getElementById(«element_id»).focus();

Мне на самом деле не особо важно даже где будет фокус, лишь бы он с адресной строчки свалил (она у меня по умолчанию скрыта и выпадает по CTRL L). Вот эти вот элементы по ид ловить может и более тру, но четыре клаца табом сэмулировать всяко проще ИМХО)

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от krasnh

А, а я думаю, зачем комментатор меня в вечный цикл отправляет?)

нажал TAB 4-е раза - фокус остановился на значке перезагрузки страницы

Я достаточно сильно перепилил интерфейс фаерфокса, у меня четыре таба приводят к другому расположению фокуса.

piyavking ★★★★★
() автор топика
Ответ на: комментарий от Tanger

getElementById

Итак, дети, теперь вы знаете, как примерно определить возраст жопаскриптера — по годовым кольцам на срезе. Тем, кто использует getElementById, около сорока лет. Особи, использующие $, могут достигать пятидесяти.

Дикая природа удивительна.

P. S. querySelector('.myelement').focus()

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)

Господа профессионалы, хватит сраться между собой! Бросьте в каменты рабочие строчки, которые я смогу скормить обезьяне, и я буду счастлив, даже если они будут не по вашему там какому-то феншую...

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от piyavking

Я хочу добиться результата четырёхкратного нажатия клавиши «TAB». Если вкратце и не полностью - чтоб фокус на нужный мне элемент сам переместился, без того чтоб я сам по кнопке молотил.

Ну вот так и надо говорить. Элемент выделить гораздо проще по его id или классу, нежели эмулировать какие-то там нажатия куда-то.

P.S. Java тут вообще ни причём, скрипт тебе на JS нужен.

CrX ★★★★★
()
Ответ на: комментарий от piyavking

Мне на самом деле не особо важно даже где будет фокус, лишь бы он с адресной строчки свалил (она у меня по умолчанию скрыта и выпадает по CTRL L). Вот эти вот элементы по ид ловить может и более тру, но четыре клаца табом сэмулировать всяко проще ИМХО)

Оу… Не, такое юзерскриптом не сделаешь. Придётся пилить эксеншен целый.

И скорее всего, это решается через about:config как-то.

В общем, тут типичная XY problem. Ты пытаешься решить проблему совсем не подходящим для неё способом. Хорошо, что в итоге всё же стало понятно, чего ты на самом деле хочешь, а то бы сейчас понаписали скриптов…

P.S. Кстати, мне бы тоже пригодилось решение этой проблемы, пожалуй. Но юзерскриптами она точно не решается.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 3)
Ответ на: комментарий от CrX

Оу… Не, такое юзерскриптом не сделаешь. Придётся пилить эксеншен целый.

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

Как это не решается? У меня не получится скриптом четыре раза сделать «Tab», серьёзно? Извини, не верю(.

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 3)
Ответ на: комментарий от CrX

скрипт тебе на JS нужен.

Ну да, яваскрипт мне нужен. Не язык ява и не мотоцикл ява. И не остров ява. Твоя правда. Надо мне покорректней свою мысль выражать.

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

Как это не решается? У меня не получится скриптом четыре раза сделать «Tab», серьёзно? Извини, не верю(.

Именно юзерскриптом не получится. Ими можно делать что угодно со страницей, как угодно перерисовывать, что угодно добавлять, убирать, переходить, открывать и т.д., но не вне её не получится. Там огорожено всё одно от другого в целях безопасности. Эмулировать нажатия ты тоже можешь внутри самой страницы (но это решение через жопу, всё проще делается по ID и прочему), но адресная строка — это отдельная сущность, со страницы у тебя доступа к ней нет.

Нажатие на Tab легко можно сделать на шелле с xdotool, или на любом языке, но не изнутри браузера и юзерскриптов в нём. Экстеншенами можно.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

Начинаю понимать.

Узнав id, например, первой закладки в теле about:newtab, я смогу натравить на неё фокус, и при этом он снимется с адресной строчки. Так получится?

Xdotool оно конечно да, но мне оно надо именно что внутри браузера, не хочу внешние костыли городить...

piyavking ★★★★★
() автор топика
Ответ на: комментарий от rtxtxtrx

Зайдя на playwright.dev у меня развалился череп. Всё-таки лучше б чего-нибудь попроще...

И что такое тп?

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от piyavking

Проблема в том, что у тебя фокус не на странице. Если бы он был где-то на страницу, тогда да, с любого input’а на любой ты бы его смог перевести, или совсем снять, и т.д. А если фокус не на страницу, то так не сработает, к сожалению. https://ya.ru это делает, например, но если фокус встал на адресную строку, то на поле ввода на странице фокус не переключается.

Вообще, вот тут задают тот же вопрос, но предлагаемое решение у меня почему-то не работает: https://support.mozilla.org/en-US/questions/1292419

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от Nervous

Дикая природа удивительна.

const FocusDemo = () => {

    const [inputRef, setInputFocus] = useFocus()

    return (
        <> 
            <button onClick={setInputFocus} >
               Focus
            </button>
            <input ref={inputRef} />
        </>
    )
    
}

const useFocus = () => {
    const htmlElRef = useRef(null)
    const setFocus = () => {htmlElRef.current &&  htmlElRef.current.focus()}

    return [ htmlElRef, setFocus ] 
}
special-k ★★★★
()
Ответ на: комментарий от special-k

Да не поможет это, говорю. Это всё будет работать только если у тебя сама страница («окно») в фокусе уже. Если фокус на адресной строке, он на страницу не перескочет из JS/HTML на самой странице

CrX ★★★★★
()
Ответ на: комментарий от special-k

Расширением только.

Например этим: уважаемые яваскриптеры, помогите с коротеньким скриптом (комментарий)

Но можно написать, конечно, более компактное, которое делает только это.

CrX ★★★★★
()
Ответ на: комментарий от CrX

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

piyavking ★★★★★
() автор топика
Ответ на: комментарий от CrX

в итоге всё же стало понятно, чего ты на самом деле хочешь

И чего же он хочет? Зачем ему уводить курсор из строки поиска? Чем это мешает? Где курсор должен стать в итоге? В Firefox вообще есть API для управления фокусом?

Shushundr ★★★★
()
Ответ на: комментарий от piyavking

Юзерскрипты они с контентом самой странички работают, а у тебя проблема в браузере. Юзерскриптом ты это разве что в режиме киоска решишь сваяв весь интерфейс браузера в виде веб странички… Но это уже какая-то эталонная наркомания будет.

anonymous
()
Ответ на: комментарий от Shushundr

Зачем ему уводить курсор из строки поиска? Чем это мешает?

У меня основной панели по умолчанию нет, по CTRL+l она выпадает «шторкой» с фокусом на адресной строчке. При уводе фокуса с панели она схлопывается обратно в небытие: хоткей нажал - панель выпала - вбил адрес/поисковой запрос, нажал энтер - панель схлопнулась, пошёл грузиться контент.

При автофокусе на адресной строчке выпавшая панель звкрывает контент хомяка и вызывает чувство лёгкого раздражения.

Где курсор должен стать в итоге?

На отображаеиой странице. На контенте, не на интерфейсе.

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 8)
Ответ на: комментарий от Shushundr

И чего же он хочет?

Чтобы фокус был на странице.

Чем это мешает?

Тем, что ты не можешь, например, нажать PgDown и прокрутить страницу, или сделать любые другие действия, когда страница не в фокусе. Это неудобно.

Где курсор должен стать в итоге?

Конкретно у него — на одном из инпутов на на странице, но в целом идея, чтобы он был хотя бы на странице, а не элементе интерфейса браузера.

В Firefox вообще есть API для управления фокусом?

Для экстеншенов — да. Для юзерскриптов или сторонних программ — нет.

CrX ★★★★★
()
Ответ на: комментарий от CrX

https://www.reddit.com/r/unixporn/comments/1dao8bo/swabai_controlling_my_brow...

Вот вчера буквально видел. Думается через этот механизм браузером внешне управлять довольно просто. Чисто как альтернатива экстеншенам если надо взаимодействие ещё и с внешними программами сделать, хотя там внутри Playwright про который уже писали. Но код на гитхабе лежит, можно посмотреть.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от peregrine

Думается через этот механизм браузером внешне управлять довольно просто.

Не похоже. На видео видно только как страницы открываются… Да и исходники этой наколенной поделки мельком глянул… Вообще непонятно, зачем оно, честно говоря. Оно тупо браузер запускает и в нём (внутри, как страницу уже) скрипт. Это делается в пару десятков строк на шелле так-то… Может я, конечно, чего-то не понял. Но на полноценную интеграцию/API это вообще не похоже.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

Playwright там в качестве полноценной интеграции. С башем оно не работает и в зависимостях нода. А из языков с которыми Playwright умеет работать TypeScript, JavaScript, Python, .NET, Java. Если было бы просто на баше сделать, то не было бы нужды в Playwright-е, а она есть. Как минимум тебе веб-сервер нужен, можно конечно апач или энджиникс поднять и с баша его юзать... Но такое...

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от CrX

Ну в таком кейсе придется рядом запустить скрипт который через netcat будет слушать локалхост и по команде делать там через xdotool, а из юзерскрипта пинать этот локалхост на нужном порту.

Хотя я хз, из фф можно дбас пнуть?

ya-betmen ★★★★★
()