我能否检查一下我的javascript ext-lib(例如fancybox插件)是否已经存在于我的页面中(无论其版本如何)? 我使用liferay portlet,它可以在一个页面中放置两个相同的portlet,我现在已经有一些脚本混淆了。 (布局配置面板上的Liferay AUI脚本,某些assetPublisher中的滑块...)
答案 0 :(得分:2)
如果您正在测试本机javascript函数(即内置或使用javascript创建),则:
if (typeof foo == 'function')
无论您使用哪个库,始终有效。例如测试jQuery是否可用:
if (typeof jQuery == 'function')
我不相信主机对象的jQuery isFunction 方法,如果你没有测试主机对象,那么typeof是完全可靠的。
哦,我应该补充一点,如果你正在测试宿主对象的方法,有很多方面需要考虑。在绝大多数情况下,以下内容已足够:
if (hostObject && hostObject.method) {
// call hostObject.method
}
值得注意的是,主机对象不需要符合ECMA-262(尽管大多数现代实现在很大程度上都是如此,至少对于DOM对象而言)。有许多正在使用的实现具有宿主对象,当使用typeof
进行测试时将返回“未知”或类似,一些较旧的实现甚至会抛出错误。
如果使用object.prototype.toString.call(hostObject)
(jQuery的 isFunction 函数使用)进行测试,某些主机对象会抛出错误,因此除非您要实现强大的 isHostMethod 函数,以上情况将在绝大多数情况下发生。
答案 1 :(得分:1)
检查是否加载了通用JS库(也就是jQuery插件)测试其功能之一:
if ($.isFunction(pluginFunction)) {
// Code to run if generic library is loaded
}
检查是否加载了jQuery插件:
if (jQuery().pluginName) {
// Code to run if plugin is loaded
}
希望这有帮助!