tools tab habilitar gratis google developer cómo como chrome celular activar javascript api google-chrome google-chrome-extension sync

javascript - tab - profiling chrome



¿Verificación de sincronización de Google Chrome si está habilitado a través de API/Extensión? (5)

¿Es posible verificar mediante programación si Chrome Sync está configurado en Google Chrome?

La razón por la que pregunto es que estoy codificando una Extensión para Chrome que depende de Chrome Sync, y me gustaría verificar / informar al usuario si no está configurado.

Antes de publicar esta pregunta, revisé los lugares obvios (API de extensión de Chrome, StackExchange y Google), pero hasta ahora no he tenido suerte.

Si alguien tiene una idea / solución agradecería la ayuda.

Aclamaciones.


Chrome ahora proporciona chrome.identity.getProfileUserInfo api. Puedes usar esta API para verificar si el usuario ha iniciado sesión en Chrome o no. Deberá agregar un permiso de identity en su manifest.json (aunque no le pedirá al usuario ningún permiso adicional y creo que es porque en realidad no usamos oAuth)

Aquí está el fragmento de código:

manifest.json

.... "permissions": [ "identity" ] ....

página de fondo

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

Es posible que el usuario haya iniciado sesión en Chrome pero haya deshabilitado específicamente la sincronización, pero estos casos serán muy raros. Este es el método más cercano que pude encontrar.


Hay una solicitud de función activa que hice para esto:

https://code.google.com/p/chromium/issues/detail?id=361109

Sin embargo, hasta que esto se implemente, no hay forma de saberlo. La sincronización puede estar habilitada para la cuenta, pero deshabilitada en una máquina en particular o deshabilitada solo para extensiones / aplicaciones.


No he probado esto, es solo una idea. Como usted, no he podido encontrar ninguna documentación.

Los documentos en https://developer.chrome.com/extensions/storage.html establecen que:

Incluso si un usuario desactiva la sincronización, storage.sync seguirá funcionando. En este caso, se comportará de forma idéntica a storage.local.

Sin embargo, storage.sync y QUOTA_BYTES tienen diferentes límites QUOTA_BYTES ; 102.400 y 5.242.880 respectivamente. Según los documentos;

Las actualizaciones que harían que se excediera este límite fallan inmediatamente y configuran runtime.lastError.

Entonces, ¿qué sucede si intenta establecer un objeto de, digamos, 200,000 bytes en storage.sync ? Si la sincronización está habilitada, debería fallar, pero si la sincronización está deshabilitada y, por lo tanto, storage.sync se comporta como storage.local , ¿tendrá éxito? Si eso tiene éxito, simplemente puede intentar sincronizar un objeto muy grande, verificar si tuvo éxito, luego eliminarlo y determinar si la sincronización está habilitada en base a eso.


Una forma alternativa de encontrar si el servicio está sincronizado o no:

Obtenga https://www.google.com/settings/chrome/sync?hl=en con el idioma establecido en en , y luego:

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); });

Tenga en cuenta que es posible que desee verificar la última fecha de sincronización, es decir .zU.EP span, obtuve algo como esto:

Last time synced on Wednesday, November 12, 2014 at 1:03:29 PM UTC+1

Esta es la función que escribí para convertir eso a tiempo:

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

Tal vez no sea el mejor, pero funciona, y da una idea.


Google tiene una página para ver el estado de su cuenta sincronizada; La URL de esa página es https://www.google.com/settings/chrome/sync . Algo que puede hacer para ver si una cuenta está sincronizada es abrir esa página de estado usando conexiones entre dominios que Google permite extensiones (si es que ni siquiera devuelve el estado 200-OK no está sincronizado) y luego usa un poco de JavaScript para extraiga la fecha de "Última sincronización" de esa página; después de eso, simplemente guárdelo utilizando la API chrome.storage.sync y luego, unos segundos más tarde, verifique nuevamente la fecha de "Última sincronización". Si cambió, puede estar seguro al 99% de que está sincronizado (o si desea cubrir el caso las sincronizaciones lentas solo usan setInterval para esperarla.

Puedes usar el siguiente JavaScript para extraer la fecha:

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]; });

La primera vez que guarde ese valor

chrome.storage.sync.set({date: date});

Y la segunda vez debes comparar ambos valores agregando algo como esto:

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

Buena suerte.