我正在编写一个小脚本来自动化页面上的用户操作,一旦页面打开就应该在chrome控制台中运行,并且有一个表单在检查了所有文本输入之前无法提交,仅当用户将光标放入输入并键入内容时才会进行检查。然后我在互联网上发现我可以执行此代码,这会触发检查字段所需的处理程序:
var $e = angular.element(document.getElementsByName("username")[0]);
$e.triggerHandler('input');
所以我的问题是:chrome如何知道angular.element()函数是什么?是不是应该只知道“纯粹”(如果我可以这么说)javascript?
答案 0 :(得分:1)
chrome如何知道angular.element()
函数是什么?
简而言之,我会说 angular.js 有一个名为angular
的全局对象,它在全局窗口对象的angular命名空间中有几个可用的方法。
这与角度相同,其他库如jquery是用javascript编写的。它只在加载页面时在浏览器中运行。因此,当浏览器加载每个资产时,它还会获得存储的方法,如angular.element()
,这些方法可以在页面中使用,并且可以在浏览器的控制台中实现。它有一份DOM的副本。
就像jquery一样,当jquery在浏览器中加载时,jQuery对象$()
也可以在页面和控制台中使用。
答案 1 :(得分:1)
Chrome由V8 Javascript引擎提供支持。当请求网页时,请说index.html
请求,大致执行流程如下:
<script src="angular.js" ...
angular.js
已下载并解析。 <script src="main.js" ...
main.js
已下载,解析并运行。当达到第4点时,下载并解析angular.js
源代码。在此阶段,创建global object angular
,jQuery Lite作为angular.element
加载,所有其他角度相关函数加载angular
全局对象。
现在在第6点,您的main.js
已下载并运行。在您的文件中,您有以下行,
var $e = angular.element(document.getElementsByName("username")[0]);
$e.triggerHandler('input');
当V8 JS引擎解析并运行第一行时,它知道angular
,因为angular.js
文件被解析并附加了窗口angular
。一旦引擎知道窗口中有一个名为angular
的对象,显然它可以访问element
对象附带的angular
。
链接以了解如何加载和执行javascript。
希望你能理解。