问题是在用户端运行的某些插件(或其他第三方)会影响我的网站;更改脚本,替换某些元素或以某种方式损害用户的体验。
我想要做的是阻止特定的js文件(来自我熟悉的其他服务器)被加载或仅允许我的脚本文件加载到我的网站上。
我知道我可以在加载之后从dom中删除特定的脚本标记,但这不能解决问题,因为代码会粘在内存中并且无论如何都会运行。
有没有办法最初编写一个页面来执行此操作?
答案 0 :(得分:0)
通过覆盖范围的“appendChild”函数解决了这个问题,但将其保存为不同的函数名。
在重写的“appendChild”函数中,我添加了条件以确保没有具有某个阻塞源(来自数组列表)的脚本将执行原始的“appendChild”函数。
希望能够清除它。
var blockedUrlsArr = [
'someUrl/malicious1.js',
'someUrl/malicious2.js',
'someUrl/malicious3.js'
];
function checkBlockedUrls(url) {
var result = false;
for (var i = 0; i < blockedUrlsArr.length; i++) {
if (url.indexOf(blockedUrlsArr[i]) !== -1) {
result = true;
break;
}
}
return result;
}
var originalAppendChild = Element.prototype.appendChild;
Element.prototype.appendChild = function () {
if (arguments[0].tagName.toLowerCase() === 'script') {
if (!checkBlockedUrls(arguments[0].src)) originalAppendChild.apply(this, arguments);
}
else originalAppendChild.apply(this, arguments);
};