实用解决方案/检测
问题是弹出窗口阻塞,这是一个一般的 javascript 问题,不仅与角度有关。一种解决方案是检测弹出窗口何时被阻止/关闭并通知用户。
我做了一个非常粗略的实现。我修改了popout.services.ts
文件并添加了一个检测来查看窗口是否打开和/或存在。
我添加了在调用detectPopBlocker
初始值 2 秒后执行的方法。window.open
请注意,原始代码等待 1 秒才能将数据发送到新窗口实例。
项目:https ://stackblitz.com/edit/portal-simple-yyyffj?file=src/app/services/popout.service.ts
openPopoutModal(data) {
const windowInstance = this.openOnce(
"assets/modal/popout.html",
"MODAL_POPOUT"
);
// Wait for window instance to be created
setTimeout(() => {
this.createCDKPortal(data, windowInstance);
}, 1000);
setTimeout(() => {
this.detectPopupBlocker(windowInstance);
}, 2000);
}
detectPopupBlocker(windowInstance) {
if (
!windowInstance ||
windowInstance.closed ||
typeof windowInstance.closed == "undefined"
) {
alert(
"This site relies on a new browser windows to diplsay data. It seems the windows has been closed." +
"Please disable any pop-up blockers or other such software for the specific site. "
);
}
}
理论
问题不是您的代码,而是与广告/弹出窗口阻止有关。
我在没有广告拦截的浏览器中尝试了该示例,并且效果很好。我还在 chrome 浏览器中尝试了它,Adblock extension
并看到了你提到的行为(弹出窗口立即打开和关闭)。
它通知我一个广告被屏蔽了。
因此,正如我在上面所做的那样,我实现了一个简单的弹出窗口拦截器检测器(甚至可能是简单的基于 javascript 的),以便在发生这种情况时显示一条消息。
有多种资源展示了如何做到这一点,例如: