在铬中杀死角度

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 将冻结。这不是一个糟糕的选择。我只是用一条很好的消息冻结所有内容,说要关闭窗口。

【讨论】:

以上是关于在铬中杀死角度的主要内容,如果未能解决你的问题,请参考以下文章

切换到同一窗口中的弹出窗口

更改剑道网格角度的模式

如何在 Android 应用的 web 视图中使用持久存储

怎么让Android程序一直后台运行,像QQ一样不被杀死

css 固定元素与铬中的闪光

是否有一个标志可以禁用铬中的子资源完整性检查?