作者ChowMein (杉斑加纹)
看板Ajax
标题Re: [问题] 防止javascript互相冲突
时间Mon Sep 24 22:59:05 2012
※ 引述《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)