0

Я пытаюсь включить Javascript-файл в мой макет Rails, только если он не был загружен из CDN, например, в чистом Javascript я бы сделал следующее:Rails, условно, включая Javascript, если не загружен?

<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script> 
<script> 
    window.Modernizr || document.write('<script src="assets/js/modernizr.2.6.2.min.js"><\/script>'); 
</script> 

Как я могу это сделать, используя конвейер Rails?

Я попытался это,

<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script> 
<script> 
    window.Modernizr || document.write('<%= javascript_include_tag "modernizr-2.6.2" %>'); 
</script> 

Но это написано, как,

<script> 
     window.Modernizr || document.write('<script src="/assets/modernizr-2.6.2.js?body=1"></script> 

Который затем каким-то образом попадает в мое тело HTML и листьев, "');" в моем теле тега. Таким образом, тег не закрыт должным образом.

Кто-нибудь знает, как заставить это работать?

+0

Да, пример не будет работать, поскольку Rails уже обработал шаблон до того, как вы приступите к написанию тега javascript-include в документе. Что произойдет, если вы используете свой оригинальный скрипт (первый пример), делает ли он то, что вам нужно? –

+0

Это скорее жесткий путь к активу, который кажется опасным. –

+0

Хм, да пересматриваю ваш пример вывода - похоже, что он делает что-то странное. То, что вы хотите, это тег ... но закодирован, поэтому обратная косая черта не является реальной косой чертой? вы посмотрели на необработанный html, или вы смотрите на него с помощью firebug (или equiv)? (ваш браузер может «помочь» с интерпретацией здесь ... не то, что он будет работать в любом случае ... но было бы хорошо убедиться, что мы ясно знаем, что появляется из тега javascript rails. есть способ сохранить строку где-то раньше и ускользнуть от нее в этот момент? ... просто спекулировать. –

ответ

0

Для достижения желаемого результата используйте вспомогательный помощник escape_javascript.

Чтобы использовать пример:

<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script> 
<script> 
    window.Modernizr || document.write('<%= j(javascript_include_tag("modernizr-2.6.2")) %>'); 
</script> 

j() является псевдонимом escape_javascript() и выглядит аккуратнее.

Надеюсь, это поможет.

Смежные вопросы