2011-08-25 48 views
1

我们在我们的网站中使用以下跟踪代码进行第三方跟踪。该代码是从第三方网站复制而来的,并且工作正常,但请注意它被分成三个JavaScript标记块。由于这些块彼此相邻,我假设我可以将代码组合到一个块中,并且一切都会好起来的(我想在AJAX回调部分中调用此代码)。但是,当我组合代码时,我得到一个“Uncaught ReferenceError:mm_variables not defined”。从多个JavaScript块合并代码会导致错误?

由于代码以相同的顺序和范围仍然执行,我想了解如何结合的标记部分将有什么区别?有没有我不知道的范围问题?

<!-- Begin Metrics Tracking Code --> 
<script type="text/javascript"> 
var mm_c = 'd76e1f47616000000000000000'; 
var mm_protocol = (("https:" == document.location.protocol) ? "https://" : "http://"); 
document.write(unescape("%3Cscript src='" + mm_protocol + "www.mongoosemetrics.com/jsfiles/js-correlation/mm-getvar.js' type='text/javascript'%3E%3C/script%3E")); 

</script> 
<script type="text/javascript"> 

/* Custom Parameters */ 
/* MANDATORY default_number Setup Parameter DO NOT REMOVE */ 
var default_number='8889996666'; /* 10 Digits Only i.e. 8881234567 */ 

</script> 
<script type="text/javascript"> 

document.write(unescape("%3Cscript src='" + mm_protocol + "www.mongoosemetrics.com/jsfiles/js-correlation/mm-control.php%3F" + mm_variables + "' type='text/javascript'%3E%3C/script%3E")); 
</script> 
<!-- End Metrics Tracking Code --> 

回答

5

我认为mm_variables是在其中通过

document.write(unescape("%3Cscript src='" + mm_protocol + "www.mongoosemetrics.com/jsfiles/js-correlation/mm-getvar.js' type='text/javascript'%3E%3C/script%3E")); 

加载如果你不知道该脚本定义,这将创建一个新的script元素,并将其添加到文档中。这将是这样的:

<script src='http://www.mongoosemetrics.com/jsfiles/js-correlation/mm-getvar.js' type='text/javascript'></script> 

你就不能访问,其中在同一script元素动态包含的脚本定义的变量。

包含脚本必须被加载并首先执行。直到当前的script块完成,它才会执行。

你应该能够移动var default_number='8889996666';第一块,但最后一行必须在自己的块。

更新:关于你的评论。在这种情况下,你必须执行回调中的最后一行。您可以将其从document.write更改为DOM操作。唯一的问题是,如果包含的脚本本身通过document.write进一步脚本,这将无法正常工作。你必须确保事实并非如此。那么你可以这样做:

var default_number='8889996666', 
    default_fooBar; // make a global empty variable 

makeAjaxRequest(function(parameter) { 
    default_fooBar = paramter; 
    var script = document.createElement('script'); 
    script.src = mm_protocol + "www.mongoosemetrics.com/jsfiles/js-correlation/mm-control.php%3F" + mm_variables; 
    document.getElementsByTagName('head')[0].appendChild(script); 
}); 

另外请记住,这是一个跟踪脚本。如果在DOM加载后追加(无论出于何种原因),它可能无法正常工作。也许他们也提供了一些通过Ajax加载参数的方式(应该在他们的文档中提到)。

+0

感谢,我没有意识到的是,动态加载脚本的变量将无法访问......所以如果我想叫所有这些代码在回调中,你能推荐的方法? – Yarin

+0

你想要在回调中调用什么?请注意,在加载DOM后,您不能(不应该)调用'document.write'。否则它会覆盖内容。 –

+0

我需要包含一个辅助自定义参数(在中间块),我们必须使用AJAX请求检索。我试图弄清楚如何设置它,以便只有在我们检索到该参数后才能执行此代码。 – Yarin