svg 中的 javascript 奇怪行为

标签 javascript svg

以下 html 代码有效(Chrome 44、Firefox 37):

<svg width="100" height="100">

    <script>
        function test() {
            var l= [0,1,2,3];
            console.log(l.length);
        }
    </script>

    <text x="20" y="20" onclick="test()">CLICK ME</text>

</svg>

但这不是:

<svg width="100" height="100">

    <script>
        function test() {
            var l= [0,1,2,3];
            console.log(l.length);
            /*for (var i=0; i<l.length; i++) {
	        console.log(i);
            }*/
          }
    </script>

    <text x="20" y="20" onclick="test()">CLICK ME</text>

</svg>

svg 文本标签“点击我”甚至都不可见。唯一的区别是注释代码! 有什么问题?

最佳答案

用你的浏览器你可以看到这是如何解析的,在 Chrome 上我有这个结果

enter image description here

其实这不是因为评论 block /*但因为 <在解释为 HTML 的 for 循环中使用 <l.length>

您可以使用 CDATA 避免 HTML 解析器解析这段代码

<svg width="100" height="100">

    <script><![CDATA[
        function test() {
            var l= [0,1,2,3];
            console.log(l.length);
            /*for (var i=0; i<l.length; i++) {
	        console.log(i);
            }*/
          }
    ]]></script>

    <text x="20" y="20" onclick="test()">CLICK ME</text>

</svg>

发生这种情况是因为这 <script> 元素与 HTML 中定义的元素不完全相同。它还提供与不支持脚本语言的浏览器的兼容性,因此符合 W3C它需要被转义。

关于svg 中的 javascript 奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32142070/

相关文章:

javascript - 为选项卡的其余部分着色

javascript - 资源被解释为文档,但在Chrome控制台中因MIME类型音频/mpeg错误传输,导致无法播放声音

svg - 在 Jupyter Notebook 中使用 svg-pan-zoom

css - 剪辑路径 url 找不到 id

javascript - 带有 SVG 数据 URI 的 img 将不会在 Firefox 中显示

javascript - 在图像和文本之间切换

javascript - 组合框更改复选框启用

php - json对象与ajax返回数组的用法

css - 如何将 CSS 定位应用于 SVG 路径上的特定点

javascript - 直接从 Javascript 代码访问 SVG 文件