我实际上是这样在我的页面上加载外部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);
如何在发送数据之前摆脱跟踪用户的这一图像,但保留最新版本的图像,不做任何更改。
答案 0 :(得分:2)
与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);
}
}
答案 1 :(得分:2)
与其他建议类似 - 导致不需要的脚本部分失败,但使用更清晰的“块”,我们可以抓取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
答案 2 :(得分:1)
我不确定它是否有用并且它是黑客攻击,但您可以使用try catch
和const
进行尝试。 const
可能适用于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>
通过定义全局const,它应该在分配变量时抛出错误,然后我们通过对它执行任何操作来处理错误,因此在抛出错误之前的部分仍应加载而不会中断脚本的其余部分。
答案 3 :(得分:0)
我在评论中提到了这一点,但我认为实现你要求的唯一方法是AJAX加载脚本(如果服务器允许)并解析出有问题的代码。这似乎过于复杂,容易出错,而且是不道德的。我建议您联系脚本somedomain.com
的主持人,询问他们是否可以提供没有图像跟踪器的版本。如果他们拒绝,那么你应该尊重他们的意愿。毕竟,这是他们想要的内容(脚本的第一部分),他们完全有权指定您使用它的义务。如果您不喜欢他们的条款,请不要使用他们的内容。
(顺便说一句,我并不是说图像跟踪器是好事。我鄙视它们。)
答案 4 :(得分:0)
你试过CSS吗?
this.text = new cjs.Text("Find out more", "12px helvetica", "#FFFFFF");
这里的关键因素是浏览器会忽略隐藏的图像。因此,您需要将外部脚本移动到正文。
分析服务提供商倾向于将自己置于一切(头脑)之上,但99.9%的时间没有真正的理由。他们觉得非常重要。