chrome.enterprise.deviceAttributes.getDirectoryDe​​viceId不适用于已注册的chromebox

时间:2017-02-08 15:35:26

标签: javascript reactjs google-chrome-extension google-chrome-app google-chrome-os

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

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.deviceAttributes仅适用于策略预安装的扩展。因此,我只能在将其提交到ChromeOS商店并通过开发人员信息中心安装后对其进行测试。

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

提前致谢!

3 个答案:

答案 0 :(得分:4)

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

  "permissions": [
    "enterprise.deviceAttributes"
  ],

该权限列在API页面的顶部:https://developer.chrome.com/extensions/enterprise_deviceAttributes#intro

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

chrome.enterprise.deviceAttributes.getDirectoryDeviceId(deviceId => {
    let publicDeviceId = document.getElementById('publicDeviceId');
    publicDeviceId.innerText = deviceId;
});

它会返回管理控制台中Chrome设备详细信息页面上显示的值>设备管理> Chrome设备>设备详细信息页面 - 部分:硬件和操作系统>目录API ID。这是一个GUID。

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

答案 1 :(得分:0)

我的问题是我使用代码作为同步函数,而它是一个异步函数。为了正确使用,请在这里查看Tom Dunn的答案。

答案 2 :(得分:0)

还要确保您的Chrome操作系统版本为> =66。因此,我掉了几根头发。