FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

`<vscode-single-select>` dropdown stays open when webview loses focus · Issue #546 · vscode-elements/elements · GitHub

Repository navigation

<vscode-single-select> dropdown stays open when webview loses focus #546

Description

When multiple webviews are open, clicking a <vscode-single-select> opens its dropdown, but clicking into another webview (or anywhere outside the current one) doesn’t close it.

Expected:
The dropdown closes like with the native <select>

Version: eda2fab

In VS Code:

Screen.Recording.2025-10-09.at.10.09.43.mov

Sample:

Screen.Recording.2025-10-09.at.10.10.36.mov
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>VSCode Elements</title>
    <link
      rel="stylesheet"
      href="/node_modules/@vscode/codicons/dist/codicon.css"
      id="vscode-codicon-stylesheet"
    >
    <script
      type="module"
      src="/node_modules/@vscode-elements/webview-playground/dist/index.js"
    ></script>
    <script type="module" src="/dist/main.js"></script>
    <script>
      const logEvents = (selector, eventType) => {
        document.querySelector(selector).addEventListener(eventType, (ev) => {
          console.log(ev);
        });
      };
    </script>
  </head>

  <body>
    <h1>SingleSelect does not close on iframe blur demo</h1>
    <main>
      <vscode-demo></vscode-demo>
    </main>
</main>
<hr />
<h2>Iframe blur repro</h2>
<iframe id="wv" style="width:500px;height:200px;border:1px solid #aaa;"></iframe>
<script>
  const iframe = document.getElementById('wv');
  const src =
    '<!doctype html><html><head>' +
    '<meta charset="UTF-8">' +
    '<link rel="stylesheet" href="/node_modules/@vscode/codicons/dist/codicon.css">' +
    '<script type="module" src="/dist/main.js"></scr' + 'ipt>' +
    '<style>body{font-family:sans-serif;padding:12px}</style>' +
    '</head><body>' +
    '<vscode-single-select placeholder="Pick one">' +
      '<vscode-option>One</vscode-option>' +
      '<vscode-option selected>Two</vscode-option>' +
      '<vscode-option>Three</vscode-option>' +
    '</vscode-single-select>' +
    '<p style="font-size:smaller;color:#666;">Click outside the iframe to see if dropdown closes.</p>' +
    '</body></html>';
  iframe.srcdoc = src;
</script>
  </body>
</html>

Update:
As a workaround, one can add a listener to the iframe that listens for window.blur and document.visibilitychange === 'hidden' and closes any open <vscode-single-select>

Diff:

31d30
< </main>
33,34c32,36
< <h2>Iframe blur repro</h2>
< <iframe id="wv" style="width:500px;height:200px;border:1px solid #aaa;"></iframe>
---
> <h2>Iframe blur repro (WORKAROUND ONLY)</h2>
> <p>This example includes a minimal script that closes the dropdown when the iframe (webview) loses focus or becomes hidden.</p>
> 
> <iframe id="wv-fix" style="width:500px;height:220px;border:1px solid #4caf50;"></iframe>
> 
36,51c38,74
<   const iframe = document.getElementById('wv');
<   const src =
<     '<!doctype html><html><head>' +
<     '<meta charset="UTF-8">' +
<     '<link rel="stylesheet" href="/node_modules/@vscode/codicons/dist/codicon.css">' +
<     '<script type="module" src="/dist/main.js"></scr' + 'ipt>' +
<     '<style>body{font-family:sans-serif;padding:12px}</style>' +
<     '</head><body>' +
<     '<vscode-single-select placeholder="Pick one">' +
<       '<vscode-option>One</vscode-option>' +
<       '<vscode-option selected>Two</vscode-option>' +
<       '<vscode-option>Three</vscode-option>' +
<     '</vscode-single-select>' +
<     '<p style="font-size:smaller;color:#666;">Click outside the iframe to see if dropdown closes.</p>' +
<     '</body></html>';
<   iframe.srcdoc = src;
---
>   (function(){
>     const iframe = document.getElementById('wv-fix');
>     const src =
>       '<!doctype html><html><head>' +
>       '<meta charset="UTF-8">' +
>       '<link rel="stylesheet" href="/node_modules/@vscode/codicons/dist/codicon.css">' +
>       '<script type="module" src="/dist/main.js"></scr' + 'ipt>' +
>       '<style>body{font-family:sans-serif;padding:12px}</style>' +
>       '</head><body>' +
>       '<h3 style="margin:0 0 8px;">Workaround: close on blur/visibilitychange</h3>' +
>       '<vscode-single-select id="sel" placeholder="Pick one">' +
>         '<vscode-option>One</vscode-option>' +
>         '<vscode-option selected>Two</vscode-option>' +
>         '<vscode-option>Three</vscode-option>' +
>       '</vscode-single-select>' +
>       '<p style="font-size:smaller;color:#666;">Open dropdown, then click outside the iframe — it should close.</p>' +
>       '<script>' +
>         '(function(){' +
>           'function closeAll(){' +
>             'var list=document.querySelectorAll(\"vscode-single-select\");' +
>             'list.forEach(function(el){' +
>               'try{' +
>                 'if(typeof el.close===\"function\"){ el.close(); }' +
>                 'if(\"open\" in el){ el.open=false; }' +
>                 'el.removeAttribute(\"open\");' +
>               '}catch(e){}' +
>             '});' +
>           '}' +
>           'window.addEventListener(\"blur\", closeAll);' +
>           'document.addEventListener(\"visibilitychange\", function(){' +
>             'if(document.visibilityState===\"hidden\"){ closeAll(); }' +
>           '});' +
>         '})();' +
>       '</scr' + 'ipt>' +
>       '</body></html>';
>     iframe.srcdoc = src;
>   })();
Screen.Recording.2025-10-09.at.10.26.25.mov

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions


      Back | FazBrowse Home | New Git URL