Disable Chrome to ask for confirmation to open external application everytime

We have configured chrome to open tel: links with Skype. One computer it does not open straight Skype after clicking a tel-link, but asks if skype should be opened (in a popup).

I tried to reset Chrome and tried to change the handler to another software to test if the problem maybe is with Skype. But it seems Chrome is generally asking for confirmation before opening an external application.

How can we configure Chrome to not ask for confirmation over and over? This is on Windows 10.


This can now be done with Chrome 79+. Thanks to the Reddit link from @Kropotoff's earlier answer, you can restore the "Always open these types of links in the associated app" option by updating your system settings.

For Windows:

Apply the "External​Protocol​Dialog​Show​Always​Open​Checkbox" registry policy

Or edit the registry and add a REG_DWORD registry entry to:

Software\Policies\Google\Chrome\ExternalProtocolDialogShowAlwaysOpenCheckbox

For macOS:

defaults write com.google.Chrome ExternalProtocolDialogShowAlwaysOpenCheckbox -bool true

At least on Mac, it seems you need to quit and restart Chrome before the option becomes available.

Another Method

As an alternative to enabling the checkbox, then launching Chrome to select the checkbox, and ensuring it is persisted in the Chrome profile, it also appears to be possible to whitelist specific protocol handler URIs via the command line. This is helpful for Selenium and other automation, meaning that the URIs open without user intervention and you don't need to pre-configure the browser.

Assuming that your protocol handlers are myprotocol1://whatever and myprotocol2://whatever, you can do this on Mac. If you go this route, it doesn't look like you need to bother with the checkbox setting above.

defaults write com.google.Chrome URLWhitelist -array 'myprotocol1://*' 'myprotocol2://*' 'myprotocol3://*'

I have not tried this on Windows, but it looks like there is guidance on the enterprise policy page for URLWhitelist.


Simple fix for Windows - make a .reg file with the following inside it and run it:

(For Chrome and chromium Edge)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
"ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001

Solution for Linux

sudo mkdir -p /etc/opt/chrome/policies/{managed,recommended}
echo '{"ExternalProtocolDialogShowAlwaysOpenCheckbox": true}' | sudo tee /etc/opt/chrome/policies/managed/protocol_open.json > /dev/null

If you are using chromium instead of chrome then use /etc/chromium instead of /etc/opt/chrome.

No restart required.

From the chromium administrators documentation


Found this while trying to fix the same sort of issue. My new win10 install with current chrome would ask if chrome could open utorrent, similar to my work machine asking to open citrix launcher every time I start a virtual machine.

What worked for me:

Chrome settings - Site settings - Handlers - Do not allow any site to handle protocols - DISABLED

Then when I hit a magnet link, the same confirmation box opens but has a checkbox to always remember this choice. Subsequent magnet links now open directly into utorrent with no notification. I assume the tel: uri would behave the same when selecting the app of your choice. Let us know!


Updated answer for Linux, Sept 2020

I know the original question was for Windows, but the answers and comments clearly show appetite for an answer for Linux too. This is an update to @tacoscool's answer which is very helpful, but only covers the ExternalProtocolDialogShowAlwaysOpenCheckbox policy for ensuring the "Always open..." checkbox is visible.

If instead you want to skip the dialog for a certain protocol (e.g. tel:..., or org-protocol:... for capturing within Emacs's Org mode) across all sites without any prompting, as requested by the original question, you need to use the URLWhitelist policy for Chrome 85 and earlier, and URLAllowlist for Chrome 86 and later. If you are on 85 or earlier but want a future-proof solution, you can combine them both into a single file, e.g.

sudo bash
mkdir -p /etc/opt/chrome/policies/{managed,recommended}
cat <<EOF >/etc/opt/chrome/policies/managed/allow_tel_protocol.json
{
  "URLWhitelist": [
    "tel:*"
  ],
  "URLAllowlist": [
    "tel:*"
  ]
}
EOF

Presumably this file could be placed in /etc/opt/chrome/policies/recommended instead of /etc/opt/chrome/policies/managed but I haven't tested that.

You can verify that these files are having the correct effect by visiting chrome://policy.

Note that this is a policy which will take effect for all users. If you want to set it per user then I think you have to find the equivalent key in the user profile's preferences JSON file, which is typically ~/.config/google-chrome/Default/Preferences or similar on Linux. According to other posts, it should be enough to ensure that you have something like

"protocol_handler":{"excluded_schemes":{"tel":false}}

in this Preferences file (I wonder why it's false not true, but OK whatever...). However when I shut down Chrome, edited the file, and restarted Chrome, it automatically removed that setting every time. Maybe I was doing something wrong, or maybe this no longer works - I'm on Chrome 85.

Finally, if you want to achieve the same in Chromium or Brave, replace all mentions above of /etc/opt/chrome with /etc/chromium