Re: [問題] 防止javascript互相衝突
※ 引述《LaPass (LaPass)》之銘言:
: 如標題
: 自己在 javascript方面算新手
: 因為沒用JS寫出大東西過
: 現在打算寫個類似google analytics之類的
: 可以讓別的網站只加上幾行我給他的JS就,可以使用的小功能
: 在實做方面,我會考慮用jQuery之類的libary,因為比較省工
: 但是,現在我在擔心一個問題
: 別人的網站可能也有使用jQuery,甚至是不同版本
: 我想請問
: 如何同時「避免自己的js、引用的libary別人網上的js互相衝」
: 又能夠「讓自己的js、引用的libary,可以在別人的網站上,正常運作」?
因為無法得知使用者使用 bookmarklet的網站有沒有或是版本對不對,
所以我寫過一個用來載入jquery的 bookmarklet
google 一下 jquery version Conflict 也有一些討論,
大致上就是利用jQuery.noConflict(true);
jquery載入時會先把原有的 $, jQuery, 存為 _$, _jQuery,
noConflict() 會恢復 $, noConflict(true) 則二個都恢復,
例如, 原本版本為 1.6.4,
載入 jquery 1.7.2, 再載入自己的程式,
而自己的程式的寫法和plugin差不多,
( function($) {
var jQuery = $;
/*利用 closure, 裡面的是1.7.2 */
} )(jQuery);
最後noConflict(true), 再恢復
真的要寫plugins這招就沒用了, 因為plugin掛在裡面的$, 外面的不能用,
至於內外同時用jquery會不會有奇怪的衝突, 沒有大量測試, 我也不確定.
要寫給人家用的程式, 不用太擔心這個, 只要避開明顯的衝突,
其他的說明清楚如何使用, 點出可能的問題, 再給出可能的解決方法就好,
最後不能用, 那再考慮修改原始碼
為了各種難以預料的事寫一堆程式來解決,
不如明確定義出使用環境, 讓使用者去處理衝突,
程式設計師的通病, 想用程式解決一切問題, 即使明明有更適當的做法 XD
何況程式的設計規畫都還沒個影就想太遠, 也太過度了, 最後可能會發現,
其實也不用考慮這些, 可能的原因之一是很少人在這些情況下使用你的程式,
真有必要, 那就修改原始碼, 反正程式設計師很愛寫程式 -_-
http://jsfiddle.net/kFVdG/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.104.126.214
※ 編輯: ChowMein 來自: 112.104.126.214 (09/24 23:03)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):