Turbolinks Rails 应用程序未捕获类型错误:无法读取属性"父节点"



我正试图在RubyonRails涡轮链接网站中使用Freshdesk小部件。

自从我开始使用这个小部件以来,在初始页面加载后导航到其他页面时,我的控制台中总是会出现以下错误:

> VM2797 <widget_id>.js:1 Uncaught TypeError: Cannot read property
> 'postMessage' of null
>     at Object.postMessage (VM2797 <widget_id>.js:1)
>     at Object.widgetRenderComplete (VM2797 <widget_id>.js:1)
>     at Object.handleMessage (VM2797 <widget_id>.js:1)

这是我在添加带有id的div(我在视图中称之为分部,id作为变量(之前的代码

<script>
window.fwSettings={
'widget_id': <%= widget_id %>
};
!function(){if("function"!=typeof window.FreshworksWidget){var n=function(){n.q.push(arguments)};n.q=[],window.FreshworksWidget=n}}()
</script>
<script type='text/javascript' src='https://widget.freshworks.com/widgets/<%= widget_id %>.js' async defer></script>

查看示例

<%= render "shared/freshdesk_widget", widget_id: 60000003593 %>

我考虑过使用eventListener涡轮链接:在缓存之前,它在缓存之前查找div并将其删除。

这就是现在的样子

<script type='text/javascript'>
document.addEventListener("turbolinks:before-cache", function() {
const deleteable = document.getElementById("div_to_delete");
deleteable.parentNode.removeChild(deleteable);
})
</script>
<div id="div_to_delete">
<script>
window.fwSettings={
'widget_id': <%= widget_id %>
};
!function(){if("function"!=typeof window.FreshworksWidget){var n=function(){n.q.push(arguments)};n.q=[],window.FreshworksWidget=n}}()
</script>
<script type='text/javascript' src='https://widget.freshworks.com/widgets/<%= widget_id %>.js' async defer></script>
</div> 

我面临两个错误

> VM49956:4 Uncaught TypeError: Cannot read property 'parentNode' of
> null
>         at HTMLDocument.<anonymous> (<anonymous>:4:15)
>         at 
Object../node_modules/turbolinks/dist/turbolinks.js.e.dispatch
> (turbolinks.js:5)
>         at r.notifyApplicationBeforeCachingSnapshot 
(turbolinks.js:6)
>         at r.cacheSnapshot (turbolinks.js:6)
>         at r.cacheSnapshot (turbolinks.js:5)
>         at r.<anonymous> (turbolinks.js:5)
>         at turbolinks.js:5

和之前一样

> VM2797 <widget_id>.js:1 Uncaught TypeError: Cannot read property
> 'postMessage' of null
>     at Object.postMessage (VM2797 <widget_id>.js:1)
>     at Object.widgetRenderComplete (VM2797 <widget_id>.js:1)
>     at Object.handleMessage (VM2797 <widget_id>.js:1)

提前感谢!干杯

删除元素不会删除DOM中的小部件,因此,据我所见,您所要做的是仅在window.FreshworksWidget变量未定义的情况下初始化小部件。

用以下行替换所有代码:

<script>
if (window.FreshworksWidget === undenfined ) {
window.fwSettings={
'widget_id': <%= widget_id %>
};
!function(){if("function"!=typeof window.FreshworksWidget){var n=function(){n.q.push(arguments)};n.q=[],window.FreshworksWidget=n}}()
}
</script>

最新更新