skip to Main Content

I have a function named close in a js file that can’t be renamed for some reason.
But whenever I want to use window.close function (to close the browser tab) I can’t.
My close function overrides that functionality.
Is there a way to call the main Window.close function to close the browser tab?

<html>
<body>
<button onclick="myFunction()">Click me</button>

<script>
    function close() {
        alert('hi')
    }
    function myFunction() {
        window.close()
    }
</script>

</body>
</html>

Thanks

2

Answers


  1. Assuming you cannot modify the js file that contains the close function at all. There’s a trick that allows you to "restore" an overwritten built-in function using a fresh window object from an iframe.

    You can’t see it’s working here because the emulator is running inside of an iframe.

    <html>
    
    <body>
      <button onclick="myFunction()">Click me</button>
    
      <script>
        function close() {
          alert('hi')
        }
    
        function myFunction() {
          const iframe = document.createElement('iframe');
          iframe.style.display = 'none';
          document.body.append(iframe);
    
          // calling original window.close function
          iframe.contentWindow.close.call(window);
    
          iframe.remove();
        }
      </script>
    
    </body>
    
    </html>
    Login or Signup to reply.
  2. You can change the close variable from being property of the global object to be a global variable only by declaring it with let or const – see Do let statements create properties on the global object?. So with

    /* do not change to function declaration or var, as that would break `window.close`! */
    const close = function close() {
        alert('hi')
    };
    

    your myFunction implementation

    function myFunction() {
        window.close()
    }
    

    will just begin to work.

    (Of course, this will break all old code that did call window.close() and expected it to alert('hi') – but imo that was a bug anyway).

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search