Кнопки «Сохранить на диск» можно / нужно чистить вручную? - PullRequest
3 голосов
/ 07 февраля 2020

Использование https://developers.google.com/drive/api/v3/savetodrive#javascript_api В приложении VueJS, например:

В index.html

<script type="text/javascript">
  window.___gcfg = {
    parsetags: 'explicit',
    lang: 'en-US'
  };
</script>
<script src='https://apis.google.com/js/platform.js' async defer></script>

В компоненте:

export default {
  mounted() {
    window.gapi.savetodrive.go(`savetodrive-${this.id}`);
  },
}

Кнопки «Сохранить на диске» отображаются правильно, но при переходе от компонента (когда элемент HTML удаляется из DOM), я начинаю получать множество исключений в консоли (по одному на каждое кнопка х раз визуализирована):

Uncaught DOMException: Blocked a frame with origin "https://drive.google.com" from accessing a cross-origin frame.
    at Object.nz [as kq] (https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en.xh-S9KbEGSE.O/m=gapi_iframes,gapi_iframes_style_common/rt=j/sv=1/d=1/ed=1/am=wQc/rs=AGLTcCNaUSRWzhd71dAsiMVOstVE3KcJZw/cb=gapi.loaded_0:150:257)
    at jz.send (https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en.xh-S9KbEGSE.O/m=gapi_iframes,gapi_iframes_style_common/rt=j/sv=1/d=1/ed=1/am=wQc/rs=AGLTcCNaUSRWzhd71dAsiMVOstVE3KcJZw/cb=gapi.loaded_0:148:261)
    at Fz (https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en.xh-S9KbEGSE.O/m=gapi_iframes,gapi_iframes_style_common/rt=j/sv=1/d=1/ed=1/am=wQc/rs=AGLTcCNaUSRWzhd71dAsiMVOstVE3KcJZw/cb=gapi.loaded_0:152:349)
    at https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en.xh-S9KbEGSE.O/m=gapi_iframes,gapi_iframes_style_common/rt=j/sv=1/d=1/ed=1/am=wQc/rs=AGLTcCNaUSRWzhd71dAsiMVOstVE3KcJZw/cb=gapi.loaded_0:152:259

Что-то мне не хватает? Что еще нужно позаботиться при уничтожении представления?

Обратите внимание, что путь к файлу для кнопки находится под тем же сервером, путь указан как относительный, поэтому для загрузки файла не требуется CORS, все работает нормально, единственная проблема у меня это JS ошибки.

1 Ответ

0 голосов
/ 25 февраля 2020

Попробуйте очистить ваш html следующим образом, он должен избавиться от iframes, но тогда вам, конечно, придется загрузить некоторый контент в ваш документ ...

var AnotherNode = document;
while (AnotherNode.hasChildNodes()) {
    AnotherNode.removeChild(AnotherNode.lastChild);
}
...