html脚本reload,javascript-避免使用第三方脚本的window.location.reload()

我在页面上使用了第三方脚本(Adobe DTM,可用于标记管理),这导致以下问题:

我注意到我的页面是在第一次完全加载后立即重新加载的(在下一次加载中,不再发生),这归咎于此功能,该功能出现在DTM标签加载的一个脚本中在我的HTML中.

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(),但是存在以下问题:

>曾经是第三方加载的脚本(脚本标记指向在页面加载期间加载其他脚本的URL),我无法手动对其进行编辑.

>我无法阻止用户通过F5手动重新加载页面.

我已经尝试了以下jQuery代码,但无法正常工作:

$(window).bind("beforeunload",function(e){

e.preventDefault();

});

考虑到所描述的情况,有没有一种形式可以防止程序性重新加载?

解决方法:

关键是Oe.targetJSLoaded.找出大江是什么.尝试从Ne函数开始遵循调用堆栈.

例如,Harbor Freight中的代码与您的代码相似:

TNT.a.ge = function (he, ie, Tb, nc, Ub) {

if (!ie.targetJSLoaded) {

Ub.setCookie(Tb, true, nc);

he.location.reload();

}

};

在您的函数和Harbor Freight的函数中,我们希望targetJSLoaded为true.

环顾四周,我们发现TNT.a.ge由TNT.a.je调用,而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函数.

标签:html,javascript,jquery

来源: https://codeday.me/bug/20191027/1942795.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值