在铬中杀死角度
Posted
技术标签:
【中文标题】在铬中杀死角度【英文标题】:Kill angular in chrome 【发布时间】:2020-04-28 19:51:28 【问题描述】:我有员工通过在两个选项卡中打开我的应用程序来不断破坏事情。如果他们打开一个新标签,我想杀死一个标签。这可能吗? window.close()
不起作用,因为我的标签没有自行打开。我在想也许写一个叉子炸弹,但这可能会使其他东西崩溃。我正在使用 Angular,所以我想一定有一些我可以调用的函数,比如 app.destory
函数?
有人有更好的想法吗?
我的应用仅在 Chrome 上运行,并且永远不会改变,因此我可以使用特定于 Chrome 的解决方案。
【问题讨论】:
更好的主意:编写代码,使其在多个选项卡中工作:P。 @Monkey 我不喜欢这个想法......这很难......我所有的网站都非常依赖于状态,并且所有状态都存储在本地存储中。可以在标签之间共享 您可以使用electronjs.org封装您的应用程序 @mario 我已经试过了,我的老板都气急败坏地认为你必须安装一些东西。他们只想要一个浏览器。 真可惜,但是我在这里发现了一个与您类似的问题:***.com/questions/23690666/… 也许这适合您,祝您好运。 【参考方案1】:您可以通过这种方式在 Angular 中访问窗口对象。首先,我们必须创建一个服务。由于我们的 Angular 应用程序不仅设计用于在您的浏览器中运行,而且还可以在移动平台、服务器或 web 工作者中运行,而 window 等对象可能不可用。
因此建议的方法是包装这些对象并通过依赖注入机制注入它们。
import Injectable from '@angular/core';
function _window() : any
// return the global native browser window object
return window;
@Injectable(
providedIn: root
)
export class WindowRef
get nativeWindow() : any
return _window();
我们可以像这样在我们的组件中简单地调用它:
import WindowRef from './WindowRef';
@Component(...)
class MyComponent
constructor(private winRef: WindowRef)
// getting the native window obj
console.log('Native window obj', winRef.nativeWindow);
现在创建一个处理 newtab 操作的函数
function openInNewTab(url)
let newTab = this.winRef.open('https://***.com/questions/61488800/kill-angular-in-chrome', '_blank');
newTab.focus(); //=====> Focus new tab
let currentTab = this.winRef.open("", "_self");
currentTab.document.write("");
currentTab.close();
【讨论】:
这会导致标签崩溃...这将停止所有处理,但我认为这是一个糟糕的用户体验【参考方案2】:我发现 Angular 中有一个破坏函数:
platformBrowserDynamic().destroy()
只需调用该函数,它将完全卸载 Angular。所有 CSS 将停止工作,您的 html 将冻结。这不是一个糟糕的选择。我只是用一条很好的消息冻结所有内容,说要关闭窗口。
【讨论】:
以上是关于在铬中杀死角度的主要内容,如果未能解决你的问题,请参考以下文章