检查javascript lib是否已存在

时间:2012-08-31 01:07:23

标签: include liferay javascript conflict

我能否检查一下我的javascript ext-lib(例如fancybox插件)是否已经存在于我的页面中(无论其版本如何)? 我使用liferay portlet,它可以在一个页面中放置两个相同的portlet,我现在已经有一些脚本混淆了。 (布局配置面板上的Liferay AUI脚本,某些assetPublisher中的滑块...)

2 个答案:

答案 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
}

希望这有帮助!