我正在运行一个脚本(hack)来欺骗Safari,使其正确地调整响应页面上的视频大小。下面的脚本等待片刻,然后隐藏,然后显示一个视频,导致Safari意识到它应该将视频扩展到适当的大小。
我担心$(document).ready可能会太快地启动脚本(即在加载视频之前),从而导致脚本不做它应该对视频做的事情。是否有可能使用$(document).ready脚本触发,但是由于视频没有在设置的毫秒之后加载,视频就不会被隐藏/显示?
我应该使用window.onload (或者其他方法吗?)而是为了确保我的隐藏/显示大小攻击有效?
在我的测试中,这个脚本大部分都能工作,甚至在清除缓存时重新加载时也是如此。但是有几次,当我在随机计算机上加载页面时,在重新加载页面之前,视频的大小将是不正确的。使用window.onload似乎不太理想,因为当页面内容加载时,用户可能会注意到错误大小的视频,或者在页面内容加载后看到黑客的动作。
<script><!-- Super hack to toggle display block/none which tricks Safari into properly sizing video-->
$(document).ready(function() {
$("#video1").delay(3000).hide(0, function() {
$("#video1").delay(3500).show();
});
});
</script>发布于 2016-02-07 17:57:08
以下是这两个事件之间的区别:
window.onload是在加载了所有内容(即媒体和样式表)之后触发的。这是一个DOM事件$(document).ready()是在加载了HTML之后触发的(即最后一个结束标记已经加载,媒体和样式表可能还没有加载)。这个事件在技术上是jQuery特有的,但是,如果是aailiabe,jQuery实际上使用DOMContentLoaded DOM事件。然而,jQuery确实有一个事件,只有在加载了所有媒体之后才会触发,$(document).load(),但是这是从1.8开始就不再推荐的了。
如果希望在视频加载之前运行代码,请使用$(document).ready()
如果希望在视频加载后运行代码,请使用window.onload或$(document).load()。
要回答你的评论:
如果视频在延迟结束之前已经加载(总计到
7.5 seconds),那么您的黑客就可以工作了。 即使视频没有加载,HTML元素仍然存在,因此可以在加载视频之前隐藏和显示它(虽然我不确定黑客是否仍然工作,但它取决于Safari如何以及何时决定视频的大小)。 显然,如果没有加载视频,隐藏和显示不会在视觉上改变任何东西,因为元素是空的/没有内容。
https://stackoverflow.com/questions/35227044
复制相似问题