Следующий код в lib/highlight_js.rb работает на некоторых доменах, но не на других:
def self.path
"/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end
У меня есть два сайта Discourse. Этот код работает на домене www.abc.com, но не работает на efg.com. В консоли браузера я вижу следующую ошибку:
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.
После изменения self.path в файле highlight_js.rb следующим образом:
def self.path
"https://#{Discourse.current_hostname}/highlight-js/#{Discourse.current_hostname}/#{version SiteSetting.highlighted_languages}.js"
end
проблема была решена.
Похоже, что использование относительного пути, такого как import('/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js'),
вызывает проблему CORS, тогда как использование абсолютного URL, import('https://efg.com/highlight-js/efg.com/9797975efac87d28baa695ae13ca72ccaf5120f5.js'), работает корректно.
Используете ли вы CDN на одном из этих сайтов? Я заметил, что подсветка кода перестала работать на моём сайте, и, думаю, это связано с этим:
В моём случае мой CDN не возвращает заголовок Access-Control-Allow-Origin для файла highlightjs. Я вижу, что CDN Meta включает этот заголовок, поэтому интересно, в чём разница.
В продолжение темы: я установил cdn_origin_hostname в обычное доменное имя моего экземпляра Discourse, очистил кэш CDN, и теперь highlightjs снова работает. Я не заметил никаких побочных эффектов…