Firefox 在附加到 iframe 中时删除 Web 组件属性
Firefox removes web component properties when appended inside iframe
我正在尝试在 iframe 中附加带有 属性 myprop
的 Web 组件 DOM 节点 comp
。
const frame = document.createElement('iframe')
frame.src = 'about:blank'
frame.addEventListener('load', _ => {
console.log(comp.myprop) // "abc"
frame.contentDocument.body.appendChild(comp)
console.log(comp.myprop) // undefined in Firefox, "abc" in Chrome, Safari
})
这在 Chrome 和 Safari 中完美运行。但是,在将 comp
附加到 iframe 的主体后,Firefox 似乎删除了 myprop
。
您可以尝试将 comp.myprop 的值存储在一些不同的变量中,并在将 comp 添加到 iframe 后在 comp 上重新分配它。像这样:
frame.addEventListener('load', _ => {
console.log(comp.myprop);
var propStorage = comp.myprop;
frame.contentDocument.body.appendChild(comp);
//You might need to add if(comp.myprop === undefined) here
comp.myprop = propStorage;
console.log(comp.myprop);
})
Chrome 和 Firefox 对自定义元素定义范围的解释不同。
使用 Chrome,当您将自定义元素从主文档移动到内部 <iframe>
时,它仍然是一个(已定义的)自定义元素及其所有方法和属性。
对于 Firefox,当您将自定义元素从主文档移动到内部 <iframe>
时,由于框架隔离,自定义元素在框架的上下文中未定义,该元素是 未知 没有自定义 属性 或自定义方法的标签。
我正在尝试在 iframe 中附加带有 属性 myprop
的 Web 组件 DOM 节点 comp
。
const frame = document.createElement('iframe')
frame.src = 'about:blank'
frame.addEventListener('load', _ => {
console.log(comp.myprop) // "abc"
frame.contentDocument.body.appendChild(comp)
console.log(comp.myprop) // undefined in Firefox, "abc" in Chrome, Safari
})
这在 Chrome 和 Safari 中完美运行。但是,在将 comp
附加到 iframe 的主体后,Firefox 似乎删除了 myprop
。
您可以尝试将 comp.myprop 的值存储在一些不同的变量中,并在将 comp 添加到 iframe 后在 comp 上重新分配它。像这样:
frame.addEventListener('load', _ => {
console.log(comp.myprop);
var propStorage = comp.myprop;
frame.contentDocument.body.appendChild(comp);
//You might need to add if(comp.myprop === undefined) here
comp.myprop = propStorage;
console.log(comp.myprop);
})
Chrome 和 Firefox 对自定义元素定义范围的解释不同。
使用 Chrome,当您将自定义元素从主文档移动到内部 <iframe>
时,它仍然是一个(已定义的)自定义元素及其所有方法和属性。
对于 Firefox,当您将自定义元素从主文档移动到内部 <iframe>
时,由于框架隔离,自定义元素在框架的上下文中未定义,该元素是 未知 没有自定义 属性 或自定义方法的标签。