首页 > 解决方案 > 为什么我无法在 Javascript 中访问新添加的元素(模式弹出窗口),即使在开发者控制台中也是如此?

问题描述

我可能在这里遗漏了一些明显的东西,但我对 html 和 javascript 非常有经验,这让我很震惊。我正在为 Salesforce Lightning 用户编写浏览器插件。我想访问“新建联系人”屏幕中的表单字段。我的脚本不起作用,当我深入研究时,我发现了问题,我可以在开发工具中重现它:

我登录 Salesforce,单击联系人,然后单击新建。弹出一个新联系人窗口。

我右键单击表单字段(例如电话号码输入)并单击检查。我可以看到元素的 ID,例如“input-169”

<input type="text" id="input-169" maxlength="40" name="MobilePhone" class="slds-input">

我去控制台并输入

document.getElementById('input-169');

返回值为空。

如果我对在 New Contact 弹出窗口之前已经存在的元素执行此操作,则它可以正常工作。

如果我尝试其他方法来查找元素,例如 document.getElementsByTagName(),它也不会以这种方式显示,但在弹出窗口之前存在的其他元素都可以工作。

如果我通过编辑 html 在我想要的元素旁边添加我自己的元素(即在同一 DOM 级别),我可以成功访问该新元素,但仍然无法访问由弹出窗口添加的元素。

我可以在 Safari、Chrome 和 Firefox 中重现这一点。

发生了什么,有什么方法可以告诉浏览器注意弹出窗口中的元素?

标签: javascripthtmlsalesforce-lightning

解决方案


Salesforce.com Lightning 界面使用自定义元素Shadow Dom来构建其 UI。要访问不可见元素,您需要使用自定义元素的shadowRoot 属性


推荐阅读