我和我的团队希望在使用 Zepto 时保持低成本切换到另一个框架或本机浏览器调用(我们只针对 WebKit)。
跟踪代码中使用 Zepto 的位置的策略是什么?有什么比维护所用方法的自述列表更好的方法吗?你会怎么做?
我和我的团队希望在使用 Zepto 时保持低成本切换到另一个框架或本机浏览器调用(我们只针对 WebKit)。
跟踪代码中使用 Zepto 的位置的策略是什么?有什么比维护所用方法的自述列表更好的方法吗?你会怎么做?
jQuery:您可以使用noConflict
为jQuery
函数分配一些漂亮、唯一的名称(也许jQuery
它本身是内置的,但如果这很痛苦,那么其他东西很容易与其他东西区分开来,比如$jq
或类似的东西——noConflict
返回jQuery
函数,这样你就可以做到这一点,例如var $jq = jQuery.noConflict();
)。
Zepto:尽管声称“与 jQuery 兼容的语法”,但它本身似乎并不支持noConflict
。但是,看起来 if$
已经在window
对象上定义了,它将不理会它,因为这一行:
'$' in window || (window.$ = Zepto);
所以$
在加载之前定义Zepto
,然后只Zepto
在你的代码中使用(或者给它分配一些同样独特的东西,比如$jq
or $zt
,等等 - 例如,var $zt = Zepto;
)。
在任何一种情况下:如果/当您需要找到这些位时,请搜索您的代码。
除了搜索 $ 和特定方法之外,您还可以通过在运行代码中记录它们的使用情况来识别正在使用的方法。
以下代码将在您每次进行 jQuery 调用时记录使用的函数和堆栈跟踪,但不会记录 jQuery 进行的任何内部调用。
<script>
(function(){
var insideJQuery = false;
function replaceMethod(obj, method, prefix) {
var oldMethod = obj[method];
if(typeof oldMethod !== "function")
return;
obj[method] = function() {
var externalCall = !insideJQuery;
insideJQuery = true;
var output = oldMethod.apply(this, arguments);
if(externalCall) {
console.log(prefix + method + ' called');
console.trace();
insideJQuery = false;
}
return output;
}
}
for(var method in $.fn) {
if(method != 'constructor' &&
method != 'init')
replaceMethod($.fn, method, '$.fn.');
}
for(var method in $) {
if(method != 'Event')
replaceMethod($, method, '$.');
}
})();
</script>
当然,jQuery 调用中的 jQuery 调用(如$(document).ready(function(){$('div')});
.
嗯,你可以搜索一下$
标志吗?
每个方法parents()
都将在最终用$
符号创建的东西上调用。因此,如果您找到所有实例$
并跟踪结果变量的使用,您将拥有一切。