2017-03-05 62 views
0

我已经创建了一个内容脚本扩展来自动填充网页上的用户和密码字段。它的工作原理在正常的形式确定像下面 -内容脚本自动填充由Angular创建的用户密码表单

<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"> 

然而,当涉及到角产生的形式,无论我怎样努力与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代码。它属于我想用我的扩展的网站。

+0

正确处理敏感数据(用户名和密码)是一个很难的问题,即使是具有数十年计算机安全经验的人也时常会遇到危险的错误。密码管理员(https://www.google.com/search?q=password+manager)是非常关键的问题。它不是**对于任何一个人来说都是一个好主意的项目类型。如果他们在安全处理数据,处理扩展,处理网页等方面经验不足,尤其如此。根据您的问题,我建议您首先认真考虑其他项目。 – Makyen

+0

你是否派遣一个'input'事件?可以[在使用jQuery设置输入值后更新角度模型](// stackoverflow.com/q/17109850) – wOxxOm

+0

@Makyen:谢谢您的关心。我也考虑过这个。所以,我的扩展程序不会存储任何用户和密码。它只是将所需的用户键转发到所需页面上的表单。 – piptan

回答

1

在@wOxxOm的指导下,在设置输入值(更新Angular模型)后添加以下几行触发事件后,我的问题就解决了。

document.getElementsByName("idCard").item(0).value = 'XXXXX'; 
document.getElementsByName("idCard").item(0).dispatchEvent(new Event("input"));