是否可以通过编程方式检查Chrome浏览器是否已在Google Chrome中配置?
我问的原因是我正在为依赖Chrome同步的Chrome扩展程序编码,并希望检查/通知用户是否未配置。
在发布此问题之前,我检查了显而易见的地方(Chrome Extension API,StackExchange和Google),但到目前为止我还没有运气。
如果有人有想法/解决方案,我会很感激帮助。
干杯。
答案 0 :(得分:5)
Google有一个页面可以查看已同步帐户的状态;该网页的网址为https://www.google.com/settings/chrome/sync
。你可以做些什么来查看帐户是否已同步使用Google允许扩展的跨域连接打开该状态页面(如果它甚至没有返回200-OK状态未同步)然后你使用一点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.
}
});
祝你好运。
答案 1 :(得分:1)
我没有测试过这个,这只是一个想法。和你一样,我找不到任何文件。
https://developer.chrome.com/extensions/storage.html的文档指出:
即使用户禁用同步,storage.sync仍然可以正常工作。在这种情况下,它的行为与storage.local相同。
但是,storage.sync
和storage.local
具有不同的QUOTA_BYTES
限制;分别为102,400和5,242,880。根据文件;
将导致超出此限制的更新立即失败并设置runtime.lastError。
那么,如果您尝试将一个200,000字节的对象设置为storage.sync
会发生什么?如果启用了同步,它应该会失败 - 但是如果禁用同步,因此storage.sync
的行为类似于storage.local
,它会成功吗?如果确实成功了,那么您可以简单地尝试将一个非常大的对象设置为同步,检查它是否成功,然后将其删除,并确定是否基于此启用了同步。
答案 2 :(得分:0)
查找服务是否同步的替代方法:
将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
范围,我的内容如下:
Last time synced on Wednesday, November 12, 2014 at 1:03:29 PM UTC+1
这是我写的把它转换成时间的函数:
last_sync = new Date(document.querySelector('.zU.EP').innerHTML.replace('Last time synced on ','').match(/.*\sat/)[0].replace(' at','')).getTime();
也许不是最好的,但有效,并给出一个想法。
答案 3 :(得分:0)
我为此做了一个有效的功能请求:
https://code.google.com/p/chromium/issues/detail?id=361109
然而,在实施之前,没有办法说出来。可以为帐户启用同步,但在特定计算机上禁用,或仅为扩展程序/应用程序禁用。
答案 4 :(得分:0)
Chrome现在提供chrome.identity.getProfileUserInfo 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但已明确禁用同步,但此类情况非常罕见。这是我能找到的最接近的方法。
答案 5 :(得分:0)
我能够获得同步状态是否已打开或与电子邮件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以及状态 附言:我从回答的线程下面修改了代码