删除外部不需要的部分 JavaScript

Removing an unwanted part of an external JavaScript

我实际上是这样在我的页面上加载外部 JavaScript:

<script type='text/javascript' src='http://somedomain.com/somescript.php'></script>

注意:它是一个 PHP 文件,但它会生成并返回一个 JavaScript 代码

但是,脚本有两部分 - 这是我需要的第一部分:

document.getElementById('latest').innerHTML= "the lastest version of product";

这是第二个,这是不需要的,我需要摆脱它:

var img = document.createElement("img");
img.src = "http://somedomain.com/tracking.php";
document.getElementsByTagName("body")[0].appendChild(img);

我怎样才能在发送数据之前删除这张跟踪用户的图像,但保持最新版本的显示不变。

我不确定它是否有效,而且它是一个 hack,但你可以尝试使用 try catchconstconst 可能适用于 firefox 和 chrome,您需要 polyfill 用于 safari 和旧版浏览器。

<script>
const img = '';
try {
    var script = document.createElement('script');
    script.src = 'http://somedomain.com/somescript.php';
    document.body.appendChild(script);
} catch (err) {}
</script>

通过定义全局常量,它应该在分配变量时抛出一个错误,然后我们对它不做任何处理来处理错误,所以在抛出错误之前的部分仍然应该被加载而不会中断其余部分脚本。

我在评论中提到了这一点,但我认为实现您所要求的唯一方法是 AJAX 加载脚本(如果服务器允许)并解析出有问题的代码。这似乎过于复杂和容易出错,而且近乎不道德。我建议您联系脚本的主机 somedomain.com 并询问他们是否可以提供没有图像跟踪器的版本。如果他们拒绝,那么你应该尊重他们的意愿。毕竟,您想要的是他们的内容(脚本的第一部分),他们完全有权指定您使用它的义务。如果您不喜欢他们的条款,请不要使用他们的内容。

(顺便说一句,我并不是说图像跟踪器是个好东西。我鄙视它们。)

类似于 Michael 的解决方案,应该可以通过先 运行 一些代码来防止 javascript 执行。如果您 运行 在添加脚本之前执行以下操作:

document.getElementsByTagName("body")[0].appendChild = function() {};

他们的脚本将无法将图像添加到 dom。如果您需要自己使用该方法,请先将其分配给不同的变量。或者试试:

var oldMethod = document.getElementsByTagName("body")[0].appendChild;
document.getElementsByTagName("body")[0].appendChild = function(node) {
    if (node.src !== "http://somedomain.com/tracking.php") {
        oldMethod(node);
    }
}

你试过了吗CSS?

<head>
<style>
    img[href *= "somedomain.com/tracking.php"] {
        display: none !important;
    }
</style>
</head>
<body>
    <script src="yourscript"></script>
</body>

这里的关键因素是浏览器会忽略隐藏的图像。因此,您需要将外部脚本移动到正文中。

分析提供商倾向于将自己置于一切之上(头脑),但 99.9% 的时间都没有真正的原因。他们就是觉得自己很重要。

类似于其他人的建议 - 导致不需要的脚本部分失败,但使用更清洁的 "block",我们可以抢夺 img 标识符并防止它被使用。我们这样做是使用 Object.defineProperty(),它默认创建一个不可配置、不可写的 属性.

Object.defineProperty(window, 'img', {value: null}); // this snatches the identifier

img = document.createElement('img'); // <- this won't work

alert(img); // <- this is null