Microsoft Graph 工具包的跨站点问题

Cross site issue with Microsoft Graph Toolkit

我正在关注 this tutorial 创建一个使用 Microsoft 365 登录的简单 Web 应用程序。我目前在本地调试时遇到此错误 (http://localhost:8080):

警告:

mgt-loader.js:61 A parser-blocking, cross site (i.e. different eTLD+1) script, https://unpkg.com/@microsoft/mgt/dist/bundle/wc/webcomponents-loader.js, is invoked via document.write. The network request for this script MAY be blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message. See https://www.chromestatus.com/feature/5718547946799104 for more details.

在 Azure 中,我将重定向 URI 设置为匹配 (http://localhost:8080)。

谷歌搜索后,我尝试添加 async,但随后收到此警告并且没有出现登录按钮:

mgt-loader.js:61 Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.

什么会导致此警告,我该如何解决?

首先,查看 document.write 的工作原理:https://developer.mozilla.org/en-US/docs/Web/API/Document/write

您将理解为什么您不能在异步上下文中 运行 document.write(在任何页面的控制台中尝试 运行ning document.write('Hello world!');)。

警告告诉您,如果某人的互联网连接不稳定或不良,将来 Chrome 可能会阻止解析器阻止(同步)跨站点(与网站不来自同一域)脚本。

如果你想让它在没有警告的情况下同步 运行,你必须将该 JS 代码与你自己的代码捆绑在一起,或者只从你自己的来源提供它,就像你的网站一样(例如 localhost:8080).您可以下载 @microsoft/mgt npm 包并进行捆绑 - 使用 gulp、webpack 或您选择的其他工具。

https://unpkg.com/@microsoft/mgt@2.4.0/dist/bundle/wc/webcomponents-loader.js

此脚本尝试区分异步和同步上下文(第 175 行)和 运行 document.appendChild(而不是 write)用于异步上下文 - 但由于某种原因检查失败(readyState === loading).

https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState

如果你想运行以non-blocking的方式,你可以尝试自己修复脚本。

该工具包有一个 Github 回购协议 (https://www.npmjs.com/package/@microsoft/mgt),但没有关于异步加载的问题,也没有关于您注意到的警告的问题 - 所以可能没有其他人注意到或还没想好。