Chrome XMLSerializer.serializeToString在进程脚本标记上有一个错误[已关闭]

e5njpo68  于 2023-08-01  发布在  Go
关注(0)|答案(2)|浏览(89)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
12天前关闭。
Improve this question

const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
foreignObject.appendChild(document.createElement('script'))
svg.appendChild(foreignObject);
new XMLSerializer().serializeToString(svg)
// "<svg xmlns=\"http://www.w3.org/2000/svg\"><foreignObject><script xmlns=\"http://www.w3.org/1999/xhtml\"></script></foreignObject></svg>"

代码字符串<script>变成\x3Cscript></script>变成\x3C/script>,结果不对,我怎么能解决这个问题?
游猎也很好
safari
chrome
use createElemetNS for all elemtes
this is strange in chrome
this is strange in chrome 2

0ve6wy6x

0ve6wy6x1#

没有问题,这只是Chrome向您显示信息的方式。
请注意,在您的屏幕截图中,输出是如何被'字符包围的。
这是因为Chrome通过将其呈现为字符串字面量来告诉您该值是字符串。
在字符串中,\x3C表示<
转义字符的使用是为了使它可以被复制/粘贴到HTML <script>元素中,而不会使字符串文字中的序列</script>过早地触发HTML脚本元素的结束。
您可以通过将最后一行替换为:

const src = new XMLSerializer().serializeToString(svg);
const pre = document.createElement("pre");
pre.textContent = src;
document.body.appendChild(pre);

字符串

lokaqttq

lokaqttq2#

输出构建的SVG

const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
foreignObject.appendChild(document.createElement('script'));
svg.appendChild(foreignObject);
let output = new XMLSerializer().serializeToString(svg);
document.body.innerHTML = output.replaceAll("<","&lt;");

字符串

const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
foreignObject.appendChild(document.createElement('script'));
svg.appendChild(foreignObject);
let output = new XMLSerializer().serializeToString(svg);
document.body.textContent = output;

相关问题