检查页面中javascript函数的可用性

检查页面中javascript函数的可用性,javascript,angularjs,function,Javascript,Angularjs,Function,我想要的是非常简单的,我希望在打开时自动单击“全部展开”按钮。其HTML为: <a id="expandAll" ng-click="expandAllModules()" ng-hide="allModulesExpanded()"> Expand All </a> 通常,函数的类型应该给我这样的“函数”: function a(){} => undefined typeof a => "function" 由于函数expandAll

我想要的是非常简单的,我希望在打开时自动单击“全部展开”按钮。其HTML为:

<a id="expandAll"
   ng-click="expandAllModules()"
   ng-hide="allModulesExpanded()">
    Expand All
</a>
通常,函数的类型应该给我这样的“函数”:

function a(){}
=> undefined
typeof a
=> "function"
由于函数
expandAllModules()
不可用,我无法调用它。有人能帮我解决这个问题吗


编辑
也许我需要详细说明我的问题。我不是那一页的作者。我只想制作一个简单的
greasemonkey
tempermonkey
脚本,并在进入页面时自动展开模块。

如果我在这里偏离了基准,我深表歉意。您是否试图“链接”到该页面并“强制”该页面“全部展开”,或者您是否有权访问该页面,并希望通过插入代码触发页面上的某些代码点击?仅仅做这样的事情似乎从命令行起作用

   jQuery(function(){
      jQuery('#expandAll').trigger('click');
   });

由于我不知道你的需要,我的想法是,这是有点简单化,而不是你正在寻找的。从其他人的回答来看,您似乎想创建自己的指令来启动单击?

如果我在这里偏离了基准,我很抱歉。您是否试图“链接”到该页面并“强制”该页面“全部展开”,或者您是否有权访问该页面,并希望通过插入代码触发页面上的某些代码点击?仅仅做这样的事情似乎从命令行起作用

   jQuery(function(){
      jQuery('#expandAll').trigger('click');
   });
由于我不知道你的需要,我的想法是,这是有点简单化,而不是你正在寻找的。从其他人的回答来看,似乎您想创建自己的指令来启动单击?

我可能有一些拼写错误,但想法就在那里

angular.element(document.body).ready(function() {

    var el = angular.element( document.getElementById('expandAll') );

    var scope = el.scope();

    scope.expandAllModules();

    scope.$digest(); <--- might not be needed, but when i check your site, it needs to have this

});
angular.element(document.body).ready(function(){
var el=angular.element(document.getElementById('expandAll');
var scope=el.scope();
scope.expandAllModules();
scope.$digest();我可能会有一些拼写错误,但想法就在那里

angular.element(document.body).ready(function() {

    var el = angular.element( document.getElementById('expandAll') );

    var scope = el.scope();

    scope.expandAllModules();

    scope.$digest(); <--- might not be needed, but when i check your site, it needs to have this

});
angular.element(document.body).ready(function(){
var el=angular.element(document.getElementById('expandAll');
var scope=el.scope();
scope.expandAllModules();
作用域。$digest();问题
仅调用
expandAllModules()
不起作用的原因是,此函数属于Angular的一个作用域,并且不是分配给
window
的方法。此函数在复数形式中定义如下:

解决方案 为了让我们自己调用这个函数,我们必须通过这个范围

是引用应用程序模型的对象。它是表达式的执行上下文。作用域按层次结构排列,模仿应用程序的DOM结构。作用域可以监视表达式和传播事件。

作用域是触发函数的元素的一部分。我们可以通过将元素的
id
属性传递到
angular.element()
,然后对该对象调用
scope()
来访问此特定作用域:

angular.element('#expandAll').scope()
这将为我们提供以下数据,其中我们可以看到
expandAllModules()
函数:

不幸的是,AngularJS不允许我们简单地执行
scope().expandAllModules()
;相反,我们必须检查它的
$apply
$eval
方法:

var scope = angular.element('#expandAll').scope();

scope.$apply(function() {
    scope.$eval(scope.expandAllModules())
});
我们现在还可以通过调用以下命令来折叠模块:

scope.$apply(function() {
    scope.$eval(scope.collapseAllModules())
});

问题 仅调用
expandAllModules()
不起作用的原因是,此函数属于Angular的一个作用域,并且不是分配给
window
的方法。此函数在复数形式中定义如下:

解决方案 为了让我们自己调用这个函数,我们必须通过这个范围

是引用应用程序模型的对象。它是表达式的执行上下文。作用域按层次结构排列,模仿应用程序的DOM结构。作用域可以监视表达式和传播事件。

作用域是触发函数的元素的一部分。我们可以通过将元素的
id
属性传递到
angular.element()
,然后对该对象调用
scope()
来访问此特定作用域:

angular.element('#expandAll').scope()
这将为我们提供以下数据,其中我们可以看到
expandAllModules()
函数:

不幸的是,AngularJS不允许我们简单地执行
scope().expandAllModules()
;相反,我们必须检查它的
$apply
$eval
方法:

var scope = angular.element('#expandAll').scope();

scope.$apply(function() {
    scope.$eval(scope.expandAllModules())
});
我们现在还可以通过调用以下命令来折叠模块:

scope.$apply(function() {
    scope.$eval(scope.collapseAllModules())
});


这是使用角度绑定来调用模型上的函数。您必须检查该函数的$scope,而不仅仅是我认为的函数。$scope也不可用。它不是一个正常的函数,它是一个角度绑定,并且不存在。角度绑定只是使用了名称,然后名称充当“id”它与函数的id链接,但函数的名称与id不同。您仍然可以通过执行合成事件或仅使用
click()来模拟相同的内容
好吧,你到底想做什么?你只是想在javascript/开发者控制台中做这件事吗?你是想做浏览器扩展?还是书签?它使用角度绑定来调用模型上的函数。你必须检查该函数的$scope,而不仅仅是我认为的函数。$scope不是也可用。它不是一个普通的函数,它是一个有角度的东西,它不存在。angular只是我使用了名称,然后名称作为一个“id”链接到一个函数的id,但函数的名称与id不同。你仍然可以通过合成事件或使用
单击来模拟同样的事情()
那么,你到底想做什么?你只是想在javascript/developer控制台中这样做吗