【问题标题】:Safari Extension – Updating angularJS model on form autocompleteSafari 扩展——在表单自动完成上更新 angularJS 模型
【发布时间】:2015-11-10 11:12:40
【问题描述】:

我正在写这篇文章,希望了解如何在从浏览器扩展执行自动完成时触发 angularJS 来更新其模型。我知道其他一些应用(LastPass 等密码管理器)成功地做到了这一点。

我正在构建一个小的 Safari 扩展,它将帮助我自动完成 Apple 的(可笑的)沙盒用户创建表单,它有 10 个输入字段和几个选择器元素。

到目前为止,我已经设法使用 jQuery 获取输入字段并使用 .val() 设置它们的值。但是,这并不会触发 angularJS 更新其模型,所以即使输入字段中有文本,angular 也会认为没有文本,无法验证表单。

如果我可以访问 angular 对象,问题可能会很容易解决,但我似乎无法做到这一点。当我尝试访问angular 时,我注入的脚本返回undefined。所以我想我要么错误地检索了角度对象,要么我应该以不同的方式解决这个问题。

请注意,我已经尝试过网络上提到的其他一些技巧:input.trigger('input'); 和其他类似的东西。

【问题讨论】:

  • 你设置了 ng-model 字段吗?
  • @Jacques 在一个元素上?我正在使用其他人制作的表格,我没有创建自己的表格...
  • @Andrei 我有点困惑。如果不控制表单,为什么还要担心表单发生变化时对模型进行角度更新?你无法控制其他人的表单做什么,或者他们使用什么技术。表单的开发者应该确保检查自动完成。
  • @Jacques 是的,但是因为他们没有更新他们的表单,所以即使每个元素中的值都正确,它也不会验证。它会认为所有字段都是空的,即使它们里面有值。如果我在该字段中手动输入内容,则该表单验证良好。我知道可以绕过这个“错误”,因为其他扩展(例如 Last Pass)成功更新了字段,并且模型似乎已正确更新,因为表单没有抱怨有空字段

标签: javascript jquery angularjs autocomplete safari-extension


【解决方案1】:

听起来您需要欺骗表单,让其认为您实际上在输入中输入了一些内容,而不是仅仅设置输入的值,我认为这不会导致焦点事件。尝试使用 JQuery 聚焦然后取消聚焦输入。这应该模拟用户单击输入字段然后离开输入字段。如果 Apple 以正确的方式构建他们的表单,这应该会触发验证/模型更新。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多