在我的网站www.theprinterdepo.com上,您可以查看页面来源,我有一个代码,我的搜索建议我将其移至外部文件。
它是一个建立在magento上的电子商务网站。它是一个免费的开源工具,所以我没有开发它,我只是安装它。
我需要知道代码的作用。
window.HDUSeed='c7025284683262a8eb81056c48968d74';
window.HDUSeedIntId = setInterval(function(){
if (document.observe) {
document.observe('dom:loaded', function(){
for (var i = 0; i < document.forms.length; i++) {
if (document.forms[i].getAttribute('action') && document.forms[i].getAttribute('action').match('contacts/index/post')) {
var el = document.createElement('input');
el.type = ('hidden');
el.name = 'hdu_seed';
el.value = window.HDUSeed;
document.forms[i].appendChild(el);
}
}
});
clearInterval(window.HDUSeedIntId)
}
}, 100);
答案 0 :(得分:7)
此脚本调用每{100}左右interval的函数(as it's not guaranteed)来尝试验证DOM的加载状态以在其上添加挂钩。
如果已加载,则会处理页面中显示的所有表单,查找具有“action”属性的表单(通常在某处提交,此处为contacts/index/post
)。
对于找到的所有此类表单,它添加了一个包含“种子”值的新隐藏输入元素,但我们无法在不了解更多有关代码库的情况下告诉您它的用途。
// seed value, purpose unknown
window.HDUSeed='c7025284683262a8eb81056c48968d74';
// invoke this function every 100ms
// see: https://developer.mozilla.org/en/DOM/window.setInterval
window.HDUSeedIntId = setInterval(function(){
// checks if document.observe method exists (added by the Prototype
// JavaScript library, so we use this here to check its presence or
// that it's been already loaded)
if (document.observe) {
// hook on load status (when the page's DOM has finished loading)
// see: http://www.prototypejs.org/api/document/observe
document.observe('dom:loaded', function(){
// process all forms contained within the page's context
// see: https://developer.mozilla.org/en/DOM/document.forms
for (var i = 0; i < document.forms.length; i++) {
// only act on forms with the 'contacts/index/post/' action attribute
// see: https://developer.mozilla.org/en/DOM/document.forms
// and: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/match
if (document.forms[i].getAttribute('action') &&
document.forms[i].getAttribute('action').match('contacts/index/post')) {
// create an element...
// see: https://developer.mozilla.org/en/DOM/document.createElement
var el = document.createElement('input');
el.type = ('hidden'); // ... that is hidden
el.name = 'hdu_seed'; // w/ name 'hdu_seed'
el.value = window.HDUSeed; // and the seed value
document.forms[i].appendChild(el); // and add it to the end of the form
}
}
});
// Remove the interval to not call this stub again,
// as you've done what you want.
// To do this, you call clearInterval with the ID of the
// interval callback you created earlier.
// see: https://developer.mozilla.org/en/DOM/window.clearInterval
clearInterval(window.HDUSeedIntId)
}
}, 100); // 100ms
答案 1 :(得分:3)
看起来像对外部事物的某种诽谤。我的意思是Google Analytics等服务。请记住,如果您正在为您的网站使用任何第三方服务。如果不是,我会建议你删除它,看看会发生什么。如果它出现问题或其他原因,只需将代码恢复到文档中即可。
答案 2 :(得分:3)
代码查找其操作为contacts / index / post的表单,并尝试添加名为“hdu_seed”的隐藏字段。它看起来像是一个反垃圾邮件措施,服务器可能希望收到它,如果它不存在,则忽略它。这样,不使用javascript的机器人将不会包含此字段,并且表单可能会失败。
编辑:它实际上并不复杂。
答案 3 :(得分:1)
不知道setInterval
,clearInterval
和observe
函数在这里做了什么是逻辑的粗略轮廓
使用函数和整数setInterval
调用100
该函数检查observe
中是否已加载document
函数
如果有,那么它使用observe
参数和函数调用dom:loaded
函数并调用clearInterval
函数,否则它什么都不做
内部函数遍历文档中的每个form
。
循环检查表单中的action
属性。
如果它存在且包含字符串contacts/index/post
,则会创建一个隐藏的input
元素,name
为hdu_seed
,value
为window.HDUSeed
然后,它会将此元素附加到form
。