我只想创建一些角度对象的扩展,以使AngularJS调试更方便。
但是当我运行add userscript时,它找不到一个有角度的对象。 AngularJS库加载在标记的底部。
UPD :@estus提供正确答案,但如果您想使用Chrome,则需要通过Tampermonkey扩展程序进行安装。
您可以找到最终的代码段here。
答案 0 :(得分:4)
当用户脚本运行时Angular不可用的事实表明Angular是异步加载的,这对于任何SPA来说都是正常的(同时检查@run-at 不设置为document-start
,这不是理想的行为。)
用户脚本的常用解决方法是观察所需的变量:
var initWatcher = setInterval(function () {
console.log('watch');
if (unsafeWindow.angular) {
clearInterval(initWatcher);
init();
}
}, 100);
function init() {
console.log('angular', unsafeWindow.angular);
}
如果不需要跨浏览器兼容性,则可以使用特定于FF的Object.prototype.watch代替:
unsafeWindow.watch('angular', function (prop, oldVal, newVal) {
console.log('watch');
if (newVal) {
unsafeWindow.unwatch('angular');
// angular is still undefined ATM, run init() a bit later
setTimeout(init);
}
return newVal;
});
function init() {
console.log('angular', unsafeWindow.angular);
}