次のような単純な 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の問題#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)
})
}