阻止$ .pjax将动态脚本标记移动到头部

时间:2015-09-09 14:09:50

标签: javascript jquery pjax html-head

几个月前,我们在CodeIgniter应用程序中实现了$ .pjax。而且似乎工作得很完美。最近用户开始抱怨有些按钮有时会有奇怪的行为。调试一段时间后,我们发现PJAX正在将脚本标签从新加载的片段移动到文档的head部分。

这很好,你会想,因为标题和CSS资源也被移到了头上。我们可以从中受益(pushstate,浏览器选项卡名称,......)。

可悲的是,单击另一个pjax链接不会删除这些添加的脚本/ css标记。当绑定到具有相同id或类的元素存在于其他新添加的脚本中时,这可能会变得奇怪。它往往会破坏事物。

是否有人知道如何删除早期添加的脚本标记(并非所有脚本标记,只有那些仅由pjax添加的标记)?目前唯一的出路是放弃pjax ..但我非常喜欢它:(

正如这个问题的标题所示,我们认为最简单的方法可能是防止$ .pjax首先将标签从片段移动到头部。

1 个答案:

答案 0 :(得分:0)

我提出这个问题已经有一段时间了。我们找到了这种pjax行为的解决方法。

pjax仅移动'链接'的javascript和css源。当代码为 部分代码时,一旦将部分内容添加到DOM,它将保持在同一位置并将执行

在Github上,有人建议在不应移至context="inline"部分的<script>代码上使用<head>

所以我们的部分视图中的脚本解决方案:

<script type="text/javascript" context="inline">
    <?= file_get_contents(js_url().'controllers/'.$jsController.'.js'); ?>
</script>

显然,在使用PHP阅读之前,应检查文件是否存在。