将外部脚本嵌入 Next.js 应用程序

Mar*_*ník 6 html javascript reactjs next.js

我一直在尝试将外部 JavaScript 源嵌入到我的 Next.js 应用程序中,但不断收到以下错误:

无法对“文档”执行“写入”:除非显式打开,否则无法从异步加载的外部脚本写入文档。

我尝试使用的代码可以在这里找到- 带有船只的地图可以选择嵌入它。到目前为止,生成此错误的组件如下所示:

<div className={styles['container']}>
    <Script type="text/javascript">
        var width="100%";var height="400"; var mmsi=228402900;
    </Script>
    <Script
        type="text/javascript"
        src="https://www.vesselfinder.com/aismap.js">
    </Script>
</div>
Run Code Online (Sandbox Code Playgroud)

如果我将嵌入代码复制到 CodePen 中,它就可以正常工作 -链接到我的带有嵌入地图的 codepen

有人知道这里可能有什么问题吗?

jul*_*ves 4

出现此问题的原因是外部脚本由 异步加载next/script,从而忽略了document.write()脚本中存在的调用。

来自Document.write()MDN 文档:

注意:document.write()延迟异步脚本中使用将被忽略,并且您将document.write() 在错误控制台中收到类似“异步加载的外部脚本的调用被忽略”的消息。

您需要将Script策略设置为beforeInteractive,以便将脚本添加到<head>,并显式将该defer属性设置为false,以防止异步加载脚本。

<Script
    type="text/javascript"
    src="https://www.vesselfinder.com/aismap.js"
    strategy="beforeInteractive"
    defer={false}
></Script>
Run Code Online (Sandbox Code Playgroud)