【发布时间】:2021-11-20 06:22:16
【问题描述】:
TLDR; 在 Azure 中使用自定义域绑定时出现错误,但在使用默认 azurewebsites 绑定时没有。例如https://somewebsite.com会产生错误,而https://somewebsite.azurewebsites.net不会产生错误。
背景信息:
在我的应用程序中,我使用 Three.js 在我的登录页面上生成背景。我已将所有动画代码包含在一个名为 <Wave /> 的组件中,我将其包含在我的 index.vue 中。
<Wave /> 只有一个 div,我试图在其中添加一个渲染器——这在我的本地计算机上的生产和开发以及默认 azurewebsites 域绑定的生产中都可以完美运行。
但是,当从通过 CloudFlare 设置的自定义绑定访问相同的应用程序服务时,组件失败并且我收到错误消息 DOMException: Node.appendChild: Cannot add children to a Text(这次使用 Firefox)。
然而,这只发生在访问自定义绑定时硬重新加载时,如果我访问应用程序内的其他链接并使用<Wave /> 组件返回到路由,那么它可以完美运行。
一般概念:
<template>
<div ref="animationContainer"></div>
</template>
<script>
export default {
data() {
return {
container: null,
}
},
mounted() {
this.init()
},
methods: {
init() {
this.container = this.$refs.animationContainer
this.container.appendChild(someRenderer)
},
}
</script>
在使用自定义域绑定的部署生产中仅会产生错误:
DOMException: Failed to execute 'appendChild' on 'Node': This node type does not support this method.
at Object.appendChild (/_nuxt/0fdd5ad.js:2:41686)
...
我也尝试将<Wave /> 组件包装在<ClientOnly>-tags 中,但这不会以任何方式改变错误。
任何关于从哪里开始的指针将不胜感激。
【问题讨论】:
-
您的问题是生命周期问题,事实上您主要尝试访问 DOM 的 ID,这不是推荐的处理方式。更喜欢使用
refs。这与子域无关。您的应用加载 IMO 的更多方式。 -
我似乎粘贴了我的旧代码(这个问题已经有一段时间了)。我目前正在使用 $refs 来获取容器,但是我仍然遇到同样的问题@kissu。
标签: javascript vue.js three.js azure-web-app-service nuxt.js