如果您曾经使用过 OpenCart,并且您是正确标记和优化的忠实拥护者,那么您已经知道*它是多么痛苦。
整个模板都有内联js,因为它依赖于模板中的php变量来执行js。
我目前正在开发 OC 的 HTML5 分支,它将所有这些废话从模板中移出,并将所有链接的 js 文件移动到它们应该在的页面底部。
问题是有一个客户现在想要这个,并且正确移动所有这些脚本需要数周时间,所以我试图找到一种可靠的方法来推迟内联脚本,以便它只会在所有文件都执行后执行加载在底部。
我尝试在 script 标签上使用 defer,但 Chrome 仍然会在找到它后立即执行它,我想大多数其他浏览器也会这样做。
例如这里的轮播模块:
<div id="carousel<?php echo $module; ?>" class="es-carousel-wrapper">
<div class="es-carousel">
<ul>
<?php foreach ($banners as $banner) { ?>
<li>
<a href="<?php echo $banner['link']; ?>">
<img src="<?php echo $banner['image']; ?>"
alt="<?php echo $banner['title']; ?>"
title="<?php echo $banner['title']; ?>" />
</a>
</li>
<?php } ?>
</ul>
</div>
</div>
<script type="text/javascript" defer>
$('#carousel<?php echo $module; ?>').elastislide({
speed : 450,
easing : '',
imageW : 290,
<?php if ($limit > 3): ?>
minItems : <?php echo $scroll; ?>
<?php else: ?>
minItems : 1
<?php endif ?>
});
$(window).triggerHandler('resize.elastislide');
</script>
如您所见,将其保留在模板页面中并仅使用 php 中的变量要容易得多,显然正确的方法是将变量实现到 js 中并稍后调用它们,这就是我为另一个客户端所做的,但这需要很长时间。
有没有一种可靠的方法可以使用 defer 来实现这一点?
谢谢。
-文斯