未捕获的语法错误:意外的标记^(匿名函数)

Uncaught SyntaxError: Unexpected token ^ (anonymous function)

本文关键字:函数 意外 语法 错误      更新时间:2023-09-26

我试图通过创建脚本标记并通过innerHtml属性插入代码来创建和运行一些JS代码,但我一直收到以下错误消息:

未捕获的语法错误:意外的标记^(匿名函数)(行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>

正则表达式在字符串文字(" k.src = /^https?:'/'/([^'/]+'.))中没有正确转义:必须用''替换'

但正确的解决方案不是逃避它,而是停止用javascript字符串文字编写javascript代码。有很多方法可以在页面中动态插入脚本,例如使用AJAX。

错误来自您试图解析为javascript的巨大字符串,错误就在那里。