javascript - 为什么我无法在 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 中重现这一点。
发生了什么,有什么方法可以告诉浏览器注意弹出窗口中的元素?
解决方案
Salesforce.com Lightning 界面使用自定义元素和Shadow Dom来构建其 UI。要访问不可见元素,您需要使用自定义元素的shadowRoot 属性。
推荐阅读
- ruby - 域对象是否应该由事件处理程序聚合创建
- jquery - 当表格单元格太长时,有什么方法可以减少表格单元格中的文本?
- c# - ASP.net web 方法,重写 URL
- c# - 正则表达式在带引号的括号之间获取字符串
- android - Room with RxJava - 使用每个项目的数据加入列表查询
- javascript - (Chrome 扩展程序)在页面 addEventListener 之前从扩展程序执行某些操作
- react-native - undefined 不是对象(评估 _react.default.PropTypes.func)
- angularjs - md-datepicker 似乎无法识别 md-max-date 属性
- r - 创建函数以使用列索引向量将因子转换为字符串
- android - ViewPager2 异常:java.lang.IllegalStateException:违反设计假设