1

J'ai créé une reproduction de ce bogue ici (utilisation laide de Aurelia mais pour prouver le point): https://jberggren.github.io/GoogleAureliaBugReproduce/Loading casse Aurelia API Google

Si je charge l'API Google et essayer de lister mes fichiers dans Google Drive mon code dérivé de Googles quickstart fonctionne très bien. Si j'utilise le même code après le chargement Aurelia Je reçois une erreur de script de gapi indiquant

Uncaught Error: arrayForEach was called with a non array value at Object._.Sa (cb=gapi.loaded_0:382) at Object._.eb (cb=gapi.loaded_0:402) at MF (cb=gapi.loaded_0:723) at Object.HF (cb=gapi.loaded_0:722) at Object.list (cb=gapi.loaded_0:40) at listFiles (index.js:86) ...

Lors du débogage, il semble être une sorte de vérification de tableau (Chroms dit « code natif ») qui failes après Aurelia est chargé. Dans ma recherche d'une réponse j'ai trouvé deux autres personnes avec le même problème mais aucune solution (Aurelia gitter question, SO Question). Je ne sais pas si signaler cela à l'équipe Aurelia, à Google ou à l'endroit où le problème se pose.

Aidez-moi SO, vous êtes mon seul espoir.

+0

vous souhaiterez peut-être modifier les étendues de votre extrait de démonstration. Pas sûr qu'il y ait trop de contributeurs SO qui seraient heureux de vous donner accès à leurs comptes Drive. Essayez "drive.file" qui restreint l'accès aux fichiers créés par votre application. Si cela vous retarde, contournez simplement gapi et créez vos propres requêtes http rest/json ou utilisez http://aurelia.io/hub.html#/doc/article/aurelia/fetch-client/latest/http-services/ 1. Vous pouvez utiliser gapi pour le bit OAuth et ensuite injecter le jeton d'accès dans vos requêtes, par exemple avec httpClient.configure – pinoyyid

+0

Salut et merci pour votre commentaire. J'avais pensé à la portée, d'où le drive.metadata.readonly original mais je l'ai changé maintenant à drive.file. Ceci est un rapport mes projets actuels utilisent une autre bibliothèque pour la gestion de fichiers plus simple qui utilise gapi dessous. Je trouve Google api difficile à utiliser lors de l'obtention/enregistrement du contenu du fichier du client. Je veux juste sauver quelques photos (enfin, et peut-être même quelques images). –

+1

imho, en utilisant gapi n'est pas une bonne idée jusqu'à ce qu'il soit ouvert. Je soupçonne que l'un ou l'autre des gapi/aurelia/un polyfill surcharge un prototype. L'API REST de Google Drive n'est pas si difficile à tromper, et si vous le faites vous-même, vous aurez un meilleur contrôle sur les téléchargements résumables, les téléchargements partiels, la limitation, etc. – pinoyyid

Répondre

0

Ce n'est pas une solution parfaite mais cela fonctionne.

aurelia contraignant

https://github.com/aurelia/binding/blob/master/src/array-observation.js

Aurelia remplace Array.prototype.* pour certaines raisons.

GAPI (en particulier des feuilles de calcul)

GAPI vérifie lib pour vous assurer que le code natif est-il ou non.

// example 
const r = /\[native code\]/ 
r.test(Array.prototype.push) 

conclusion

Donc, nous devons rapiéçage de singe.

gapi.load('client:auth2', async() => { 
    await gapi.client.init({ 
    clientId: CLIENT_ID, 
    discoveryDocs: ['https://sheets.googleapis.com/$discovery/rest?version=v4'], 
    scope: 'https://www.googleapis.com/auth/spreadsheets', 
    }); 
    // monkey patch 
    const originTest = RegExp.prototype.test; 
    RegExp.prototype.test = function test(v) { 
    if (typeof v === 'function' && v.toString().includes('var methodCallResult = push.apply(this, arguments)')) { 
     return true; 
    } 
    return originTest.apply(this, arguments); 
    }; 
}); 
+0

Faites un tour de SO. https://stackoverflow.com/tour –