2011-08-25 70 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