В документе Chrome и документе Mozilla ясно указано, что такое OnInputEnteredDisposition
при написании обратного вызова для прослушивателя событий omnibox.onInputEntered
. У последнего даже есть пример, как его обрабатывать - но где он установлен?
Что я имею в виду под «где оно установлено»:
Передаётся прослушиватель для omnibox.onInputEntered
:
выбор пользователя
omnibox.OnInputEnteredDisposition: используйте это, чтобы определить, открывать ли новую страницу на текущей вкладке, на новом переднем плане. или на новой фоновой вкладке.
source: MDN, omnibox.onInputEntered
На странице MDN omnibox.OnInputEnteredDisposition указано только, что
Он передается в прослушиватель событий
omnibox.onInputEntered
вместе с самим выбором.
Причина, по которой я смущен, заключается в том, что ни один из методов расширения, которые я видел до сих пор, не может установить omnibox.OnInputEnteredDisposition
— они могут только слушать его. В официальном репозитории chrome-extensions-samples я выполнил поиск, но это единственные варианты использования, которые я смог найти:
В omnibox/simple-example
, но всякий раз, когда я его тестировал, он всегда был установлен на currentTab
(по крайней мере, я не мог найти способ изменить это)
Остальные 3 места в архивных WebView
примерах, где он на самом деле установлен с использованием атрибута windowOpenDisposition
, но этот API устарел с 2020 года. Там написано, что «он будет поддерживаться для корпоративных и образовательных клиентов ChromeOS как минимум до января 2025 года», так что, я думаю, это только для обратной совместимости?
Я новичок в расширениях, поэтому, полагаю, это указывается каждым пользователем, когда он настраивает поведение по умолчанию для своего браузера? Или мне удалось пропустить эту часть в любом из документов? Я давно не писал JavaScript, поэтому более чем возможно, что я совершенно неправильно понимаю примеры, поэтому, пожалуйста, не стесняйтесь указывать на них.
Я заметил, что вы обновили вопрос, поэтому мой ответ обновился. Пожалуйста, проверьте.
omnibox.OnInputEnteredDisposition
просто помогает вам прослушать 3 сценария: открыть выделение на текущей вкладке, новой вкладке переднего плана или новой вкладке фона. Вы можете выбрать что-то сделать для каждого сценария, как в примере с MDN:
switch (disposition) {
case "currentTab":
browser.tabs.update({ url });
break;
case "newForegroundTab":
browser.tabs.create({ url });
break;
case "newBackgroundTab":
browser.tabs.create({ url, active: false });
break; }
Если вы отметите chrome.omnibox.OnInputEnteredDisposition
в инструментах разработчика:
Боюсь, вы не сможете его изменить, да и не нужно его менять.
В omnibox/simple-example, но всякий раз, когда я его тестировал, для него всегда было установлено значение currentTab (по крайней мере, я не мог найти способ его изменить)
В этой демонстрации щелкните левой кнопкой мыши -> currentTab, щелкните средней кнопкой мыши -> newBackgroundTab, Alt+Enter -> newForegroundTab (это соответствует дизайну браузера). Это помогает расширению справляться со всеми этими тремя возможными действиями, которые могут предпринять пользователи. Вы даже можете принудительно открыть вкладку на переднем плане независимо от того, как пользователь решит открыть вкладку. Хотя я не вижу смысла их менять.
О, так его ценность зависит от взаимодействия с пользователем? Спасибо! (Я не мог понять, как использовать среднюю кнопку мыши и левую кнопку мыши в омнибоксе, но ALT+ENTER сработало, как и ожидалось.)
Я предполагаю, что это происходит, когда Chrome отображает существующую вкладку в предложениях, поэтому ее выбор переключается на вкладку.