Chrome 27: расширение новой вкладки не может украсть фокус у омнибокса

С Chrome 27 кажется, что расширения, которые перекрывают новую вкладку Chrome, не могут отвлечь внимание от омнибокса Chrome, как это было в предыдущих версиях Chrome.

Есть ли новый способ фокусировки поля ввода на странице новой вкладки, или эта функция полностью отключена?:(

Чтобы проверить это, создайте папку расширения с тремя файлами:

1. manifest.json:

{
    "name": "Focus Test",
    "version": "0",
    "minimum_chrome_version": "27",
    "chrome_url_overrides": {
        "newtab": "newTab.html"
    },
    "manifest_version": 2
}

2. focus.js:

document.getElementById('foo').focus();

3. newTab.html:

<html>
    <body>
        <input id="foo" type="text" />
        <script type="text/javascript" src="focus.js"></script>
    </body>
</html>

Затем, когда вы загружаете расширение и открываете новую вкладку, поле ввода не фокусируется на странице новой вкладки.

Я также попытался добавить autofocus приписать input поле, но тоже не повезло. Новая вкладка расширения не может отвлечь внимание от омнибокса Chrome.

Есть идеи? Это ошибка или новая "фича"?

4 ответа

Решение

Согласно документации расширения Chrome,

Не полагайтесь на страницу с фокусом клавиатуры. Адресная строка всегда получает фокус в первую очередь, когда пользователь создает новую вкладку.

Смотрите ссылку здесь: переопределить страницы

Этот ответ адаптирован из /questions/19040673/ne-mogu-ustanovit-fokus-dlya-vvoda-v-rasshirenii-chrome/19040681#19040681.
Это было протестировано как с Manifest V2, так и с V3.
Протестировано в Google Chrome 99.0.4844.51 64-бит (Windows 10).

  1. Заменить содержимое focus.jsс:
        if (location.search !== "?x") {
    location.search = "?x";
    throw new Error;  // load everything on the next page;
    // stop execution on this page
  }
  1. Добавить autofocusатрибут к.
  2. Перейдите на страницу расширений в Chrome и нажмите кнопку. Выберите папку вашего расширения.
  3. Откройте новую вкладку. Вы можете увидеть модальный диалог, читающий Change back to Google?. Нажмите Keep itчтобы сохранить пользовательскую страницу новой вкладки.
Встроенный Javascript — только манифест V2

Если вы встраиваете Javascript в HTML-файл, вам потребуется выполнить несколько дополнительных действий:

  1. После добавления встроенного кода Javascript в HTML-файл откройте DevTools ( F12key) и наблюдайте за выводом ошибки в консоли. Пример вывода, который вы должны увидеть:
      Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem:". 
Either the 'unsafe-inline' keyword, a hash ('sha256-MK0Gypb4mkZTI11eCOtWT+mGYcJNpN5zccvhfeaRb6E='), or a nonce ('nonce-...') is required to enable inline execution.
  1. Выберите и скопируйте этот хэш.
  2. Добавьте строку, чтобы разрешить запуск JS, вставив только что скопированный хэш между одинарными кавычками. Например:
      "content_security_policy": "script-src 'self' 'sha256-MK0Gypb4mkZTI11eCOtWT+mGYcJNpN5zccvhfeaRb6E='"
  1. Снова перейдите на страницу расширений. Удалите расширение, а затем снова добавьте его с помощью Load unpackedкнопка.
  2. Откройте новую вкладку. Теперь ваше расширение должно автоматически сфокусироваться на <input>.

Обратите внимание, что встраивание работает только с Manifest V2; Manifest V3 возвращает сообщение об ошибке при попытке загрузить расширение (даже с правильно сформированным объектом в manifest.json, чтобы заменить Manifest V2 "content_security_policy"нить):

      Failed to load extension
File C:\path\to\extension
Error 'content_security_policy.extension_pages': Insecure CSP value "'sha256-...'" in directive 'script-src'.
Could not load manifest.

Вот решение для манифеста v3

      chrome.tabs.onCreated.addListener((tab) => {
  if (tab.pendingUrl === 'chrome://newtab/') {
    chrome.tabs.remove(tab.id)
    chrome.tabs.create({
      url: '/index.html',
    })
  }
})

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

Минусы: уродливое хром-расширение://akfdobdepdedlohhjdalbeadhkbelajj/index.html в адресной строке.

У меня есть дешевая работа, которая позволяет украсть фокус из адресной строки. Это не для всех. Я действительно использую это, потому что я хочу так же плохо управлять фокусом новой вкладки в своем собственном решении для новой вкладки:

      <script>
  alert('Use enter key to cancel this alert and then I will control your focus');

  document.getElementById('...AckerAppleIsCrafty...').focus()
</script>

СЛУЧАЙ ИСПОЛЬЗОВАНИЯ: я создал собственную настраиваемую вкладку HTML Chrome, в которой есть поисковый ввод, который выполняет пользовательский поиск в моей истории и добавляет в закладки то, что мне нравится.

Обналичить меня, сосредоточившись снаружи, как насчет этого?

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