Javascript RefenceError:未定义UET

Javascript RefenceError:未定义UET,javascript,bing,tracking-pixel,Javascript,Bing,Tracking Pixel,我很难理解为什么这个javascript错误一直出现在我的网站上,而我无法重现它。 我已经按照bing文档安装了他们的跟踪像素,因此我的标题中有: <script> (function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){ var o={ti:"xxxxxxxx"};o.q=w[u],w[u]=new UET(o), w[u].push("pageLoad")},n=d.c

我很难理解为什么这个javascript错误一直出现在我的网站上,而我无法重现它。 我已经按照bing文档安装了他们的跟踪像素,因此我的标题中有:

  <script>
    (function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){
      var o={ti:"xxxxxxxx"};o.q=w[u],w[u]=new UET(o),
              w[u].push("pageLoad")},n=d.createElement(t),n.src=r, n.async=1,
            n.onload=n.onreadystatechange=function(){var s=this.readyState;
              s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)},
            i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})
    (window,document,"script","//bat.bing.com/bat.js","uetq");
  </script>

(函数(w,d,t,r,u){var f,n,i;w[u]=w[u]| |[],f=function(){
变量o={ti:xxxxxxxx};o.q=w[u],w[u]=新的UET(o),
w[u].push(“pageLoad”)},n=d.createElement(t),n.src=r,n.async=1,
n、 onload=n.onreadystatechange=function(){var s=this.readyState;
s&&s!=“已加载”&&s!=“已完成”| |(f(),n.onload=n.onreadystatechange=null)},
i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})
(窗口,文档,“脚本”,“bat.bing.com/bat.js”,“uetq”);
但是,在某些浏览器中,代码中的UET变量(由作为
r
变量给定的url加载)似乎没有定义,而它仅在加载url时调用

如果有人能在我接触bing之前理解它,我将非常感激

Ad/跟踪器阻塞

如果用户阻止域
bat.bing.com
,则永远不会定义
UET

例如,FireFox控制台在访问有助于Bing跟踪的网站时会阻止以下内容:


至于“修复”它,我认为最合适的修复方法是忽略它*。如果您在Sentry.io或类似文件中看到它,那么可以忽略单个事件,而不是所有未定义的变量错误(当然,您不希望忽略这些错误)

用户故意阻止了它,并且用户看不到错误(不打开控制台),因此无需担心


*当然,您始终不能为任何用户加载跟踪器;)

基于公认的答案,我相信可能有一种方法可以防止这些错误

你看到脚本中的
w[u]=newuet(o)
位了吗?我们知道
w
意味着
window
。UET是在全局范围(即在全局
窗口
对象)上创建的对象,因此可以使用
窗口测试它的存在性。UET
(尝试在控制台上运行
window.UET
,无论是否加载脚本,您都会看到前一种情况返回
undefined
,后一种情况返回一个函数
function UET(o){…}
。因此,从技术上讲,您可以更改脚本,将条件放在那里,如下所示:

if(w.UET){w[u]=new w.UET(o)}
以下是我试图将相对神秘的
解构为更具可读性的函数调用,以更好地了解那里正在发生的事情(如果您像我一样在SPA中使用它,这也可能很方便):


非常感谢,这实际上是我一直在寻找的答案;)非常有魅力!
function initMicrosoftUET(
  w,
  d,
  t = "script",
  r = "//bat.bing.com/bat.js",
  u = "uetq"
) {
  var f, n, i;
  w[u] = w[u] || [];

  f = function () {
    var o = { ti: "xxxxxxxx" };
    o.q = w[u];
    if (w.UET) w[u] = new w.UET(o) || [];
    w[u].push("pageLoad");
  }

  n = d.createElement(t);
  n.src = r;
  n.async = 1;
  n.onload = n.onreadystatechange = function () {
    var s = this.readyState;

    (s && s !== "loaded" && s !== "complete") || f();

    n.onload = n.onreadystatechange = null;
  }

  i = d.getElementsByTagName(t)[0];
  i.parentNode.insertBefore(n, i);
};

initMicrosoftUET(window, document);