2013-11-21 6 views
-1

Я пытаюсь создать и запустить некоторые JS кода путем создания тега сценария и вставки кода с помощью свойства innerHtml, но я получаю следующее сообщение об ошибке:Uncaught SyntaxError: Неожиданный маркер^(анонимная функция)

Uncaught SyntaxError: Unexpected token^(anonymous function) (line 50)

Линия 50, где я добавляю тег к телу.

body.appendChild(krux); 

Может ли кто-нибудь просмотреть мой код и сообщить мне, могут ли они обнаружить какие-либо ошибки? Я использую эту технику с множеством других сторонних тегов и до сих пор не имел никаких проблем.

Спасибо!

<!DOCTYPE html> 
<html> 
<body> 
<head> 
    <title>Example Page</title> 
</head> 

<script> 
    var body = document.getElementsByTagName("body")[0]; 
    var krux = ""+ 
      "window.Krux || ((Krux=function(){Krux.q.push(arguments);}).q=[]);"+ 
      "(function(){"+ 
      " function retrieve(n){"+ 
      "  var m, k='kx'+n;"+ 
      "  if (window.localStorage) {"+ 
      "   return window.localStorage[k] || '';"+ 
      "  } else if (navigator.cookieEnabled) {"+ 
      "   m = document.cookie.match(k+'=([^;]*)');"+ 
      "   return (m && unescape(m[1])) || '';"+ 
      "  } else {"+ 
      "   return '';"+ 
      "  }"+ 
      " }"+ 
      ""+ 
      " Krux.user  = retrieve('user');"+ 
      " Krux.segments = retrieve('segs') ? retrieve('segs').split(',') : [];"+ 
      ""+ 
      " var dfpp = [];"+ 
      " if (Krux.user) {"+ 
      "  dfpp.push('khost=' + encodeURIComponent(location.hostname));"+ 
      "  dfpp.push('kuid=' + Krux.user);"+ 
      " }"+ 
      " for (var i = 0; i < Krux.segments.length; i++) {"+ 
      "  dfpp.push('ksg=' + Krux.segments[i]);"+ 
      " }"+ 
      " Krux.dfppKeyValues = dfpp.length ? dfpp.join(';') + ';' : '';"+ 
      "})();"+ 
      ""+ 
      "(function(){"+ 
      " var k=document.createElement('script');k.type='text/javascript';k.async=true;"+ 
      " var m,src=(m=location.href.match(/\bkxsrc=([^&]+)/))&&decodeURIComponent(m[1]);"+ 
      " k.src = /^https?:\/\/([^\/]+\.)?krxd\.net(:\d{1,5})?\//i.test(src) ? src : src === 'disable' ? '' : "+ 
      "  (location.protocol==='https:'?'https:':'http:')+'//cdn.krxd.net/controltag?confid=IkIevuhg';"+ 
      " var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(k,s);"+ 
      "}());"; 

    var script  = document.createElement("script"); 
    script.type  = "text/javascript"; 
    script.innerHTML = krux; 
    body.appendChild(script); 
</script> 
</body> 
</html> 
+3

Зачем вам это делать, а не просто запускать сценарий? – qwertynl

+0

Ваше регулярное выражение неправильно экранировано в строковом литерале ('' k.src =/^ https?: \/\/([^ \ /] + \.) '). Но решение не должно его избегать но прекратить писать javascript-код в литеральном литерале javascript –

+0

@qwertynl прав. Это слишком сложно для отладки. – karthikr

ответ

1

Ваше регулярное выражение не правильно экранировано в строковом литерале (" k.src = /^https?:\/\/([^\/]+\.)): вы должны заменить \ на \\.

Но правильное решение заключается не в том, чтобы избежать его, а в том, чтобы прекратить писать javascript-код в литеральной строке javascript. Существует много способов динамически вставить скрипт на страницу, например, с помощью AJAX.

-1

Ошибка возникает из-за огромной строки, которую вы пытаетесь проанализировать как javascript, ошибки там.

+0

* «вам нужно исправить это, вывести линию полностью, и ваша ошибка должна исчезнуть». Необходимо полностью изменить дизайн своего приложения. Наличие js-кода в большом строковом литерале не поддерживается, даже если оно исправлено. –

+0

@dystroy Я знаю это, поэтому я этого не делаю. – iConnor

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