如何将特殊字符插入 HTML iframe 文档?

How do I insert special characters to an HTML iframe document?

我正在尝试将 JavaScript 添加到 HTML 沙盒 iframe。 JavaScript 代码包含一个奇怪的字符。 当代码在 iframe 之外 运行 时,它可以完美运行。 不幸的是,Stack Overflow 无法显示此字符。

<!DOCTYPE html>
    <body>
        <script>
            console.log("Special character: ''")
        </script>
    </body>
</html>

现在我想使用 srcdoc 将此代码插入到沙箱 iframe 中。

<!DOCTYPE html>
    <body>
        <iframe sandbox = "allow-scripts" srcdoc = "<!DOCTYPE html><body><script>console.log(Special character: '')</script></body></html>"></iframe>
    </body>
</html>

当我在 Firefox 网络浏览器中 运行 上面的代码时,它有时会在控制台中显示该字符。 在其他时候,它会引发错误:Uncaught SyntaxError: invalid range in character class。 这很奇怪的主要原因是每次的结果都不一样。 这让我想知道这是否是 Firefox 的错误。请说明原因。

在这上面花了很多时间之后,我决定采用另一种方法。

<!DOCTYPE html>
    <body>
        <iframe id = frame sandbox = "allow-scripts allow-same-origin"></iframe>

        <script>
            const content = frame.contentWindow || frame.contentDocument
            content.document.open()
            content.document.write("<!DOCTYPE html><body><script>console.log(Special character: '')<\/script></body></html>")
            content.document.close()
        </script>
    </body>
</html>

这一次,我得到了一个不同的错误:missing ) after argument list。我知道没有括号丢失。导致问题的是特殊字符。

最后,我尝试了别的东西。

<!DOCTYPE html>
    <body>
        <iframe id = frame sandbox = "allow-scripts allow-same-origin"></iframe>

        <script>
            const content = frame.contentWindow || frame.contentDocument
            content.document.open()
            content.document.write("<!DOCTYPE html><body></body></html>")
            content.document.close()

            content.eval("console.log(Special character: '')")
        </script>
    </body>
</html>

上面的代码有时有效,有时无效。 这非常令人沮丧。 上面代码的另一个问题是我必须在 iframe 沙箱中包含 allow-same-origin,我希望 iframe 尽可能安全并且我真的不想给 iframe 太多控制权。

这只是 Firefox 的一个错误吗?即使我不能在控制台显示这个字符,如何保证不出现错误?

编辑: Stack Overflow 不断从我的 post 中删除该字符。 这里是 fiddle 而不是。

感谢您的宝贵意见。 这不是 Firefox 的错误。 当您处理特殊字符时,您不能将它们直接粘贴为普通 HTML。另外,我犯了一个大错误。我正在编写以下代码。

<!DOCTYPE html>
    <body>
        <iframe access = "allow-scripts" srcdoc = "<!DOCTYPE html><body><script>console.log(Special character: '')</script></body></html>"></iframe>
    </body>
</html>

如果仔细观察,您会发现我在 console.log 函数中遗漏了引号。这导致了 JavaScript 错误。 JavaScript charCodeAt() 函数对于获取字符代码很有用,@Old Geezer 帮助我理解了这一点。

有了字符码后,就可以写HTML码了。

<!DOCTYPE html>
    <body>
        <iframe access = "allow-scripts" srcdoc = "<!DOCTYPE html><body><script>console.log(&#34;Special character: '&#28;'&#34;)</script></body></html>"></iframe>
    </body>
</html>

上面的代码运行没有任何错误。字符在不同浏览器上显示不同这一事实不是问题,因为这个特定字符没有可见的字形。