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

时间:2012-06-29 22:53:33

标签: javascript pjax

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

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

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

2 个答案:

答案 0 :(得分:1)

出于安全原因,许多浏览器都不会运行由innerHTML注入的Javascript,我认为这是Pjax可能使用的。 (Here's a minimal example.)

也许Pjax's issue #48中提出的解决方案会有所帮助

  

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

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

答案 1 :(得分:1)

这可以通过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)
  })
}