chrome扩展的动态清单值

时间:2012-07-17 11:52:24

标签: google-chrome google-chrome-extension chrome-web-store

我有一个我开发的chrome扩展程序,我想为每个用户提供某种ID。

理想情况下,我会将此ID放入清单中,然后通过chrome.app.getDetails().userid

进行调用

然后我可以使用此ID每X小时获取一次Feed,每个userid的Feed都不同。

如果我自己提供CRX文件,我可以通过编写一个快速的PHP脚本来执行此操作,该脚本在下载请求时更改清单并使用特定逻辑插入id,同时还将相同的id插入到mysql表中。

如何在通过Chrome网上应用店提供扩展程序时执行此操作?

1 个答案:

答案 0 :(得分:2)

不要在清单文件中包含特定于用户的值。更好的方法是使用扩展的持久性。

定义此类ID的一个合理位置是options page 另一种可能的选择是后台脚本,它遵循以下逻辑:

    var userid = localStorage.getItem('userid');
    if (!userid) {
        // Create new useruid, either via a server-side script, or client-side
        // ...
        localStorage.setItem('userid', 'new user id');
    }

在此示例中,我使用localStorage来启用持久性。您也可以使用chrome.storage Chrome 20 + ,这样用户就可以同步他们的个人资料和设置。

您可以在服务器端实现逻辑,而不是在第一次运行时检查和检索ID。例如,假设服务器的响应格式是JSON。然后,只需在响应中定义uid(可选,只有在更改时):

var userid = localStorage.getItem('userid');
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/feeds/json?userid=' + userid);
xhr.onload = function() {
    var response = JSON.parse(xhr.responseText);
    if (response.userid) { // Set new uid if needed
        localStorage.setItem('userid', userid = response.userid);
    }
    // ... your application's logic ...
};
xhr.send();

服务器必须实现以下功能:

  1. 如果请求(查询字符串?)包含userid密钥,请检查用户标识是否有效且已知。
    • 如果userid无效,请生成一个,并将其包含在回复中。
  2. 您的应用程序逻辑
  3. 这导致响应看起来像(要使用PHP生成JSON,请使用json_encode):

    {"userid":"some unique user identifier", ....}