As Magento 2 migrated away from Prototype I was expecting that this would be fixed in M2.
So, is there a way (easy or not) to move all the <script>
tags to the end of the <body>
tag instead of the <head>
?
javascriptlayoutmagento-2.1magento2performance
As Magento 2 migrated away from Prototype I was expecting that this would be fixed in M2.
So, is there a way (easy or not) to move all the <script>
tags to the end of the <body>
tag instead of the <head>
?
It depends on your request. For instance, lastly, I had been removed all Prototype scripts from the Homepage
of the Magento store which I didn't face any problem. But as I said, it depends on your theme, extensions etc.
To moving the script :
Find the following line in page.xml
of your theme
<block type="core/text_list" name="before_body_end" as="before_body_end" translate="label">
And insert the following just before :
<block type="page/html_head" name="jsfooter" as="jsfooter" template="page/html/jsfooter.phtml">
<action method="addJs"><script>your_script.js</script></action>
</block>
For Magento 1.9 use this:
<block type="page/html_head" name="jsfooter" as="jsfooter" template="page/html/jsfooter.phtml">
<action method="addItem"><type>skin_js</type><name>js/yourskinfile.js</name><params/></action>
</block>
Create the template file in app/design/frontend/[package]/[theme]/template/page/html/jsfooter.phtml and put the following
<?php echo $this->getCssJsHtml() ?>
Add below in your template just before closing </body>
tag.
<?php echo $this->getChildHtml('jsfooter') ?>
You can do it with layout
<referenceContainer name="before.body.end">
<block class="\Magento\Framework\View\Element\Template" template="You_Module::js.phtml" name="module_js"/>
</referenceContainer>
and in js.phtml
<script src="//cdn.javascrip.com/test.js" />
Best Answer
Create Module Company/DeferJS
registration.php
etc/module.xml
etc/frontend/events.xml
etc/adminhtml/system.xml
Model/Observer.php
Helper/Data.php
Block/System/Form/Field/Deferjs.php