0

我可以检查我的页面中是否已经存在我的 javascript ext-lib(如 fancybox 插件)(不管它的版本)吗?我使用liferay portlet,它可以在一个页面中放置两个相同的portlet,我现在已经有一些脚本冲突了。(布局配置面板上的Liferay AUI脚本,一些assetPublisher中的滑块......)

4

2 回答 2

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函数,否则上述方法在绝大多数情况下都可以。

于 2012-08-31T02:02:14.653 回答
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
}

希望这可以帮助!

于 2012-08-31T01:26:47.867 回答