javascriptgoogle-chromegoogle-chrome-extensionfocusomnibox

How to steal focus from the omnibox in a Chrome extension on the new tab page?


I'm making a Chrome extension that involves putting a text input on the new tab page, and immediately giving focus to that input text when the new tab page loads. After being unable to get focus using traditional methods (e.g. focus()), I stumbled upon this question:

Chrome 27: New Tab Page extension can't steal focus from Omnibox

which states that Chrome has now made it so that you can't steal omnibox focus on a new tab page. Given that Chrome is fine with giving focus to any site that isn't the new tab page, I've been trying to come up with workarounds, but nothing is really satisfactory.

I've tried:

Does anyone have any other suggestions as to how you might work around this restriction? It's pretty critical to my extension.

Thanks!


Solution

  • Hello from my question you linked!

    On your New Tab Page, include the following JavaScript:

    chrome.tabs.create({ url: chrome.extension.getURL("foo.html") });
    window.close();
    

    This will create a "normal" tab, and then close the New Tab Page. You can then focus() your input box on the normal tab.

    This is what I've done for my Fauxbar extension. It adds a slight delay when clicking Chrome's New Tab button (in terms of how long it takes for your input box to become focused), but I reckon it's better than having to press Tab.

    You could also implement chrome.commands to create keyboard shortcuts that users can modify themselves under chrome://extensions > Keyboard shortcuts.