Vimium: Есть ли способ отключить Vimium на моей странице как владельцу сайта?

Созданный на 19 янв. 2017  ·  27Комментарии  ·  Источник: philc/vimium

Простите меня, если на этот вопрос где-то есть ответ, но я не смог найти его в FAQ или README.

У меня есть веб-сайт, которым пользуются многие программисты. Некоторые из них используют Vimium, и, похоже, расширение пытается обновить редактирование определенных элементов на моей странице. Это вызывает некоторые хитрые ошибки JS, которые очень трудно отследить, а также причиняет много неудобств пользователям, потому что они не понимают, что сбои вызваны конфликтом между нашим кодом и Vimium.

Есть ли способ пометить элементы с помощью «если вы используете Vimium, пожалуйста, не улучшайте этот элемент»? Заранее благодарим за ответ.

Самый полезный комментарий

Несколько мыслей.

Должны ли веб-мастера отключить Vimium?

  • Плюсы: они могут автоматически отключать Vimium, чтобы пользователи могли сразу же использовать свои приложения.
  • Минусы: пользователи будут сбиты с толку, если ярлыки внезапно перестанут работать, это можно смягчить, сообщив пользователям, что Vimium отключен.

Должны ли владельцы веб-сайтов иметь возможность обнаруживать Vimium?

  • Плюсы: они могут побуждать пользователей объяснять, что Vimium может мешать нормальной работе.
  • Минусы: это облегчает снятие отпечатков пальцев (но это уже может быть безнадежным делом)

Я не уверен, что у веб-мастеров должна быть какая-либо способность, но если они есть, вероятно, не следует полагаться на случайные детали реализации. Стандартное решение, например # 2532, может быть подходящим вариантом.

Например, страница может включать следующее:

<meta name="keybinding" disable="suggest")">
<script>
  document.querySelector('meta[name="keybinding"]').addEventListener('detect', () => {
    console.log('hi vimium user');
  });
</script>

Это позволяет веб-мастеру

  • Обнаружить Vimium
  • Отключить Vimium

Вимиуму придется

  • позволить пользователю настроить, следует ли

    1. игнорировать тег (позволяя странице думать, что Vimium не установлен)

    2. отключить Vimium на основе свойства disable meta

  • проверьте наличие метатега и отправьте ему событие обнаружения
  • сообщить пользователю, что на странице отключен Vimium

Теоретически другие расширения привязки клавиш также могут реализовать этот интерфейс, поэтому веб-мастерам не придется отдельно определять Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari и т. Д.

Все 27 Комментарий

@vincentwoo ... В настоящее время нет. Такая функция потребует тщательного обдумывания.

Вы готовы рассмотреть эту функцию? Если да, то можете ли вы сказать, что вас больше всего беспокоит? Я, разумеется, не хочу наступать ни на что, но я действительно хочу предложить лучший пользовательский интерфейс для моих пользователей, у которых установлен Vimium (а это удивительная группа людей).

+1 Было бы действительно полезное дополнение.

Вы можете отправить поддельное сообщение unload при готовности DOM / загрузке окна - если только Vimium инициировал.

Вот мой пример: https://jsfiddle.net/2L36ypys/ , и вы увидите, что вы не можете использовать f для активации подсказок.

Это работает с момента фиксации adce73cb68f7ca3e3e01ca6fbb08a1008c9c8b90 (2016/04/05).

Кстати, не могли бы вы дать больше подсказок, и мы можем разрешить такие конфликты.

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

Фактически, согласно тестам в https://jsfiddle.net/2L36ypys/1/ , мы можем отправить такое сообщение из среды «хоста», когда страница "loading" , потому что Vimium устанавливает свой unload прослушиватель событий перед всеми остальными скриптами страницы.

Но мой Vimium ++ не использует этот слушатель, и нет простого способа уничтожить его скриптами страницы.

Так что я жду ваших поисков. Тестовая страница, на которой вы можете воспроизвести ошибки, - это нормально. Большое спасибо.

