2012-06-29 48 views
2

比方说,我有一些简单的Javascript,如:是否可以执行使用pjax检索的Javascript代码?

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

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

+1

那么,如果你检索到了AJAX(其中,本质上,是PJAX是什么)并将其插入到你的DOM,脚本标签将执行上注射。你是这个意思吗? – Utkanos

+0

@Utkanos我已经尝试将脚本块插入到DOM中,但它似乎并未执行。 – Sam

+0

您将块作为HTML插入,而不是文本,对不对?前者应该肯定会执行 - 对我来说。 – Utkanos

回答

1

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

也许在Pjax's issue #48提出的解决方案将帮助

什么工作对我来说是放在一个功能我jQuery代码,把它 常开的document.ready(非pushState的浏览器),和然后绑定 的功能pjax:端,即:

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

该解决方案似乎指的是“没有办法在'后退按钮'触发器上调用pjax成功处理程序”。 – Sam

0

这是可能与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) 
    }) 
} 
相关问题