Javascript chrome.enterprise.deviceAttributes.getDirectoryDeviceId不在注册的chromebox上工作

Javascript chrome.enterprise.deviceAttributes.getDirectoryDeviceId不在注册的chromebox上工作,javascript,reactjs,google-chrome-extension,google-chrome-app,google-chrome-os,Javascript,Reactjs,Google Chrome Extension,Google Chrome App,Google Chrome Os,我正在ReactJS中构建一个chrome kiosk应用程序,它需要访问运行它的设备的deviceId以进行日志记录。我使用以下代码调用chrome.enterprise.deviceAttributes.getDirectoryDeviceId: const getDeviceId = (cb) => { if (!chrome.enterprise) { if (cb) { cb(); } return; } // get devi

我正在ReactJS中构建一个chrome kiosk应用程序,它需要访问运行它的设备的deviceId以进行日志记录。我使用以下代码调用chrome.enterprise.deviceAttributes.getDirectoryDeviceId:

const getDeviceId = (cb) => {
  if (!chrome.enterprise) {
    if (cb) {
      cb();
    }

    return;
  }

  // get device id
  chrome.enterprise.deviceAttributes.getDirectoryDeviceId(assetId => {
    deviceId = assetId;

    if (cb) {
      cb();
    }
  });
};
然后,通过执行以下操作调用函数:

getDeviceId(() => {
  debug('Got device id: %s', deviceId);
});
现在,我知道这个代码只能在注册的ChromeOS设备上工作。我还知道chrome.enterprise.DeviceAttribute仅适用于策略预先安装的扩展。因此,我只能在将其提交到ChromeOS商店并通过开发者仪表板安装后对其进行测试

长话短说:上面的代码没有返回deviceId,这会导致我所有的api调用失败,我无法真正调试它,因为它是作为kiosk应用程序安装的。我想知道这里是否有人能告诉我我做错了什么,以及我如何解决这个问题


提前谢谢

我怀疑您可能没有在manifest.json中声明的“enterprise.deviceAttributes”权限:

  "permissions": [
    "enterprise.deviceAttributes"
  ],
该权限列在API页面的顶部部分:

我在Chrome应用程序中创建的内容窗口中运行此JavaScript,效果良好:

chrome.enterprise.deviceAttributes.getDirectoryDeviceId(deviceId => {
    let publicDeviceId = document.getElementById('publicDeviceId');
    publicDeviceId.innerText = deviceId;
});
它返回管理控制台>设备管理>Chrome设备>设备详细信息页-部分:硬件和操作系统>目录API ID中Chrome设备详细信息页上显示的值。它是一个GUID


API确实适用于Chrome应用程序(这是我唯一测试它的地方),即使API文档重定向到扩展页面。

我怀疑您可能没有在manifest.json中声明的“enterprise.DeviceAttribute”权限:

  "permissions": [
    "enterprise.deviceAttributes"
  ],
该权限列在API页面的顶部部分:

我在Chrome应用程序中创建的内容窗口中运行此JavaScript,效果良好:

chrome.enterprise.deviceAttributes.getDirectoryDeviceId(deviceId => {
    let publicDeviceId = document.getElementById('publicDeviceId');
    publicDeviceId.innerText = deviceId;
});
它返回管理控制台>设备管理>Chrome设备>设备详细信息页-部分:硬件和操作系统>目录API ID中Chrome设备详细信息页上显示的值。它是一个GUID


API确实适用于Chrome应用程序(这是我唯一测试它的地方),即使API文档重定向到扩展页面。

我的问题是,我将代码用作同步函数,而它是异步函数。有关正确用法,请参见Tom Dunn在此处的回答。

我的问题是,我将代码用作同步函数,而它是异步函数。要了解正确用法,请查看Tom Dunn在此处的回答。

还要确保您的Chrome OS版本>=66。我因此掉了几根头发。

还要确保你的Chrome OS版本>=66。我因此掉了几根头发。

试着运行chrome调试——白名单扩展id=。。。。。。。API可能已启用。请尝试通过运行chrome调试--白名单扩展id=。。。。。。。API可能会被启用。当您显示代码的正确用法时,我给了您较高的评价,但我的问题是我在同步使用代码,而它是异步代码。:)谢谢你指出了权限部分——这是我遗漏的部分,导致API调用失败。有人能确认它也适用于扩展吗?我没有收到任何错误,只是空的回复。@OliverWhite它应该适用于扩展,因为它记录在/extensions下,但我没有尝试过。虽然“重要:此API仅在Chrome操作系统上工作”,但它仅在Chrome操作系统上工作。当您展示代码的正确用法时,我给了您较高的评价,但我的问题是我在同步使用代码,而它是异步代码。:)谢谢你指出了权限部分——这是我遗漏的部分,导致API调用失败。有人能确认它也适用于扩展吗?我没有收到任何错误,只是空的回复。@OliverWhite它应该适用于扩展,因为它记录在/extensions下,但我没有尝试过。它只在Chrome操作系统上工作,不过“重要的是:这个API只在Chrome操作系统上工作。”