加载AngularJS库后如何运行userscript(/greasemonkey)
我只是想为AngularJS对象创建一些扩展,使AngularJS调试更加方便 但当我运行adduserscript时,它找不到角度对象。AngularJS库加载在标记的底部 UPD:@estus提供了正确的答案,但如果你想使用chrome,你需要通过扩展安装它加载AngularJS库后如何运行userscript(/greasemonkey),angularjs,userscripts,Angularjs,Userscripts,我只是想为AngularJS对象创建一些扩展,使AngularJS调试更加方便 但当我运行adduserscript时,它找不到角度对象。AngularJS库加载在标记的底部 UPD:@estus提供了正确的答案,但如果你想使用chrome,你需要通过扩展安装它 您可以找到最后的代码片段。在用户脚本运行时Angular不可用这一事实表明Angular是异步加载的,这对于任何未设置为document start的SPA检查来说都是很正常的,这不是理想的行为 用户脚本的常见解决方法是监视所需的变量:
您可以找到最后的代码片段。在用户脚本运行时Angular不可用这一事实表明Angular是异步加载的,这对于任何未设置为document start的SPA检查来说都是很正常的,这不是理想的行为 用户脚本的常见解决方法是监视所需的变量:
var initWatcher = setInterval(function () {
console.log('watch');
if (unsafeWindow.angular) {
clearInterval(initWatcher);
init();
}
}, 100);
function init() {
console.log('angular', unsafeWindow.angular);
}
如果不需要跨浏览器兼容性,则可以使用FF-specific:
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);
}
基本正确,但不会始终按预期工作,具体取决于userscript引擎和@grant模式。OP没有提供足够的细节。脚本注入可能是必需的,也是唯一通用的方法。或者,在支持@require的引擎上,@require为脚本作用域单独提供angular副本可能更明智。@BrockAdams是的,即使对于不同的GM版本,安全权限也会有所不同。我相信最后一个没有问题的版本是1.x,对于unsafeWindow来说,可怕的“权限被拒绝”是微不足道的。单独的副本无法解决问题,因为Angular应用程序状态存储在Angular对象中。但是在Angular加载到页面之前执行@require可能会有所帮助-Angular window.Angular,GM脚本可以先定义它。感谢您提供详细的答案。这很奇怪,但仍然不起作用。它找不到unsafeWindow.angular,这就是为什么我在控制台中看到许多手表线。把代码放在这里-@STEVER你的userscipt环境是什么?我已经检查过了,并在任意网站docs.angularjs.org,Greasemonkey 3.2上正常工作。我喜欢这个主意,我发现自己从控制台挖了几次注射器。根据我的需要对其进行了一些修改,请随意。@STEVER将@grant none更改为@grant unsafeWindow,这是针对Tampermonkey afaik的。