diff --git a/lib/blocklib.php b/lib/blocklib.php
index 54f08a8c8a2..58855e72293 100644
--- a/lib/blocklib.php
+++ b/lib/blocklib.php
@@ -993,7 +993,7 @@ class block_manager {
*
* @param string $region The name of the region to check
*/
- protected function ensure_content_created($region, $output) {
+ public function ensure_content_created($region, $output) {
$this->ensure_instances_exist($region);
if (!array_key_exists($region, $this->visibleblockcontent)) {
$contents = array();
diff --git a/lib/outputrenderers.php b/lib/outputrenderers.php
index 033471ba740..da3dbc73be9 100644
--- a/lib/outputrenderers.php
+++ b/lib/outputrenderers.php
@@ -345,6 +345,16 @@ class core_renderer extends renderer_base {
*/
public function standard_head_html() {
global $CFG, $SESSION;
+
+ // Before we output any content, we need to ensure that certain
+ // page components are set up.
+
+ // Blocks must be set up early as they may require javascript which
+ // has to be included in the page header before output is created.
+ foreach ($this->page->blocks->get_regions() as $region) {
+ $this->page->blocks->ensure_content_created($region, $this);
+ }
+
$output = '';
$output .= '' . "\n";
$output .= '' . "\n";