RefenceError: UET is not defined
RefenceError: UET is not defined
我很难理解为什么这个 javascript 错误不断出现在我的网站上,而且我无法重现它。
我已经按照 bing 文档安装了他们的跟踪像素,所以我在我的 header 中有这个:
<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>
但是在某些浏览器中,此代码中的 UET 变量由作为 r
变量给出的 url 加载,似乎未定义,而仅在 url 已加载...
如果有人能在我联系 bing 之前理解它,我将非常感激!
Ad/tracker 阻塞。
如果用户阻止域 bat.bing.com
,则 UET
永远不会被定义。
例如,FireFox 控制台在访问有助于 Bing 跟踪同时阻止此类行为的网站时:
至于'fixing',我认为最合适的解决方法是忽略它*。如果您在 Sentry.io 或类似的地方看到它,则可以忽略单次出现而不是所有未定义的变量错误(当然您不想一揽子忽略)。
用户故意阻止它,错误是用户不可见的(无需打开控制台)所以无需担心。
*当然,您始终可以不为您的任何用户加载跟踪器;)
基于已接受的答案,我相信可能有一种方法可以防止这些错误。
你看到脚本中的 w[u]=new UET(o)
了吗?我们知道 w
意味着 window
那里。而 UET 是在全局范围内创建的对象(即在全局 window
对象上),因此它的存在可以用 window.UET
来测试(尝试 运行 window.UET
on在控制台加载和不加载脚本时,您将看到前一种情况 returns undefined
和后一种情况 returns 函数 function UET(o) {...}
。因此,从技术上讲,您可以更改将条件放在那里的脚本,如下所示:
if(w.UET){w[u]=new w.UET(o)}
这是我尝试将相对神秘的外观 <script>
解构为更具可读性的函数调用,以便更好地了解那里发生的事情(如果你像我一样在 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);
我很难理解为什么这个 javascript 错误不断出现在我的网站上,而且我无法重现它。 我已经按照 bing 文档安装了他们的跟踪像素,所以我在我的 header 中有这个:
<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>
但是在某些浏览器中,此代码中的 UET 变量由作为 r
变量给出的 url 加载,似乎未定义,而仅在 url 已加载...
如果有人能在我联系 bing 之前理解它,我将非常感激!
Ad/tracker 阻塞。
如果用户阻止域 bat.bing.com
,则 UET
永远不会被定义。
例如,FireFox 控制台在访问有助于 Bing 跟踪同时阻止此类行为的网站时:
至于'fixing',我认为最合适的解决方法是忽略它*。如果您在 Sentry.io 或类似的地方看到它,则可以忽略单次出现而不是所有未定义的变量错误(当然您不想一揽子忽略)。
用户故意阻止它,错误是用户不可见的(无需打开控制台)所以无需担心。
*当然,您始终可以不为您的任何用户加载跟踪器;)
基于已接受的答案,我相信可能有一种方法可以防止这些错误。
你看到脚本中的 w[u]=new UET(o)
了吗?我们知道 w
意味着 window
那里。而 UET 是在全局范围内创建的对象(即在全局 window
对象上),因此它的存在可以用 window.UET
来测试(尝试 运行 window.UET
on在控制台加载和不加载脚本时,您将看到前一种情况 returns undefined
和后一种情况 returns 函数 function UET(o) {...}
。因此,从技术上讲,您可以更改将条件放在那里的脚本,如下所示:
if(w.UET){w[u]=new w.UET(o)}
这是我尝试将相对神秘的外观 <script>
解构为更具可读性的函数调用,以便更好地了解那里发生的事情(如果你像我一样在 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);