感谢作者同样遇到这个问题

原文链接:https://blog.csdn.net/u012961419/article/details/157805074

出现场景:

内网如192.xxx网段或本地Vue开发环境(特别是有vue-router相关的项目)
Edge浏览器版本号: 版本 149.0.4022.52 (正式版本) (64 位)

解决方法

下载扩展插件资源:edge-block-visibilitychange-extension
插件已关联到本文的资源绑定
 

资源扩展插件使用方法:

  1. 解压插件 zip
  2. Edge 地址栏输入 edge://extensions/
  3. 开启“开发人员模式”
  4. 点“加载解压缩的扩展”
  5. 选择解压后的 edge-block-visibilitychange-extension 文件夹

PS若无法下载zip

1. 创建一个 edge-block-visibilitychange-extension 文件夹

2. 创建 block-visibilitychange.js

(function () {
  "use strict";

  const blockedListeners = new WeakSet();
  const originalAddEventListener = EventTarget.prototype.addEventListener;
  const originalRemoveEventListener = EventTarget.prototype.removeEventListener;

  function isVisibilityChangeTarget(target) {
    return target === document || target === window;
  }

  function shouldBlock(target, type) {
    return type === "visibilitychange" && isVisibilityChangeTarget(target);
  }

  function swallowVisibilityChange(event) {
    event.stopImmediatePropagation();
  }

  originalAddEventListener.call(
    document,
    "visibilitychange",
    swallowVisibilityChange,
    true
  );

  EventTarget.prototype.addEventListener = function (type, listener, options) {
    if (shouldBlock(this, type)) {
      if (typeof listener === "function" || listener && typeof listener.handleEvent === "function") {
        blockedListeners.add(listener);
      }
      console.info("[VisibilityChange Blocker] Blocked visibilitychange listener:", listener);
      return;
    }

    return originalAddEventListener.call(this, type, listener, options);
  };

  EventTarget.prototype.removeEventListener = function (type, listener, options) {
    if (shouldBlock(this, type) && blockedListeners.has(listener)) {
      blockedListeners.delete(listener);
      return;
    }

    return originalRemoveEventListener.call(this, type, listener, options);
  };

  function blockOnVisibilityChangeProperty(target, label) {
    let storedHandler = null;

    try {
      Object.defineProperty(target, "onvisibilitychange", {
        configurable: true,
        enumerable: true,
        get() {
          return storedHandler;
        },
        set(handler) {
          storedHandler = typeof handler === "function" ? handler : null;
          if (storedHandler) {
            console.info("[VisibilityChange Blocker] Blocked " + label + ".onvisibilitychange:", storedHandler);
          }
        }
      });
    } catch (error) {
      console.warn("[VisibilityChange Blocker] Could not patch " + label + ".onvisibilitychange:", error);
    }
  }

  blockOnVisibilityChangeProperty(document, "document");
  blockOnVisibilityChangeProperty(window, "window");

  console.info("[VisibilityChange Blocker] Active on this page.");
})();

3. 创建 manifest.json

{
  "manifest_version": 3,
  "name": "VisibilityChange Blocker",
  "version": "1.0.0",
  "description": "Blocks document visibilitychange handlers on normal web pages to prevent minimize/focus hijacking.",
  "content_scripts": [
    {
      "matches": [
        "<all_urls>"
      ],
      "js": [
        "block-visibilitychange.js"
      ],
      "run_at": "document_start",
      "world": "MAIN"
    }
  ]
}
  1. Edge 地址栏输入 edge://extensions/
  2. 开启“开发人员模式”
  3. 点“加载解压缩的扩展”
  4. 选择刚刚的的 edge-block-visibilitychange-extension 文件夹
  5. 启动扩展插件,刷新刚刚出现问题网站进行测试。

更多推荐