правильный синтаксис для объявления JavaScript "src" - PullRequest
2 голосов
/ 04 октября 2011

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 04 октября 2011

Issue # 1

Escape / Encoding

Когда анализатор 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(&quot;&lt;script src='links7.js?'+Math.random()+&gt;&lt;/script&gt;&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>

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

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

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

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

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

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

Issue # 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 голос
/ 04 октября 2011

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

<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, чтобы оно не мешало тегу scriptчто он войдет внутрь:

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

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

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

И тег сценария вокруг него:

<script type="text/javascript">
document.write('<script src="links7.js?' + Math.random() + '"></scr' + 'ipt>');
</script>
0 голосов
/ 04 октября 2011
<script type="text/javascript">
document.write("<script src='links7.js?" + Math.random() + "'></script>");
</script>

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

0 голосов
/ 04 октября 2011

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

document.write("<script src='links7.js?" + Math.random() + "'></script>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...