"Impossible de lire la propriété" appendChild 'of null "avec le site Disqus on Backbone

J'ai un site Web sur Backbone. Lorsque j'essaie d'exécuter le code Disqus, je reçois

Uncaught TypeError: Impossible de lire la propriété 'appendChild' of null

Comment puis-je le réparer? Pourquoi cela arrive-t-il?

var disqus_shortname = 'mysite'; /* * * DON'T EDIT BELOW THIS LINE * * */ (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); 

console:

 undefined embed.js:1 Unsafe attempt to redefine existing module: BASE embed.js:1 Unsafe attempt to redefine existing module: apps embed.js:1 Unsafe attempt to redefine existing module: get ... embed.js:1 Unsafe attempt to redefine existing module: configAdapter embed.js:1 Unsafe attempt to redefine existing module: removeDisqusLink embed.js:1 Unsafe attempt to redefine existing module: loadEmbed embed.js:1 Unsafe attempt to redefine existing module: reset embed.js:1 Uncaught TypeError: Cannot read property 'appendChild' of null 

Il semble que votre document manque à la fois d'une head et d'un body pour une raison quelconque.

Essaye ça:

 (function() { var dsq = document.createElement('script'); var head = document.getElementsByTagName('head')[0]; var body = document.getElementsByTagName('body')[0]; dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js'; console.log('head', head); console.log('body', body); (head || body).appendChild(dsq); }()); 

Ensuite, regardez dans la console.

Pour ceux qui viennent de trouver cela en 2015, en plus de se produire lorsque "head" ou "body" est manquant, cette erreur se produira lorsque vous ne disposez pas de div parmi les pages suivantes dans votre page:

 <div id="disqus_thread"></div> 

Mettez cette div où vous voulez que le thread Disqus apparaisse réellement.

J'ai résolu comme ceci:

 // Only if disqus_thread id is defined load the embed script if (document.getElementById('disqus_thread')) { var your_sub_domain = ''; // Here goes your subdomain var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + your_sub_domain + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); } 

Thx to @boutell et @June pour l'indice.