Le code suivant dans lib/highlight_js.rb fonctionne sur certains domaines mais pas sur d’autres :
def self.path
"/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end
J’ai deux sites Discourse. Ce code fonctionne sur le domaine www.abc.com, mais il ne fonctionne pas sur efg.com. Dans la console du navigateur, je vois l’erreur suivante :
formatter.js:383 Uncaught (in promise) TypeError: Failed to resolve module specifier '/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js'. The base URL is about:blank because import() is called from a CORS-cross-origin script.
Après avoir modifié self.path dans highlight_js.rb comme suit :
def self.path
"https://#{Discourse.current_hostname}/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end
le problème a été résolu.
Il semble que l’utilisation d’un chemin relatif comme import('/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js')
provoque un problème CORS, tandis que l’utilisation d’une URL absolue, import('https://efg.com/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js') , fonctionne bien.
Utilisez-vous un CDN sur l’un de ces sites ? J’ai remarqué que la coloration du code ne fonctionne plus sur mon site, et je pense que c’est à cause de ceci :
Dans mon cas, mon CDN ne renvoie pas d’en-tête Access-Control-Allow-Origin pour le fichier highlightjs. Je remarque que le CDN de Meta inclut cet en-tête, je me demande donc ce qui est différent.
Oui, j’utilise un CDN sur efg.com, mais lorsque j’accède au fichier js, il me renvoie un Access-Control-Allow-Origin correct, ce qui me laisse assez perplexe.
Pour faire suite, j’ai défini cdn_origin_hostname sur le nom de domaine normal de mon instance Discourse, j’ai vidé le cache du CDN, et maintenant highlightjs fonctionne à nouveau. Je n’ai pas remarqué d’effets secondaires…