[A] 我正在使用出色的Highslide脚本打开一个模态窗口(通过其内置的 AJAX 功能)。
[B] 所以我将使用“main”来指代顶部/主页,并使用“insert”来描述插入到“main”中的页面。
[C] 正在加载到 Highslide 窗口的“插入”页面包含 4 个外部脚本,我必须在模式展开时运行这些脚本。
[D] 脚本包含在“插入”页面的底部——就在</body>
标签之前——因为 AJAX 模式会导致 Highslide 忽略该<head>
部分。
[E] 所以我的脚本看起来像这样:
<script src="/js/jquery-1.7.1.min.js"></script>
<script src="/js/jQuery.thumbfx.js"></script>
<script src="/js/jQuery.easing.js"></script>
<script src="/js/jquery.masonry.min.js"></script>
<script>
$(function(){var $container = $('#IMAGES');$container.imagesLoaded( function(){$container.masonry({itemSelector : '.BLOCK',columnWidth: 200,isFitWidth: true,gutterWidth: 0});});});
</script>
</body>
[F] Highslide 在“主”页面的头部被激活——并且通过包含下面的代码,它应该在获取和展开模式窗口时触发这些脚本。
hs.Expander.prototype.onAfterExpand = function() {
var scripts = this.content.getElementsByTagName('script');
for (var i = 0; i < scripts.length; i++) {
eval(scripts[i].innerHTML);
}
};
[G] 问题有两个...首先:我似乎无法激活所有脚本。Masonry 在这种情况下工作得很好,但我根本无法让 ThumbFX 工作。 第二:在尝试解决这个问题时,我发现 eval() 是邪恶的,应该像狂热的僵尸一样避免它。
问题:有没有更好(更安全)的函数可以在该hs.Expander.prototype.onAfterExpand
事件中运行——也许一个实际上适用于所有脚本的函数?
谢谢你。
编辑: 顺便说一句......我的路径是正确的,当我直接进入“插入”页面时,我可以让所有脚本完美运行。但只有当“插入”页面由 Highslide 进行 AJAX 处理时,Masonry 才能工作。再次感谢。