1

나누기 : https://jberggren.github.io/GoogleAureliaBugReproduce/로드 아우렐 리아는 내가 여기에이 버그의 재생 (점을 증명할 뿐이다 아우렐 리아의 추악한 사용)를 만든 구글 API

내가 구글 API를로드하고 구글에서 내 파일 내 코드를 드라이브 목록을하려고하면 Googles quickstart에서 파생됩니다. 내가 아우렐 리아를로드 한 후 동일한 코드를 사용하는 경우 나는

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) ...

가 배열 검사의 일종 것 같다 디버깅 아우렐 리아는 후도 실패한 (Chroms은 '네이티브 코드는'말한다)라는 GAPI에서 스크립트 오류가 짐을 실은. 답을 찾기 위해 동일한 문제가 있지만 해결 방법이없는 두 명의 다른 사람을 찾았습니다 (Aurelia gitter question, SO Question). 이 문제를 Aurelia 팀, Google 또는 실제 문제가있는 곳으로보고 할 것인지 여부를 모릅니다.

도와주세요. 내 유일한 희망입니다.

+0

데모 코드 단편의 범위를 변경하고자 할 수 있습니다. 너무 많은 SO 참여자가있어 드라이브 계정에 액세스 할 수있게되어 기쁩니다. 앱에서 만든 파일에 대한 액세스를 제한하는 "drive.file"을 사용해보십시오. 이것이 당신을 붙잡고 있다면, 단지 gapi를 우회하고 자신의 http rest/json 요청을 만들거나 http://aurelia.io/hub.html#/doc/article/aurelia/fetch-client/latest/http-services/를 사용하십시오. 1. OAuth 비트에 gapi를 사용하고 요청에 액세스 토큰을 삽입 할 수 있습니다 (예 : httpClient.configure – pinoyyid

+0

). 안녕하세요. 범위에 대해 생각해 봤는데 원래의 drive.metadata.readonly 였지만 지금은 drive.file로 변경했습니다. 이것은 나의 실제 프로젝트가 밑에있는 갭키 (gapi)를 사용하는보다 단순한 파일 처리를 위해 또 다른 라이브러리를 사용하는 저장소입니다. 클라이언트에서 파일 콘텐츠를 가져 오거나 저장할 때 Google API를 사용하기가 어렵습니다. 나는 단지 json을 저장하고 싶다. –

+1

imho, 갭피를 사용하는 것은 오픈 소스가되기 전까지는 좋은 생각이 아닙니다. 나는 하나 또는 다른 gapi/aurelia/polyfill이 프로토 타입을 오버로드하고 있다고 생각합니다. Google 드라이브 REST API는 논쟁하기가 어렵지 않으며 직접 업로드하는 경우 재개 가능한 업로드, 부분 다운로드, 조절 등을 훨씬 효과적으로 제어 할 수 있습니다. – pinoyyid

답변

0

이것은 완벽한 해결책은 아니지만 작동합니다.

아우렐 리아 결합

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

아우렐 리아 몇 가지 이유에 대한 Array.prototype.*보다 우선합니다.

GAPI (특히 스프레드 시트)

가파 lib 디렉토리를 확인해야합니다 그게 네이티브 코드인지 확인합니다.

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

결론

그래서, 우리는 원숭이 패치에 있습니다.

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

SO 둘러보기. https://stackoverflow.com/tour –