我在我的网页上使用第三方脚本(Adobe DTM,对标记管理有用),这会导致以下问题:
我注意到我的页面在第一次完全加载后正在重新加载(在下一次加载时,它不再发生),并且责备在这个函数上,出现在其中一个脚本上由我的HTML中的DTM标记加载。
function Ne(Oe, Gc, nc, Ic) {
if (Oe.targetJSLoaded) {
return;
}
Ic.setCookie(Gc, true, nc);
window.location.reload(); //in the first page load, this line is always executed
}
如果脚本超过5000行并且它被混淆了,那么很难弄清楚脚本会发生什么。
我需要阻止执行window.location.reload()
,但我遇到以下问题:
我已尝试使用以下jQuery代码,但它不起作用:
$(window).bind("beforeunload",function(e){
e.preventDefault();
});
考虑到所描述的情况,是否有表格可以防止编程重新加载?
答案 0 :(得分:2)
不幸的是,您唯一的解决方案是修改脚本,然后替换DTM标记,使其指向您自己的版本(可能在此过程中破坏它),或者只是停止使用Adobe DTM。任何需要重新加载页面的跟踪设计都不是很好。
答案 1 :(得分:2)
关键是Oe
。找出Ne
是什么。尝试从TNT.a.ge = function (he, ie, Tb, nc, Ub) {
if (!ie.targetJSLoaded) {
Ub.setCookie(Tb, true, nc);
he.location.reload();
}
};
函数开始执行调用堆栈。
例如,Harbor Freight的代码与您的代码类似:
targetJSLoaded
在您的函数和Harbor Freight的功能中,我们希望true
为TNT.a.ge
。
环顾四周,我们发现TNT.a.je
调用了TNT.a.je(window, document, b, H, Ub);
,它由匿名函数调用,如下所示:
TNT.a.je
在ie.targetJSLoaded
中,我们推断window._AT.targetJSLoaded
是指window._AT.targetJSLoaded
。
定义属性以覆盖true
为function overrideTargetJsLoaded(_AT) {
Object.defineProperty(_AT, "targetJSLoaded", {
value: true,
enumerable: true,
configurable: true
});
return _AT;
}
function override_AT() {
let _AT = overrideTargetJsLoaded({});
Object.defineProperty(window, "_AT", {
get: function get_AT() {
return _AT;
},
set: function set_AT(object) {
_AT = overrideTargetJsLoaded(object);
},
enumerable: true,
configurable: true
});
}
:
targetJSLoaded
现在,您需要在执行任何其他脚本之前覆盖override_AT
,因此您需要在网页上的所有其他脚本之前放置调用private async Task<String> getRawPostData()
{
using (var contentStream = await this.Request.Content.ReadAsStreamAsync())
{
contentStream.Seek(0, SeekOrigin.Begin);
using (var sr = new StreamReader(contentStream))
{
return sr.ReadToEnd();
}
}
}
函数的脚本。
答案 2 :(得分:0)
只要您不需要以编程方式在其他地方重新加载页面,您就可以尝试覆盖该功能。
window.location.reload = function(){}