javascript - 在 iFrame 中定义 customElements 会引发“DOMException:不支持操作”。为什么?
问题描述
我想将自定义元素定义添加到我的 iFrame。
在主浏览器窗口中,定义工作得很好:
customElements.define("custom-tag", customTag)
然后将定义移动到 iFrame 后,我得到DOMException: operation not supported
. 该功能存在,但不受支持。
iFrame.contentWindow.customElements.define("custom-tag", customTag);
这有什么特别的原因吗?定义自定义标签是否在 iFrame 中被设计阻止并且无法解决,或者我应该在 iFrame 配置中包含一些内容以允许这种“不安全”行为?
解决方案
如果要将主 HTML 文档中的自定义元素注入到<iframe>
元素中,可以将其添加到<script>
元素中。
例如,通过srcdoc
属性:
frame.srcdoc = `
<script>
class customTag extends HTMLElement {
constructor() {
super()
this.attachShadow( { mode: 'open' } )
.innerHTML = "Hello World"
}
}
customElements.define( 'custom-tag', customTag )
<\/script>
<custom-tag></custom-tag>
`
<iframe id=frame></iframe>
\
请注意结束</script>
标记中的转义字符。
推荐阅读
- variables - 将变量的多个值设置为“选项”
- python - 如何使用自定义值在 2D 画布上栅格化 2D 点?
- python - 神经网络的两步训练
- python - 如何使客户端和服务器在 docker 的用户定义网络中相互通信?
- sql - 当信息存储在辅助表中时,如何在 SQL 中查询页面的最新版本?
- javascript - 如何在 React 中仅将 css 应用于此组件?
- sql - 不能在 MariaDB 中使用 UDF 作为约束
- c# - 在跨平台 C# .NET 应用程序中导出到 Excel 电子表格
- objective-c - Xcode Build 日志中的“Register MyApp.app”是什么意思?
- c - clock_nanosleep,中断和进程唤醒之间的时间测量