In my Angular 10
app I would like to open component in new browser tab. I would like to do that without bootstrapping whole app and creating another app instance.
I found article Open Angular components dynamically in new browser tab without bootstrapping the whole app again which describes exactly what I need.
But there are some issues - it's not working correctly. In Chrome incognito mode it works fine but in Chrome in normal mode or Firefox doesn't work. It opens new tab for few miliseconds and closes itself. On other computer it works fine in Firefox but doesn't work at all in Chrome.
My question is it possible to achieve that with some soluction or hack and allow it to work in any or most browsers? I wouldn't like to create multiple instances because it will be difficult to communicate and keep one state of app.
Practical Solution / Detection
The problem is pop-up blocking, which is a general javascript problem and not only angular related. A solution is to detect when pop-ups are blocked/closed and to inform the user.
I did a very rough implementation. I modified the
popout.services.ts
file and added a detection to see if the window is open and/or exists.I added the
detectPopBlocker
method that is executed 2 seconds after the intialwindow.open
is called. Please note that the original code waiting 1 second in order to send the data to the new window instance.Project: https://stackblitz.com/edit/portal-simple-yyyffj?file=src/app/services/popout.service.ts
Theory
The problem is not your code but instead it is related to ad/popup blocking.
I tried the example in a browser without ad-blocking and it worked fine. I also tried it in a chrome browser with an
Adblock extension
and saw the behavior you mention (the popup window opened and closed immediately).It notified me that one advert was blocked.
So, as I did above, I implemented one of the simple pop-up blocker detectors (maybe even simple javascript based) in order to display a message when this happens.
There are a variety of resources that show how to do this, for example: