Lightning Web Security & Locker Tools

DEX475 - Get Started with Lightning Web Components

📄 第 5 页 🎬 视频课程

课程章节介绍

好的同学们,咱们今天来聊一聊 Lightning Web Security,也就是 LWS。 这是 Salesforce 在 2022 年春季推出的一套新的安全架构。它的核心思路是跟着最新的 Web 标准走,在一种虚拟的 JavaScript 沙箱里运行你的组件。 沙箱你可以想象成一个隔离的“安全盒子”,代码在里面跑,但不让它随便碰到外面不安全的东西。 那在 LWS 之前,我们用的是什么呢?就是更传统的 Locker Service,很多人也叫它 Locker。 Locker 是通过过滤 API 来实现组件隔离的,就是把你可能用到的浏览器 API 做一层安全的包装,只给你安全的那些部分。 而 LWS 是利用浏览器原生的安全机制,再套上一层虚拟沙箱,这样性能更好,也更贴近标准的 Web 开发体验。 不过不管是 LWS 还是 Locker,它们都有一个共同的规矩:强制开启 JavaScript 的严格模式。 也就是说,你不能用一些不安全的老写法,比如未声明的变量,这能帮我们提前发现很多问题。 在 Salesforce 平台上,有一点比较特殊,很容易踩坑。 就是在组件里用 `this.template.host` 拿到的永远是个空值,`null`。这和你在开源环境,也就是 OSS 里的行为不一样。 还有,如果你去访问组件模板检索出来的元素上的 `shadowRoot`,也会返回空。 这其实就是沙箱故意给你“屏蔽”掉了一些东西,为了安全嘛。 平时开发的话,如果你在用 LWS,就可以打开浏览器的 LWS 控制台,或者用 LWS 失真查看器来调试。 这里“失真查看器”其实是个翻译,英文是 Distortion Viewer,能让你看到沙箱对代码做了哪些改动。 如果你还在维护老项目,需要保证代码兼容 Locker,那就用 SYS 控制台和 SYS API 查看器,它们能帮你检查代码在 Locker 下的表现。 简单总结一下:LWS 是更现代、更标准的沙箱安全方案,而 Locker 是经典的 API 过滤方案。 无论用哪个,严格模式是跑不掉的,而且 `host` 和 `shadowRoot` 在平台上返回空是正常现象,用好对应的调试工具就行。 好了,这节课就到这儿,下次我们接着往下讲。

关键词

LWC Lightning Web Components Salesforce