如何在加载AngularJS库之后运行userscript(/ greasemonkey)

时间:2015-08-12 14:30:02

标签: angularjs userscripts

我只想创建一些角度对象的扩展,以使AngularJS调试更方便。

但是当我运行add userscript时,它找不到一个有角度的对象。 AngularJS库加载在标记的底部。

UPD :@estus提供正确答案,但如果您想使用Chrome,则需要通过Tampermonkey扩展程序进行安装。

您可以找到最终的代码段here

1 个答案:

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