整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

修改htmlElement的原型,返回当前对象的pr

修改htmlElement的原型,返回当前对象的proxy

改 HTMLElement 的原型来增加一个函数,该函数返回当前对象的 Proxy,并为每个属性添加 get 和 set 拦截器。以下是一个示例程序:

// 修改 HTMLElement 的原型,增加一个返回 Proxy 的方法
HTMLElement.prototype.getProxy=function() {
const handler={
get: (target, prop, receiver)=> {
console.log(`Getting property ${prop}`);
return Reflect.get(target, prop);
},
set: (target, prop, value, receiver)=> {
console.log(`Setting property ${prop} to ${value}`);
return Reflect.set(target, prop, value);
}
};
return new Proxy(this, handler);
};
document.addEventListener("DOMContentLoaded",()=>{
// 示例 HTML 元素
const div=document.createElement('div');
div.id='myDiv';
div.textContent='Hello, World!';
document.body.appendChild(div);
// 获取元素的 Proxy
const proxyDiv=div.getProxy();
// 访问和修改属性以触发拦截器
console.log(proxyDiv.id); // Getting property id
proxyDiv.textContent='Hello, Proxy!'; // Setting property textContent to Hello, Proxy!
})

如果属性的get、set方法由外部传入,可以定义一个map,存储拦截器信息。具体升级步骤如下:

  1. 创建代理对象:在 createProxy 方法中,我们使用 Proxy 创建一个代理对象,并在 get 和 set 拦截器中检查是否存在自定义的拦截函数。
  2. 添加拦截器:addInterceptor 函数用于向元素的 __proxyMap 中添加自定义的 getter 和 setter 函数。
  3. 示例代码:在 DOMContentLoaded 事件中,我们创建一个 div 元素,并为其 id 和 textContent 属性添加自定义的 getter 和 setter 函数。然后,通过调用 createProxy 方法获取代理对象,并访问和修改属性以触发拦截器。

内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!

大家好,我是大澈!

本文约 700+ 字,整篇阅读约需 1 分钟。

今天分享一段优质 JS 代码片段,实现在关闭或刷新浏览器窗口时做提示。

老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!

window.addEventListener('beforeunload', function (event) {
    const confirmationMessage="确定要离开此页面吗?您所做的更改可能不会被保存。";
 
    event.preventDefault();
    event.returnValue=confirmationMessage; 

    return confirmationMessage;
});


分享原因

这段代码展示了如何使用 JavaScript 的 beforeunload 事件来提示用户在关闭或刷新浏览器窗口时确认操作,从而避免意外的数据丢失或操作中断。

这种方法适用于 未保存的数据(如填写表单或编辑文档)、长时间操作(如文件上传或大规模数据处理)、敏感操作(如在线交易或重要系统设置)等场景。

项目中用到时直接CV,但对于用户体验而言,不宜过度使用。

代码解析

1. window.addEventListener('beforeunload', function (event) { ... })

为 window 对象添加一个 beforeunload 事件监听器。

当用户试图关闭或刷新浏览器窗口时,此事件将被触发。

2. event.preventDefault();

调用 event.preventDefault() 方法来阻止默认的浏览器行为。

在大多数情况下,这一步是冗余的,因为 beforeunload 事件默认不会执行任何动作,但这可以确保兼容性。

3. event.returnValue=confirmationMessage;

设置 event.returnValue 为 confirmationMessage 提示信息。

这是确保在大多数现代浏览器中显示确认对话框的关键步骤。

4. return confirmationMessage;

返回 confirmationMessage 提示信息。

在一些旧版浏览器中,这一步是必要的,以确保显示提示信息。

软计划在2020年1月15日正式发布新的Microsoft Edge浏览器,并决定通过Windows Update推出它,而不是手动下载它。

安装新的浏览器后,它将替换设备上现有的Microsoft Edge浏览器,这对许多人来说是一件好事,因为它将提供与网站的更大兼容性,并提高性能。

但是,对于使用为Microsoft Edge的EdgeHTML呈现引擎构建的网站的组织而言,这种强制安装可能是他们不想要的。

为了容纳这些企业用户,Microsoft发布了支持文档和称为Microsoft Edge Blocker Toolkit的工具,该工具可用于创建注册表值,该注册表值阻止新Microsoft Edge的自动交付。

“为帮助我们的客户变得更加安全和最新,Microsoft将通过Windows 10 RS4及更高版本的自动更新来分发Microsoft Edge(基于Chromium)。Blocker Toolkit适用于希望阻止自动交付Windows 10 RS4的组织。 Microsoft Edge(基于Chromium)连接到启用了自动更新的环境中的计算机。“阻止程序工具包”不会过期。”

