include - 检查javascript lib是否已经存在

标签 include liferay javascript conflict

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

最佳答案

如果您正在测试 native 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 函数,上面的方法在绝大多数情况下都可以。

关于include - 检查javascript lib是否已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12207662/

相关文章:

PHP 包含文件。显示找不到错误文件

java - liferay 门户内部有哪些技术

php - 如何根据另一个下拉列表将下拉列表更改为文本框,反之亦然

java - Liferay CE 和 Liferay EE 有什么区别?

javascript - iFrame 内自动登录

javascript - 替换 JavaScript 中的双反斜杠——文本区域中的换行符

JavaScript 无法将 json 元素识别为数字

PHP is_readable 问题与 open_basedir

android - 根据条件在 XML 中包含布局

c++ - 如何判断包含头文件的位置?