правильный синтаксис для объявления javascript «src»

#javascript

#javascript

Вопрос:

пытаюсь добавить метод math.random() в мое встроенное объявление js, чтобы предотвратить кэширование связанного файла javascript.

Проблема в том, что я продолжаю получать синтаксические ошибки. Я думаю, что я близок, но мои усилия по отладке оказываются тщетными. Код выглядит следующим образом:

 <script type="text/javascript">
document.write("<script src='links7.js?' Math.random() ></script>");
</script>
  

есть предложения?

Ответ №1:

Проблема # 1

Экранирование / кодирование

Когда анализатор HTML найдет <script> , он начнет анализировать содержимое, пока не найдет </script> , что присутствует в:

 document.write("<script src='links7.js?' Math.random() ></script>
  

Таким образом, вам нужно будет изменить исходный код, чтобы он не анализировался как конец элемента скрипта:

 document.write("<script src='links7.js?' Math.random() ></scri"   "pt>");
  

В идеале, у вас должен быть HTML, экранирующий весь ваш встроенный код JavaScript, что также смягчит эту проблему:

 document.write(amp;quot;amp;<script src='links7.js?' Math.random() amp;>amp;</scriptamp;>amp;quot;);
  

Но, честно говоря, это очень быстро раздражает.

Лучшим средством экранирования всего содержимого символов в ваших встроенных JavaScripts является использование CDATA элемента (символьные данные):

 <script type="text/javascript">
  <![CDATA[
  document.write("<script src='links7.js?' Math.random() ></script>");
  ]]>
</script>
  

Конечно, поскольку CDATA элемент находится внутри <script> элемента, анализатор JS пытается выполнить его как код и не знает, что делать с подобным синтаксисом < ! [ CDATA [ , поэтому, чтобы обойти эту проблему, вам нужно обернуть CDATA элемент в комментарий JS:

 <script type="text/javascript">
  //<![CDATA[
  -or-
  /* <![CDATA[ */

  //]]>
  -or-
  /* ]]> */
</script>
  

Я рекомендую вторую форму, используя многострочные комментарии, чтобы не было никаких проблем с вашим кодом, если пробелы по каким-либо причинам ошибочно обрабатываются (я видел некоторые системы управления контентом, которые переводят новые строки в своих редакторах расширенного текста).

Еще одно предостережение CDATA : CDATA элемент, как script и элемент, перестает переносить свое содержимое при первом знаке его закрывающего тега ( ]]> ) , поэтому будьте осторожны, чтобы не писать что-то вроде:

 lorem = ipsum[dolor[sit]]>amet;
  

потому что это убьет ваш CDATA элемент.

Чтобы избежать всех этих проблем, храните свои JavaScripts во внешних .js файлах, где они принадлежат, когда это возможно.

Я понимаю, что для простых однострочников может быть предпочтительнее избегать внешнего файла, и в этом случае вам следует использовать <![CDATA[ ]]> элемент или даже HTML, экранирующий ваш JavaScript.

Проблема # 2

Цитата

Строка, которую вы предоставили document.write :

 document.write("<script src='links7.js?' Math.random() ></script>");
  

неправильно отформатирован для выполнения чего-либо, кроме определения статической строки <script src='link7.js?'Math.random() ></script> .

Если вы хотите выполнить Math.random() , вам нужно иметь строку до и строку после:

 '<script src="links7.js?'   Math.random()   '"></script>'
  

Вы можете заметить, что я поменял местами использование ' и " . Обычно мне нравится видеть " используемые в HTML атрибуты и ненавижу необходимость экранировать " литералы, поэтому я использую ' строковые литералы как можно чаще в JS.

Кроме того, вы должны заметить открывающую и закрывающую кавычки для src атрибута. DOM может дать хорошее представление о том, когда и где заканчивается атрибут, но не нажимайте на него на случай, если это приведет к некоторой поломке в вашем коде.

Комментарии:

1. Ах, я всегда удивлялся, почему все используют строки из двух частей для </script> тегов.

2. но разве мне не пришлось бы обернуть это в тег script? <script type=»text/javascript»> document.write(«<script src=’links7.js?’ Math.random() ></script> </script>

3. Кроме того, другая проблема с вашим кодом заключается в том, что у вас есть неправильные кавычки в вашей строке, построенной с использованием document.write . Убедитесь, что вы используете хороший текстовый редактор с подсветкой синтаксиса, чтобы вы могли видеть, когда вы правильно экранировали строку, а когда нет.

4. Я думаю, что это должно быть что-то вроде этого, потому что я получаю ошибки синтаксического анализа с другими предложениями.

5. Это потрясающе. Устранены синтаксические и синтаксические ошибки. Спасибо за информацию. Очень признателен.

Ответ №2:

Шаг за шагом:
начните с того, как вы хотите, чтобы код выглядел:

 <script src="links7.js?89736459827345"></script>
  

Затем поместите его в литеральную строку:

 '<script src="links7.js?89736459827345"></script>'
  

Изолируйте случайную часть в отдельной строке:

 '<script src="links7.js?'   '89736459827345'   '"></script>'
  

Замените случайную часть случайным выражением:

 '<script src="links7.js?'   Math.random()   '"></script>'
  

Поместите что-нибудь в закрывающий тег сценария, чтобы он не мешал тегу сценария, в который он войдет:

 '<script src="links7.js?'   Math.random()   '"></scr'   'ipt>'
  

Поместите его в document.write вызов:

 document.write('<script src="links7.js?'   Math.random()   '"></scr'   'ipt>');
  

И тег script вокруг него:

 <script type="text/javascript">
document.write('<script src="links7.js?'   Math.random()   '"></scr'   'ipt>');
</script>
  

Ответ №3:

У вас проблема с открытыми / закрытыми кавычками. Попробуйте:

 document.write("<script src='links7.js?"   Math.random()   "'></script>");
  

Ответ №4:

 <script type="text/javascript">
document.write("<script src='links7.js?"   Math.random()   "'></script>");
</script>
  

Предложение: используйте IDE с подсветкой кода.