В связи с этим существует двухлетний проект по обнаружению, использует ли пользователь Vimium, может быть здесь полезен: https://github.com/EvanHahn/Detect-Vimium

@pimlottc Расширение не работало 1 или 2 года, потому что Vimium использует shadowDOM, чтобы скрыть свои узлы.

Я не мог точно воспроизвести проблему, с которой сталкиваются пользователи vimium на моем сайте (вероятно, потому, что я лично не использую Vim). Осталось ли добавить к элементам какой-то специфичный для vimium класс CSS, чтобы просить расширение не увеличивать его?

Осталось ли добавить к элементам какой-то специфичный для vimium класс CSS, чтобы просить расширение не увеличивать его?

Я не уверен, что это отличная идея.

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

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

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

Если бы Vimium мог хотя бы каким-то образом добавить артефакт в DOM, по крайней мере, такие сайты, как @vincentwoo, на которые ссылается, могли бы быть _значали_, что у пользователя установлен Vimium, и они могли бы показать пользователю сообщение, напоминающее ему, что может быть конфликтующее поведение. при объединении сложного пользовательского интерфейса на веб-странице со всеми предложениями Vimium или даже предлагать помощь в настройке соответствующего приложения или Vimium для их решения.

Если бы Vimium мог хоть как-то добавить артефакт в DOM ...

Мы предварительно загружаем Вомнибар на каждой странице (верхнего уровня). Думаю, мы могли бы назначить ему подходящий класс или идентификатор.

Это определенно поможет!

@ smblott-github Моя идея заключается в том, что Vimium переименовывает свой теневой хост-узел с <div> на другое имя, например <vimium-ui> , и тогда этого достаточно для поиска дочерних узлов <html> для этого имени тега. Я думаю, что это имя тега настраиваемого элемента не будет таким же, как у других веб-сайтов.

Моя идея состоит в том, что Vimium переименовывает свой теневой узел хоста с <div> на другое имя, например <vimium-ui> , и тогда этого достаточно для поиска дочерних элементов <html> по этому имени тега. .

В настоящее время это невозможно из-за проблемы с Chromium .

Вы можете обнаружить наши доступные в Интернете ресурсы. Например:

var xhr = new XMLHttpRequest(),
    vimiumEnabled = false;
xhr.onerror = xhr.onload = function(){vimiumEnabled = xhr.responseText !== "";};
xhr.open("GET","chrome-extension://dbepggeogbaibhgnhhndojpepiihcmeb/content_scripts/vimium.css");
xhr.send()

@ mrmr1993 Я не хочу создавать «настраиваемый» элемент, просто HTMLElement с настраиваемым именем тега. Узел HTMLElement аналогичен узлу HTMLUnknownElement но по-прежнему поддерживает подключение shadowRoot.

Несколько мыслей.

Должны ли веб-мастера отключить Vimium?

  • Плюсы: они могут автоматически отключать Vimium, чтобы пользователи могли сразу же использовать свои приложения.
  • Минусы: пользователи будут сбиты с толку, если ярлыки внезапно перестанут работать, это можно смягчить, сообщив пользователям, что Vimium отключен.

Должны ли владельцы веб-сайтов иметь возможность обнаруживать Vimium?

  • Плюсы: они могут побуждать пользователей объяснять, что Vimium может мешать нормальной работе.
  • Минусы: это облегчает снятие отпечатков пальцев (но это уже может быть безнадежным делом)

Я не уверен, что у веб-мастеров должна быть какая-либо способность, но если они есть, вероятно, не следует полагаться на случайные детали реализации. Стандартное решение, например # 2532, может быть подходящим вариантом.

Например, страница может включать следующее:

<meta name="keybinding" disable="suggest")">
<script>
  document.querySelector('meta[name="keybinding"]').addEventListener('detect', () => {
    console.log('hi vimium user');
  });
</script>

Это позволяет веб-мастеру

  • Обнаружить Vimium
  • Отключить Vimium

