Il seguente codice in lib/highlight_js.rb funziona su alcuni domini ma non su altri:
def self.path
"/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end
Ho due siti Discourse. Questo codice funziona sul dominio www.abc.com, ma non funziona su efg.com. Nella console del browser, vedo il seguente errore:
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.
Dopo aver modificato self.path in highlight_js.rb come segue:
def self.path
"https://#{Discourse.current_hostname}/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end
il problema è stato risolto.
Sembra che l’utilizzo di un percorso relativo come import('/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js')
causi un problema CORS, mentre l’utilizzo di un URL assoluto, import('https://efg.com/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js') , funzioni correttamente.
Stai utilizzando una CDN su uno di questi siti? Ho notato che l’evidenziazione del codice non funziona più sul mio sito e penso che sia a causa di questo:
Nel mio caso, la mia CDN non restituisce un’intestazione Access-Control-Allow-Origin per il file highlightjs. Noto che la CDN di Meta include tale intestazione, quindi mi chiedo cosa sia diverso.
Come seguito, ho impostato cdn_origin_hostname sul normale nome di dominio della mia istanza Discourse, ho svuotato la cache CDN e ora highlightjs funziona di nuovo. Non ho notato effetti collaterali…