在SilverStripe页脚之后插入JavaScript

ssg*_*est 6 javascript silverstripe phaser-framework

为什么我的JavaScript出现在页脚之后?下面是我在布局中的代码(Page.ss):

<% include SideBar %>
<div class="content-container unit size3of4 lastUnit">
    <article>
    <h1>$Title</h1>
        <div class="content">
            <script type="text/javascript">
                window.onload = function() {
                    var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create });
                    function preload() {
                        game.load.image('logo', 'phaser.png');
                    }
                    function create() {
                        var logo = game.add.sprite(game.world.centerX, game.world.centerY, 'logo');
                        logo.anchor.setTo(0.5, 0.5);
                    }
                };
            </script>
        </div>
    </article>
    $Form
    $CommentsForm
</div>
Run Code Online (Sandbox Code Playgroud)

3dg*_*goo 3

默认情况下,SilverStripe 在页面主体底部包含所有 JavaScript 文件。这是为了允许在加载任何 JavaScript 之前加载所有其他站点资源。

如果布局中有脚本标记或包含模板,它会将脚本移动到正文标记的底部。

如果您不想移动脚本标记,可以在函数中设置Requirements.write_js_to_body为 falsePage_Controller init()

class Page_Controller extends ContentController {

    public function init() {
        parent::init();

        Requirements::set_write_js_to_body(false);
    }

}
Run Code Online (Sandbox Code Playgroud)

请注意,这会将您的所有要求(包括 JavaScript 文件)移至该<head>标记。