假设我有一些简单的 Javascript,例如:
<script>
var hello = function(){
alert("Hello World!");
}
</script>
.. 在 helloworld.html 页面上。如果我使用 Pjax 将此脚本块加载到另一个页面中。如何执行函数 hello()?
假设我有一些简单的 Javascript,例如:
<script>
var hello = function(){
alert("Hello World!");
}
</script>
.. 在 helloworld.html 页面上。如果我使用 Pjax 将此脚本块加载到另一个页面中。如何执行函数 hello()?
出于安全原因,许多浏览器不会运行由 注入的 Javascript innerHTML
,我认为 Pjax 可能会使用它。(这是一个最小的例子。)
也许Pjax 的 issue #48中提出的解决方案会有所帮助
对我有用的是将我的 jQuery 代码放在一个函数中,在 document.ready 上正常调用它(对于非 pushState 浏览器),然后将该函数绑定到 pjax:end,即:
$('body').bind 'pjax:end', mainFunction
这可以通过 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)
})
}