2

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

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

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

4

2 回答 2

1

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

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

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

$('body').bind 'pjax:end', mainFunction
于 2012-06-29T23:02:28.890 回答
1

这可以通过 PJAX 实现。您只需要使用 type 的 script 标签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)
  })
}
于 2014-01-26T02:45:09.570 回答