diff --git a/includes/common.inc b/includes/common.inc
index 34fa9b9..44ceb49 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -4432,9 +4432,16 @@ function drupal_get_js($scope = 'header', $javascript = NULL, $skip_alter = FALS
     switch ($item['type']) {
       case 'setting':
         $js_element = $element;
-        $js_element['#value_prefix'] = $embed_prefix;
-        $js_element['#value'] = 'jQuery.extend(Drupal.settings, ' . drupal_json_encode(drupal_array_merge_deep_array($item['data'])) . ");";
-        $js_element['#value_suffix'] = $embed_suffix;
+        $js_element['#attributes'] = array(
+            // This type attribute prevents this from being parsed as an
+            // inline script.
+            'type' => 'application/json',
+            'data-drupal-selector' => 'drupal-settings-json',
+        );
+        $js_element['#value'] = drupal_json_encode(drupal_array_merge_deep_array($item['data']));
+        $output .= theme('html_tag', array('element' => $js_element));
+        $js_element = $element;
+        $js_element['#attributes']['src'] = file_create_url('misc/drupal-settings-loader.js') . $query_string_separator .  REQUEST_TIME;
         $output .= theme('html_tag', array('element' => $js_element));
         break;
 
diff --git a/misc/drupal-settings-loader.js b/misc/drupal-settings-loader.js
new file mode 100644
index 0000000..dae2c2a
--- /dev/null
+++ b/misc/drupal-settings-loader.js
@@ -0,0 +1,13 @@
+/**
+ * @file
+ * Parse inline JSON and initialize the drupal.settings global object.
+ */
+(function ($) {
+
+  var settingsElement = document.querySelector('script[type="application/json"][data-drupal-selector="drupal-settings-json"]');
+
+  if (settingsElement !== null) {
+    DrupalSettings = JSON.parse(settingsElement.textContent);
+    jQuery.extend(Drupal.settings, DrupalSettings);
+  }
+})(jQuery);
