AngularJS应用base.html加载失败,提示isUndefined未定义
解决AngularJS应用中base.html无法加载的问题
问题描述
我在运行AngularJS应用时碰到了一个棘手的问题:index.html能正常加载,但引入了AngularJS的base.html却完全加载不出内容。打开浏览器控制台,看到了如下错误:
hint.js:96 Uncaught ReferenceError: isUndefined is not defined at toDebugString (hint.js:96) at hint.js:191 at Array.map (<anonymous>) at hint.js:190 at hint.js:313 at ensure (hint.js:234) at module (hint.js:311) at angular.module (hint.js:1184) at angular.module (hint.js:1334) at angular.js:2837
我完全不知道*hint.js是什么文件,也找不到isUndefined*的定义位置。目前页面中引入的JavaScript资源如下:
<script src="/static/underscore-min.js" type="text/javascript"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.js"></script> <script src="/static/angular-resource.min.js"></script> <script src="/static/angularui.min.js"></script> <script type="text/javascript" src="/static/jquery-2.1.0.min.js"></script> <script src="/static/bootstrap/js/bootstrap.js" type="text/javascript"></script>
排查与解决建议
咱们一步步来拆解这个问题:
- 关于
hint.js:这个文件并不是官方AngularJS 1.1.5自带的内容,大概率是某个第三方依赖(比如你引入的angularui.min.js)或者浏览器里的AngularJS调试插件(比如早期的AngularJS Batarang)注入的文件,也有可能是你本地的AngularJS文件被篡改过。 - 关于
isUndefined未定义:这个是AngularJS核心的内部工具函数,正常情况下会在AngularJS核心文件加载时被定义。现在报错找不到,要么是核心文件加载顺序错了,要么文件损坏,要么第三方代码提前调用了AngularJS的模块方法,导致核心方法还没就绪。
基于这些分析,你可以按以下步骤尝试解决:
- 替换AngularJS核心文件:把你本地的
angular.js换成官方原版的1.1.5版本,或者直接确认CDN链接的有效性,避免文件被篡改或损坏。 - 调整JS加载顺序:你目前把jQuery放在了AngularJS之后加载,虽然AngularJS不依赖jQuery,但某些UI组件可能会受影响。建议调整为:先加载jQuery,再加载AngularJS,最后加载其他依赖,示例如下:
<script type="text/javascript" src="/static/jquery-2.1.0.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.js"></script> <script src="/static/underscore-min.js" type="text/javascript"></script> <script src="/static/angular-resource.min.js"></script> <script src="/static/angularui.min.js"></script> <script src="/static/bootstrap/js/bootstrap.js" type="text/javascript"></script> - 排查第三方依赖:暂时移除*
angularui.min.js*,测试base.html是否能正常加载。如果可以,说明这个UI库和AngularJS 1.1.5版本不兼容,或者文件本身有问题,可以尝试更新到适配的版本,或者更换其他UI库。 - 禁用浏览器插件:如果你安装了AngularJS相关的调试插件,暂时禁用它们,这类插件有时候会注入额外的文件(比如*
hint.js*),引发冲突。
内容的提问来源于stack exchange,提问作者jeffca
相关产品推荐
相关产品推荐

