是否可以执行使用 pjax 检索到的 Javascript 代码

Is it possible to execute Javascript code that was retrieved using pjax?

本文关键字:检索 Javascript 代码 pjax 执行 是否      更新时间:2023-09-26

假设我有一些简单的Javascript,比如:

<script>
    var hello = function(){
        alert("Hello World!");
    }
</script>

.. 在页面上 你好世界.html.如果我使用 Pjax 将此脚本块加载到另一个页面中。如何执行函数 hello()?

出于安全原因,许多浏览器不会运行innerHTML注入的Javascript,我认为Pjax可能会使用。(下面是一个最小示例。

也许Pjax的问题#48中提出的解决方案会有所帮助

对我有用的是将我的jQuery代码放在一个函数中,调用它 通常在document.ready上(对于非pushState浏览器),然后绑定 pjax:end的函数,即:

$('body').bind 'pjax:end', mainFunction

这在 PJAX 中是可能的。您只需要具有类型为 text/javascript 的脚本标记。

来自 PJAX 库的代码:

function executeScriptTags(scripts) {
  if (!scripts) return
  var existingScripts = $('script[src]')
  scripts.each(function() {
    var src = this.src
    var matchedScripts = existingScripts.filter(function() {
      return this.src === src
    })
    if (matchedScripts.length) {
      matchedScripts.remove();
    }
    console.error("FOUND SCRIPTS", scripts, matchedScripts.length);
    var script = document.createElement('script')
    script.type = $(this).attr('type')
    script.src = $(this).attr('src')
    document.head.appendChild(script)
  })
}