Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Google Chrome同步检查是否通过API/扩展启用?_Javascript_Api_Google Chrome_Google Chrome Extension_Synchronization - Fatal编程技术网

Javascript Google Chrome同步检查是否通过API/扩展启用?

Javascript Google Chrome同步检查是否通过API/扩展启用?,javascript,api,google-chrome,google-chrome-extension,synchronization,Javascript,Api,Google Chrome,Google Chrome Extension,Synchronization,是否可以通过编程检查Google Chrome中是否配置了Chrome Sync 我询问的原因是,我正在为依赖Chrome Sync的Chrome编写扩展,如果没有配置,我想检查/通知用户 在发布这个问题之前,我检查了一些明显的地方(Chrome扩展API、StackExchange和Google),但到目前为止我还没有任何运气 如果有人有想法/解决方案,我将非常感谢您的帮助 干杯。我还没有测试过这个,这只是一个想法。和你一样,我也找不到任何文档 位于的文档声明: 即使用户禁用同步,storag

是否可以通过编程检查Google Chrome中是否配置了Chrome Sync

我询问的原因是,我正在为依赖Chrome Sync的Chrome编写扩展,如果没有配置,我想检查/通知用户

在发布这个问题之前,我检查了一些明显的地方(Chrome扩展API、StackExchange和Google),但到目前为止我还没有任何运气

如果有人有想法/解决方案,我将非常感谢您的帮助


干杯。

我还没有测试过这个,这只是一个想法。和你一样,我也找不到任何文档

位于的文档声明:

即使用户禁用同步,storage.sync仍能工作。在这种情况下,它的行为与storage.local相同

但是,
storage.sync
storage.local
有不同的
QUOTA\u字节限制;分别为102400和5242880。根据文件

导致超出此限制的更新会立即失败,并设置runtime.lastError


那么,如果您尝试将一个对象(比如说)设置为200000字节到
storage.sync
,会发生什么呢?如果启用同步,它应该会失败-但是如果禁用同步,因此
storage.sync
的行为类似于
storage.local
,它会成功吗?如果成功了,那么你可以简单地尝试将一个非常大的对象设置为同步,检查它是否成功,然后删除它,并基于此确定是否启用了同步;该页面的URL为。您可以做一些事情来查看帐户是否同步,即使用Google允许扩展的跨域连接打开状态页面(如果它甚至没有返回200-OK status is not Synched),然后使用一点JavaScript从该页面提取“上次同步”日期;之后,只需使用
chrome.storage.sync
API保存它,然后几秒钟后再次检查“上次同步”日期,如果它更改了,那么您可以99%确定已同步(或者如果您想涵盖同步速度慢的情况,只需使用
setInterval
等待它)

您可以使用以下JavaScript提取日期:

NodeList.prototype.forEach = Array.prototype.forEach;
var date = null;
document.querySelectorAll("*").forEach(function(ele){
    var matches = ele.innerText.match(/\b\d{4}\s\d{2}:\d{2}:\d{2}\b.*/);
    if (matches) date = matches[0];
});
第一次保存该值时

chrome.storage.sync.set({date: date});
第二次,您应该比较两个值,添加如下内容:

chrome.storage.sync.get("date", function (old) {
    if (date !== old) {
        // Is sync!
    } else {
        // not sync.
    }
});

祝你好运。

查找服务是否同步的替代方法:

获取
https://www.google.com/settings/chrome/sync?hl=en
将语言设置为
en
,然后:

var is_sync = 0;
NodeList.prototype.forEach = Array.prototype.forEach;
document.querySelectorAll(".Tda.CP").forEach(function(ele){
    if(ele.innerHTML == 'Omnibox History')
    is_sync = parseInt(ele.parentElement.querySelector('.FP.Uda').innerHTML);
});
请注意,您可能需要验证上次同步日期,即
.zU.EP
span,我得到如下信息:

chrome.storage.sync.get("date", function (old) {
    if (date !== old) {
        // Is sync!
    } else {
        // not sync.
    }
});
上次同步时间为2014年11月12日星期三下午1:03:29 UTC+1

这是我编写的将其转换为时间的函数:

last_sync = new Date(document.querySelector('.zU.EP').innerHTML.replace('Last time synced on ','').match(/.*\sat/)[0].replace(' at','')).getTime();

也许不是最好的,但很有效,并给出了一个想法。

我为此提出了一个活动功能请求:

然而,在这项措施实施之前,没有办法确定。可以为帐户启用同步,但在特定计算机上禁用同步,或仅为扩展/应用程序禁用同步。

Chrome现在提供api。您可以使用此api检查用户是否已登录到chrome。您需要在manifest.json中添加
identity
权限(尽管它不会要求用户获得任何额外权限,我认为这是因为我们实际上没有使用oAuth)

下面是代码片段:

manifest.json

....
"permissions": [
  "identity"
]
....
背景页面

chrome.identity.getProfileUserInfo(function(data) {
    if (data.id) {
        alert("User is signed in to chrome!");
    }
    else
    {
        alert("User is not signed in to chrome.");
    }
});

用户可能已经登录到chrome,但专门禁用了同步功能,但这种情况非常罕见。这是我能找到的最接近的方法。

我能够获得同步状态是否打开以及电子邮件ID。 代码如下:

创建一个包含以下内容的manifest.json文件

    {
      "name": "Test turn on sync",
      "version": "1.0",
      "description": "Extension",
      "permissions":[
      "identity", 
      "identity.email"
      ],
      "background": {
      "scripts": ["background.js"],
      "persistent": false
   },
      "manifest_version": 2
 }
在同一文件夹中创建background.js文件

chrome.identity.getProfileUserInfo(function(data) {
if (data.id) {
    alert(data);
}
else
{
    alert("User is not signed in to chrome.");
}
}))

将文件夹添加为chrome扩展名 从chrome运行扩展 在权限中的identity.email帮助下,您甚至可以获取启用同步的用户的电子邮件id以及状态
附言:我修改了下面的代码。

好主意……但它不起作用。大小限制保持不变(呃,我喜欢这个=)它不起作用,但它非常聪明!如果用户注销了该怎么办?您检查ajax响应的状态是否为200-OK,如果用户注销了任何其他东西(例如302重定向),并且如果您未登录,您将无法同步。chrome浏览器可以登录,但这并不意味着该用户的Cookie存在,是吗?目前我正在使用我的chrome浏览器,使用帐户A同步,我使用帐户B登录google.com。是的,我错了,对不起,它只适用于95%的情况。那些完全正常的用户可以登录并使用相同的帐户登录,因为Chrome会在您同步后立即登录。如果用户的同步帐户与他/她登录google时使用的帐户不同,该怎么办