【问题标题】:Execute Javascript in Chrome from AccessibilityService从 AccessibilityService 在 Chrome 中执行 Javascript
【发布时间】:2014-09-06 05:27:39
【问题描述】:

我想写一个AccessibilityService 来帮助用户填写表格。我看到了通过WebView.loadUrl() 调用Javascript 代码的可能性。但由于我只有AccessibilityNodeInfo,所以我只看到WebView 在屏幕上。

经过一些研究,我发现 TalkBackService 能够注入 Javascript,并且在另一篇文章 (Alternative way for communication between WebView and native) 中,如果我引用了 WebView-object,我发现它是可能的。

有没有办法通过 Message 或 chromes WebView 中的广播 Intent 来执行 JavaScript?

如果有人可以帮助我,那就太好了! 非常感谢!

【问题讨论】:

  • 嗨,Lee,我面临着从 AccessibilitService 填写用户名和密码的同样问题。我找不到可以使用 AccessibilityInfo 注入 javascript 的方法。你能告诉你是怎么做到的吗?谢谢。
  • 嗨 Lee,你能告诉我如何使用无障碍服务从那个 webview 获取加载的 URL 吗?

标签: android google-chrome android-webview


【解决方案1】:

Chrome 不使用 WebView,Chrome 使用自己的渲染引擎。虽然一些代码最终与 WebView 共享(因为两者最终是从相同的源代码编译的),但这就是相似性结束的地方。

我认为没有办法通过 Intent 将 JavaScript 注入 Chrome - 这将是一个相当大的安全漏洞(否则有人可能会在您的银行页面中注入“把你所有的钱都寄给我”的 JavaScript)。

可访问性不是我的专业领域,所以我可以完全离开这里,但我相信较新版本的 Chrome 会将 Web 内容结构暴露给可访问性层,因此您应该能够在没有任何自定义 JavaScript 的情况下做自己的事情。我认为您可以使用 uiautomatorviewer 进行检查:对我来说,当我抓取 Chrome 的 UI 转储时,该工具会显示 html 表单。你不是这样吗?

【讨论】:

  • 嗨!谢谢你的回答。我知道,chrome 使用ContentViewCore [1],但是这个类也有方法loadUrl()。 :) 我知道,这将是一个安全整体,但 LastPass [2] 管理它在当前打开的网站上运行 javascript。感谢 uiautomatorviewer 的提示,我会检查一下。干杯 [1] src.chromium.org/svn/trunk/src/content/public/android/java/src/… [2] helpdesk.lastpass.com/upgrading-to-premium/lastpass-for-android
  • @lee.O - 实际上,ContentViewCore.loadUrl 处理 javascript: URL 的方式与 webview 略有不同,但这是一个不同的讨论。不过,如果 lastpass 正在注入 javascript,我会感到惊讶。
  • @marcin-koshiba,哦,对不起,我刚刚检查了铬存储库。我检查了移动设备上的 chrome javascript 控制台输出,并看到了它们执行的代码。 (javascript:function() ... )
  • @marcin-koshiba,但我不得不说,用户必须按 OK 才能执行脚本。
  • @lee.O 这似乎是“增强的 Web 可访问性”,根据描述,它可以让您注入 JS 脚本。不过,它确实需要用户首先在辅助功能设置中启用此功能。
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
相关资源
最近更新 更多