用于自动填写由 Angular 创建的用户密码表单的内容脚本 [重复]
Posted
技术标签:
【中文标题】用于自动填写由 Angular 创建的用户密码表单的内容脚本 [重复]【英文标题】:content script to auto fill user password form created by Angular [duplicate] 【发布时间】:2017-07-25 12:15:35 【问题描述】:我创建了一个内容脚本扩展来自动填充网页上的用户和密码字段。它可以正常工作,如下所示 -
<input name="userId" class="form-field" id="userId" placeholder="Username" autocomplete="off" tabindex="1" type="text">
<input name="password" class="form-field" id="password" placeholder="Password" autocomplete="off" tabindex="2" type="password">
<input name="signIn" class="btnBlue" id="signIn" value="Sign In" tabindex="4" onclick="checkIECompat()" type="button">
然而,当谈到 Angular 生成的表单时,无论我多么努力地尝试使用那些 ng-xxxxxx 类,它都不起作用。
<input type="text" class="form-control text-center modal-header ng-valid-maxlength ng-touched ng-dirty ng-valid-parse ng-invalid ng-invalid-required" name="idCard" placeholder="User Name" maxlength="20" autocomplete="off" ng-model="request.userName" required="">
<input type="password" class="form-control text-center ng-dirty ng-valid-parse ng-touched ng-invalid ng-invalid-required" name="password" placeholder="Password" aria-describedby="" autocomplete="off" ng-model="request.password" style="margin-top:15px" required="">
<button type="submit" class="btn btn-blue btn_login" value="Log In" ng-click=" login('/payment')" ng-disabled="loginForm.$invalid" disabled="disabled">เข้าสู่ระบบ <span class="glyphicon glyphicon-log-in" style="font-size:14px" aria-hidden="true"></span></button>
上面是第一次加载页面时的代码。在检查了所有有效性并启用了提交按钮后,我手动输入表单并检查代码。然后,我使用我的程序更改这些类和其他细节以使它们相同(除了它的顺序)。我什至通过删除disabled
属性来强制启用该按钮,但它没有帮助。可以单击按钮,但没有任何反应。
我的问题是“有可能实现这一目标吗?”。 Angular 是否有任何限制阻止内容脚本成功运行?或者这只是我无法使其工作的编码问题。
另一个问题是我没有 Angular 代码。它属于我想使用我的扩展程序的网站。
【问题讨论】:
正确处理敏感数据(用户名和密码)是一个困难问题,即使是拥有数十年计算机安全经验的人也会时不时地犯下危险的错误。 password manager 是至关重要的问题。这不是对任何人来说都是一个好主意的项目类型。如果他们在安全处理数据、使用扩展程序、使用网页等方面没有长期经验,尤其如此。根据您的问题,我建议您认真考虑其他项目首先。 您发送input
事件吗?可能是Update Angular model after setting input value with jQuery
@Makyen:感谢您的关注。我也考虑过这一点。因此,我的扩展程序不会存储任何用户或密码。它只是将用户键传递给所需页面上的表单。
@wOxxOm :感谢您指出这一点。是的,我的程序需要在设置值后触发该事件。现在可以了。我将在答案中更新我的代码。
【参考方案1】:
在@wOxxOm的指导下,在设置输入值(更新Angular模型)后添加以下几行触发事件后,我的问题就解决了。
document.getElementsByName("idCard").item(0).value = 'XXXXX';
document.getElementsByName("idCard").item(0).dispatchEvent(new Event("input"));
【讨论】:
以上是关于用于自动填写由 Angular 创建的用户密码表单的内容脚本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章