2010-02-10 195 views
2

我遇到了一個問題,我花了一些時間來調試我用於jQuery的插件(在這種情況下,jFeed)無法正常工作。問題最終因爲我們還使用了Amazon Associates product previews。產品預覽代碼通過document.write()包括許多其他JS文件,包括jQuery的另一個副本。由於產品預覽代碼出現在jFeed腳本的下面,所以jQuery沒有getFeed函數而被重新定義。有沒有一種很好的方法來防止重新定義jQuery?

是否有最佳做法來確保某些對象(如jQuery)僅在頁面上定義一次?我正在考慮使用C/C++ #ifndef之類的東西,但是我不知道在這種情況下它不會如何工作,因爲我沒有再編寫動態地在jQuery中動態提取的代碼。

回答

2

我認爲,它很可能是最好的重新定義jQuery的變量作爲別的東西。其他jQuery代碼可能會使用不同的版本,因此您可能需要定義一個新變量來指示您正在使用哪個jQuery。

你可以使這樣的事情:

<script> 
    var $jMain = jQuery; 
</script> 

你會那麼只使用$jMain代替jQuery$。這將取決於你,以確保你擁有正確的jQuery對象。這裏是documentation

0

不幸的是,一個JS沙箱內部的環境(如瀏覽器的窗口或框架內)並不是真正用於支持現代世界的各種場景的腳本;你無法說「定義這個對象並使其不能重新定義」。 (如果您嘗試,您甚至可以重新定義大部分Javascript內置插件!)

最好的辦法是確保您的代碼是最後評估的,這會讓您最終評論環境狀態運行。這並不意味着其他代碼不能晚點來臨,並且會打破你的定義,但這通常是非常糟糕的形式。例如,您可以通過將腳本標記作爲文檔正文中的最後一個元素來完成此操作。

參見本jQuery的方法,它不會幫你直接,但讓你想一些解決方案,以頁面共享:在您的情況http://api.jquery.com/jQuery.noConflict/

相關問題