检查页面中javascript函数的可用性
我想要的是非常简单的,我希望在打开时自动单击“全部展开”按钮。其HTML为:检查页面中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
<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控制台中这样做吗