javascript - 如何在React中动态加载脚本

标签 javascript html reactjs

我在 React 端加载脚本时遇到问题

这是脚本:

<script>!function(e,t,s,i){var n="InfogramEmbeds",o=e.getElementsByTagName("script")[0],d=/^http:/.test(e.location)?"http:":"https:";if(/^\/{2}/.test(i)&&(i=d+i),window[n]&&window[n].initialized)window[n].process&&window[n].process();else if(!e.getElementById(s)){var r=e.createElement("script");r.async=1,r.id=s,r.src=i,o.parentNode.insertBefore(r,o)}}(document,0,"infogram-async","https://e.infogram.com/js/dist/embed-loader-min.js");</script>

我尝试过这样的事情:

const script = document.createElement("script");
script.src = scriptUrl;
script.charset = "utf-8";
script.async = true;
script.onload = function() {
    !function(e,t,s,i){var n="InfogramEmbeds",o=e.getElementsByTagName("script")[0],d=/^http:/.test(e.location)?"http:":"https:";if(/^\/{2}/.test(i)&&(i=d+i),window[n]&&window[n].initialized)window[n].process&&window[n].process();else if(!e.getElementById(s)){var r=e.createElement("script");r.async=1,r.id=s,r.src=i,o.parentNode.insertBefore(r,o)}}(document,0,"infogram-async","https://e.infogram.com/js/dist/embed-loader-min.js");
};
document.body.appendChild(script);

如果我将脚本直接添加到 header 中,那么它就可以正常工作。

最佳答案

您需要做的就是调用 componentDidMount 内部的函数并将子项附加到 head 中,如下所示

componentDidMount() {
        const script = document.createElement("script");
        script.src = 'https://www.google.com'; // whatever url you want here
        script.charset = "utf-8";
        script.async = true;
        script.onload = function () {
            !function (e, t, s, i) { var n = "InfogramEmbeds", o = e.getElementsByTagName("script")[0], d = /^http:/.test(e.location) ? "http:" : "https:"; if (/^\/{2}/.test(i) && (i = d + i), window[n] && window[n].initialized) window[n].process && window[n].process(); else if (!e.getElementById(s)) { var r = e.createElement("script"); r.async = 1, r.id = s, r.src = i, o.parentNode.insertBefore(r, o) } }(document, 0, "infogram-async", "https://e.infogram.com/js/dist/embed-loader-min.js");
        };
        document.head.appendChild(script);
    }

关于javascript - 如何在React中动态加载脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55124736/

相关文章:

javascript - 如何使用 ExtJs rowexpander 展开或折叠所有行?

javascript - ng-app、ng-repeat、ng Controller 等……从 HTML DOM Angular 来看它们是什么以及 JS 如何访问它们?

php - MYSQL 按喜欢/不喜欢和受欢迎程度排序

javascript - ReactJS - this.functionname 不是函数

javascript - 如何使用for/in循环传递对象属性?

javascript - 浏览器中的异步 XMLHttpRequest 阻塞 UI

html - 在另一个 div 之上放置一个对话框

javascript - 在 React 中使用 Enzyme 模拟带有参数的 onClick 方法

javascript - 为什么 React JS 中的错误边界不起作用

javascript - 使用 jQuery-ui slider 或 selectable 时触发的函数