javascript - 当 css 显示无阻止时对象标记重新加载

标签 javascript events object svg load

我有一个 html 页面,其中包含一个包含 svg 对象的对象标记。每次包含 div 上的显示从无更改为 block 时,svg 对象都会重新加载。这会导致为 svg 对象生成加载事件。这种情况在 Chrome 中会发生,但在 Firefox 中不会。

这是 Chrome 中的错误,还是正确的行为?我知道浏览器有时会推迟加载,直到元素可见,但我认为它们不应该在每次显示更改时重新加载。我知道我可以使用visibility=hidden,但这是一个大型遗留库的一部分,该库具有许多样式依赖项,因此更改起来并不容易。

这是一个演示该问题的最小代码片段(在 Chrome 上)。我在 Windows 7 上使用 chrome 39。

<body>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
    $(document).ready(function () {
        var toggle = 0;
        $('#button').on('click', function () {
            if (toggle % 2 == 0) {
                $('#www').css('display', 'none');
            } else {
                $('#www').css('display', 'block');
            }
            toggle++;
        });
    });
</script>
<div id="www">
<object id="ggggg" name="ggggg" type="image/svg+xml" data="http://upload.wikimedia.org/wikipedia/commons/b/b0/NewTux.svg" width="583" height="471">    </object>
</div>
<input type="button" value="abcd" id="button"/>
</body>

最佳答案

我不确定这是否是一个错误。我不认为 CSS 定义了当显示设置为 none 时浏览器应该如何处理缓存的资源。这里的一位浏览器开发人员可能知道。

但是,您可以尝试其他选择:

  1. 将对象移出页面,例如。 (position:absolute;左:-9999px;}
  2. 折叠对象,例如。 {宽度:0;高度:0}

关于javascript - 当 css 显示无阻止时对象标记重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27230412/

相关文章:

javascript - 如何在 jquery 中拖动可拖动时禁用页面滚动?

javascript - 尝试将数据放入 MongoDB 时无法读取未定义的属性 'insert'

asp.net - 您多久使用一次自定义事件?

javascript - 是否可以从对象中删除最后一个属性(按字母顺序)?

javascript - 如果所选数字小于时钟中的当前时间,如何禁用数字

javascript - 循环遍历同一类的元素集,并在事件更改时按顺序添加/删除类

javascript - TouchEnd 结束后开始事件

javascript - 警告 Vue Js 中未保存的更改

javascript - 从嵌套的对象数组递归更改特定属性

java - Gson 不将 JSONarray 元素转换为类对象