diff --git a/src/common/contentScriptsUtils.js b/src/common/contentScriptsUtils.js
index 00bc556..cb7a67d 100644
--- a/src/common/contentScriptsUtils.js
+++ b/src/common/contentScriptsUtils.js
@@ -13,5 +13,5 @@
 export function injectScript(scriptName) {
   var script = document.createElement('script');
   script.src = scriptName;
-  document.head.appendChild(script);
+  (document.head || document.documentElement).append(script);
 }
diff --git a/src/common/protojs.js b/src/common/protojs.js
new file mode 100644
index 0000000..026559b
--- /dev/null
+++ b/src/common/protojs.js
@@ -0,0 +1,13 @@
+// Function which converts a protobuf array into an array which can be accessed
+// as if it was a protobuf object (with the same keys). If the input is not an
+// array it returns itself (since it is called recursively).
+export function correctArrayKeys(input) {
+  if (!Array.isArray(input)) return input;
+
+  let object = [];
+  for (let i = 0; i < input.length; ++i) {
+    if (input[i] === null) continue;
+    object[i + 1] = correctArrayKeys(input[i]);
+  }
+  return object;
+}
diff --git a/src/common/xhrInterceptorUtils.js b/src/common/xhrInterceptorUtils.js
index 867c323..526296c 100644
--- a/src/common/xhrInterceptorUtils.js
+++ b/src/common/xhrInterceptorUtils.js
@@ -1,3 +1,5 @@
+import {correctArrayKeys} from '../common/protojs';
+
 import xhrInterceptors from './xhrInterceptors.json5';
 
 export {xhrInterceptors};
@@ -10,25 +12,30 @@
 }
 
 export function getResponseJSON(xhr) {
+  let response;
   if (xhr.responseType === 'arraybuffer') {
     var arrBuffer = xhr.response;
     if (!arrBuffer) {
       console.error('No array buffer.');
       return undefined;
     }
-    var byteArray = new Uint8Array(arrBuffer);
-    var dec = new TextDecoder('utf-8');
-    var rawResponse = dec.decode(byteArray);
-    return JSON.parse(rawResponse);
+    let byteArray = new Uint8Array(arrBuffer);
+    let dec = new TextDecoder('utf-8');
+    let rawResponse = dec.decode(byteArray);
+    response = JSON.parse(rawResponse);
+  } else if (xhr.responseType === 'text' || xhr.responseType === '') {
+    response = JSON.parse(xhr.responseText);
+  } else if (xhr.responseType === 'json') {
+    response = xhr.response;
+  } else {
+    console.error(
+        'Unexpected responseType ' + xhr.responseType + '. Request url: ',
+        xhr.$TWPTRequestURL);
+    return undefined;
   }
-  if (xhr.responseType === 'text' || xhr.responseType === '')
-    return JSON.parse(xhr.responseText);
-  if (xhr.responseType === 'json') return xhr.response;
 
-  console.error(
-      'Unexpected responseType ' + xhr.responseType + '. Request url: ',
-      xhr.$TWPTRequestURL);
-  return undefined;
+  if (xhr.$isArrayProto) response = correctArrayKeys(response);
+  return response;
 }
 
 export function triggerEvent(eventName, body, id) {
