我在这里复制了这个错误(Aurelia 的丑陋使用,但为了证明这一点):https://jberggren.github.io/GoogleAureliaBugReproduce/

如果我加载 Google API 并尝试在 Google Drive 中列出我的文件,我从 Googles quickstart 派生的代码工作正常。如果我在加载 Aurelia 后使用相同的代码,我会收到来自 gapi 的脚本错误说明
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 说“ native 代码”)在加载 Aurelia 后失败。在我寻找答案的过程中,我发现另外两个人有同样的问题但没有解决方案( Aurelia gitter questionSO Question )。不知道是否要向 Aurelia 团队、Google 报告或实际问题所在。

帮助我,你是我唯一的希望。

最佳答案

这不是一个完美的解决方案,但有效。

aurelia结合

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

由于某些原因,Aurelia 会覆盖 Array.prototype.*

gapi(尤其是电子表格)

Gapi lib 检查以确保它是 native 代码与否。

// 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('__array_observer__.addChangeRecord')) {
      return true;
    }
    return originTest.apply(this, arguments);
  };
});

关于google-drive-api - 加载 Aurelia 会破坏 Google API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43040405/

10-13 04:02