Вимиуму придется

  • позволить пользователю настроить, следует ли

    1. игнорировать тег (позволяя странице думать, что Vimium не установлен)

    2. отключить Vimium на основе свойства disable meta

  • проверьте наличие метатега и отправьте ему событие обнаружения
  • сообщить пользователю, что на странице отключен Vimium

Теоретически другие расширения привязки клавиш также могут реализовать этот интерфейс, поэтому веб-мастерам не придется отдельно определять Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari и т. Д.

Я тоже ищу решение для обнаружения вимиума. Предложение @eejdoowad выглядит великолепно. Между тем я согласен с @ gdh1995 , <div> со специфическим идентификатором / именем класса немедленно решит проблему.

Что касается vimium v1.59, ниже представлена ​​рабочая функция, но не совсем надежная из-за отсутствия надежного идентификатора, если у вас есть другие расширения, которые вставляют shadowDom так, как это делает vimium, тогда он сломается.

function hasVimium () {
  try {
    const shadowRoot = document.querySelector('html > div').shadowRoot;
    return Boolean(shadowRoot.querySelector('style').textContent.match(/vimium/));
  } catch (e) {
    return false;
  }
}

Я просто хотел бы сказать, что я был бы обеспокоен, если бы был реализован встроенный механизм обнаружения. Отпечатки пальцев, конечно, всегда можно сделать с помощью плагинов, которые изменяют DOM, если только кто-то не запретит javascript веб-сайта, но давайте, по крайней мере, не будем давать людям легкую цель точки данных для отслеживания ...

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

Это совершенно необходимо для приложения, над которым я работаю, из-за таких ошибок, как https://github.com/philc/vimium/issues/2504 . Резюме таково, что при запущенном vimium веб-сайт будет реагировать на запросы и будет становиться все медленнее и медленнее по мере увеличения количества обработчиков событий.

Было бы неплохо, чтобы веб-сайты могли обнаруживать:

  1. Какая версия vimium используется
  2. Включен / отключен / частично отключен vimium (и какие ключи).

И было бы неплохо, если бы веб-сайт мог вежливо отключить vimium таким образом, чтобы он был понятен пользователям (так, чтобы значок vimium больше не был синим)

@mgsloan Не могли бы вы привести пример страницы? Способ обработки режима вставки существенно изменился с момента выпуска # 2504.

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

@ smblott-github Привет, спасибо за ответ! Действительно, похоже, что проблема с производительностью ушла. Большой!

Возникает проблема, при которой поведение ввода немного отличается от того, когда vimium отключен. Я запрошу и посмотрю, сможем ли мы поделиться URL-адресом.

Всем привет! Есть ли какое-то представление о том, какие подходы могут быть приемлемы для сопровождающих проекта? Мы были бы готовы пожертвовать некоторое время, чтобы это сделать (довольно много пользователей vimium используют CoderPad), но не хотим наступать ни на что.

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

Поскольку на вашем сайте есть некоторые специальные действия, которые отличаются от Vimium, включая esc в полях ввода, должен ли Vimium разрешать «исключать» <esc> на своей странице параметров?

Если это так, ваши пользователи могут настроить его вручную и вернуть действия сайта (в настоящее время кажется, что <esc> не может быть исключено).

Но мне не нравится идея отключения Vimium при выполнении особых условий. Это вредит ценности Вимиума.

Что касается публикации версии Vimium, советую:

  • путь к веб-доступному ресурсу, содержащий строку версии Vimium

    • вернее, но не подходит для разных вариантов Vimium

    • например, я делаю "Vimium C", и у него другой идентификатор расширения и, соответственно, разные URL-адреса ресурсов)

  • или специальный тег <meta> , созданный Vimium и содержащий такие слова, как "Vimium"

    • легче проверить, но может использоваться вредоносными программами

Проверка div верхнего уровня, похоже, больше не работает, потому что он больше не монтируется, пока пользователь что-то не сделает.

Другими словами, при загрузке страницы нет артефакта, на который можно было бы полагаться.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги