0

在为我的密码管理器实现 Android 自动填充功能时,我无法获取与用户交互的网页的域名。在测试其他密码管理器时,我看到他们能够获取域,因为他们能够根据存储在各种记录中的域来过滤响应。例如,如果我有 3 条以“yahoo.com”为域的记录和 6 条具有不同域的其他记录,当我点击雅虎登录表单上的用户名字段时,我只看到 3 条带有“ yahoo.com”作为域,这是正确的功能。在我自己的应用程序中,当我点击用户名字段时,我会看到所有 9 条记录。我无法获得适当过滤记录所需的域。

我详细研究了文档,并使用了Google 的示例进行开发。

我没有发现任何提及获取域可能有任何困难,但我无法获取我需要的数据。下面是我如何尝试在页面上获取域名的示例。

public void onFillRequest(FillRequest request, CancellationSignal cancellationSignal, FillCallback callback) {
List<FillContext> context = request.getFillContexts();
AssistStructure structure = context.get(context.size() - 1).getStructure();

ArrayMap<String, AutofillId> fields = new ArrayMap<>();
int nodes = structure.getWindowNodeCount();
for (int i = 0; i < nodes; i++) {
    AssistStructure.ViewNode node = structure.getWindowNodeAt(i).getRootViewNode();
    String webDomain = node.getWebDomain();
    if (webDomain != null){
        Log.d(TAG,"domain: " + webDomain);
    }
    addAutofillableFields(fields, node);
}

FillResponse response = createResponse(this, fields);
callback.onSuccess(response);

}

我无法获得真正的 webDomain 值。只有空……</p>

它在应用程序中运行良好,因为我只需要 packageName 来识别应用程序。但是对于浏览器页面,我需要一个页面域名。

如果有人能告诉我我做错了什么,我将不胜感激。该项目发布在这里-

4

1 回答 1

0

解决了。web 域名只能从节点树的其中一个节点中检索。我认为应该为每个节点填充它。

于 2022-02-05T19:51:49.750 回答