防止 $.pjax 将动态脚本标签移动到头部
Prevent $.pjax from moving dynamic script tags to the head section
我们几个月前在 CodeIgniter 应用程序中实现了 $.pjax。它似乎工作完美。最近用户开始抱怨某些按钮有时会出现奇怪的行为。调试一段时间后,我们发现 PJAX 正在将脚本标签从新加载的片段移动到文档的头部。
这太棒了,你会想,因为标题和 css 资源也被移到了头部。我们可以从中受益(pushstate,浏览器选项卡名称,...)。
遗憾的是,单击另一个 pjax link 不会删除这些添加的 script/css 标签。当绑定到具有相同 id 或 class 的元素出现在其他新添加的脚本中时,这会变得很奇怪。它往往会破坏东西。
有谁知道如何删除之前添加的脚本标签(不是全部,只有那些由 pjax 添加的)?目前唯一的出路是放弃 pjax.. 但我非常喜欢它:(
正如这个问题的标题所暗示的,我们认为最简单的方法可能是首先阻止 $.pjax 将标签从片段移动到头部。
好久没问这个问题了。我们找到了解决此 pjax 行为的方法。
pjax 仅移动 'linked' javascript 和 css 源。当代码在in部分时,会停留在同一个地方,会执行一次部分内容添加到 DOM.
Github 一些人建议在 <script>
标签上使用 context="inline"
,不应将其移至 <head>
部分。
因此我们针对部分视图中的脚本的解决方案:
<script type="text/javascript" context="inline">
<?= file_get_contents(js_url().'controllers/'.$jsController.'.js'); ?>
</script>
显然,在使用 PHP 读取文件之前应该检查文件是否存在。
我们几个月前在 CodeIgniter 应用程序中实现了 $.pjax。它似乎工作完美。最近用户开始抱怨某些按钮有时会出现奇怪的行为。调试一段时间后,我们发现 PJAX 正在将脚本标签从新加载的片段移动到文档的头部。
这太棒了,你会想,因为标题和 css 资源也被移到了头部。我们可以从中受益(pushstate,浏览器选项卡名称,...)。
遗憾的是,单击另一个 pjax link 不会删除这些添加的 script/css 标签。当绑定到具有相同 id 或 class 的元素出现在其他新添加的脚本中时,这会变得很奇怪。它往往会破坏东西。
有谁知道如何删除之前添加的脚本标签(不是全部,只有那些由 pjax 添加的)?目前唯一的出路是放弃 pjax.. 但我非常喜欢它:(
正如这个问题的标题所暗示的,我们认为最简单的方法可能是首先阻止 $.pjax 将标签从片段移动到头部。
好久没问这个问题了。我们找到了解决此 pjax 行为的方法。
pjax 仅移动 'linked' javascript 和 css 源。当代码在in部分时,会停留在同一个地方,会执行一次部分内容添加到 DOM.
Github 一些人建议在 <script>
标签上使用 context="inline"
,不应将其移至 <head>
部分。
因此我们针对部分视图中的脚本的解决方案:
<script type="text/javascript" context="inline">
<?= file_get_contents(js_url().'controllers/'.$jsController.'.js'); ?>
</script>
显然,在使用 PHP 读取文件之前应该检查文件是否存在。