Microsoft声明此注册表值仅在Windows 10 RS4(版本1803)或更高版本上可用,并且仅阻止使用Windows Update安装Microsoft Edge。

  • 对于运行Windows 10 RS4和更高版本的计算机,“阻止程序工具包”阻止计算机通过自动更新接收Microsoft Edge(基于Chromium)。
  • Blocker Toolkit不会阻止用户通过Internet下载或外部媒体手动安装Microsoft Edge(基于Chromium)。
  • 组织无需在使用更新管理解决方案(例如Windows Server Update Services或System Center Configuration Manager)管理的环境中部署Blocker Toolkit。组织可以使用这些产品在其环境中全面管理通过Windows Update和Microsoft Update(包括Microsoft Edge(基于Chromium))发布的更新的部署。

阻止程序工具包包括HTML指令,CMD脚本和组策略模板,这些模板可用于控制新Microsoft Edge浏览器的自动交付,我们将在下一部分中进行讨论。

Windows Update阻止安装

Microsoft已在Windows 10中添加了新的注册表值,该值阻止自动安装新的Microsoft Edge。

需要在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ EdgeUpdate项下创建此新值,并将其称为DoNotUpdateToEdgeWithChromium

如果将此值设置为1,Edge将通过Windows Update阻止,如果将其设置为0或丢失,Edge将被自动安装。

下面,我们提供了三种方法,用户可用来在Windows设备上创建此注册表值。

方法1:直接修改注册表

对于习惯于修改Windows注册表的用户,最简单的方法是手动创建或通过如下所示的注册表文件创建DoNotUpdateToEdgeWithChromium注册表值键。

Windows注册表编辑器版本5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ EdgeUpdate]
“ DoNotUpdateToEdgeWithChromium”=dword:00000001

要使用注册表文件进行更改,只需按照以下步骤操作:

  1. 打开记事本,然后将上述注册表文件的内容复制并粘贴到记事本中。
  2. 将文件另存为Windows桌面上的BlockAutoEdge.reg。
  3. 双击文件,然后让Windows合并数据。

这将导致 自动创建DoNotUpdateToEdgeWithChromium注册表值并将其设置为1,如下所示。

DoNotUpdateToEdgeWithChromium注册表值已创建

如果您不满意创建上述注册表文件,则可以从此处下载它。

方法2:使用Microsoft Edge阻止程序工具包

Microsoft已发布Microsoft Edge Blocker Toolkit,该工具包可在本地或远程计算机上自动创建注册表值。

要使用该工具,只需下载程序并执行以将附带的文件提取到文件夹中即可。提取的文件将由组策略模板,HTML指令和名为EdgeChromium_Blocker.cmd的CMD脚本组成。

要使用EdgeChromium_Blocker.cmd,请打开提升权限的命令提示符,将cd插入您解压缩文件的目录中,然后执行EdgeChromium_Blocker.cmd脚本以查看下面显示的帮助屏幕。

MICROSOFT TOOL KIT TO DISABLE DELIVERY OF
MICROSOFT EDGE (CHROMIUM-BASED)

Copyright (C) Microsoft Corporation.  All rights reserved.


This tool can be used to remotely block or unblock the delivery of
Microsoft Edge (Chromium-based) via Automatic Updates.

------------------------------------------------------------
Usage:
EdgeChromium_Blocker.cmd [machine name] [/B] [/U] [/H]
B=Block Microsoft Edge (Chromium-based) deployment
U=Allow Microsoft Edge (Chromium-based) deployment
H=Help

To block or unblock installation on the local machine use
period ("." with no quotes) as the machine name

Examples:
EdgeChromium_Blocker.cmd mymachine /B (blocks delivery on machine "mymachine")

EdgeChromium_Blocker.cmd /U (unblocks delivery on the local machine)
------------------------------------------------------------

要阻止Microsoft Edge的自动安装,您将执行“ EdgeChromium_Blocker.cmd / B ”命令。

要取消阻止Microsoft Edge的安装,请执行“ EdgeChromium_Blocker.cmd / U ”命令。

方法3:使用Edge组策略模板

可以用来阻止自动安装基于Chromium的Microsoft Edge的最终方法是下载并安装Microsoft Edge Blocker Toolkit。

解压缩文件后,将EdgeChromium_Blocker.adml文件复制到C:\ Windows \ PolicyDefinitions文件夹,将EdgeChromium_Blocker.admx文件复制C:\ Windows \ PolicyDefinitions \ en-us文件夹。

现在,您可以打开组策略编辑器,并且以下文件夹下提供了一个名为“不允许通过自动更新传递Microsoft(基于Chromium的)Microsoft”的新策略:

/Computer Configuration  
  /Administrative Templates
    /Windows Components
      /Windows Update  
        /Microsoft Edge (Chromium-based) Blockers  

可以在下面的策略编辑器中看到此新策略。

新的Microsoft Edge政策

启用后,组策略编辑器将自动将DoNotUpdateToEdgeWithChromium值添加到注册表中。