O seguinte código em lib/highlight_js.rb funciona em alguns domínios, mas não em outros:
def self.path
"/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end
Tenho dois sites Discourse. Este código funciona no domínio www.abc.com, mas não funciona em efg.com. No console do navegador, vejo o seguinte erro:
formatter.js:383 Uncaught (in promise) TypeError: Failed to resolve module specifier '/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js'. A URL base é about:blank porque import() é chamado de um script CORS-cross-origin.
Após modificar self.path em highlight_js.rb da seguinte forma:
def self.path
"https://#{Discourse.current_hostname}/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end
o problema foi resolvido.
Parece que usar um caminho relativo como import('/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js')
causa um problema de CORS, enquanto usar uma URL absoluta, import('https://efg.com/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js') , funciona bem.
Você está usando uma CDN em algum desses sites? Notei que a coloração de código não está mais funcionando no meu site, e acho que é por causa disso:
No meu caso, minha CDN não está retornando um cabeçalho Access-Control-Allow-Origin para o arquivo highlightjs. Notei que a CDN do Meta inclui esse cabeçalho, então me pergunto o que é diferente.
Sim, estou usando um CDN em efg.com, mas quando acesso o arquivo js ele me retorna um Access-Control-Allow-Origin correto, o que me deixa bastante confuso.
Como acompanhamento, defini cdn_origin_hostname para o nome de domínio normal da minha instância do Discourse, limpei o cache do CDN e agora o highlightjs está funcionando novamente. Eu ainda não notei nenhum efeito colateral…