使用可能包含 document.write 的 src 动态添加脚本标签

IT技术 javascript src document.write
2021-01-15 21:22:17

我想在网页中动态包含一个脚本标签,但是我无法控制它的 src,所以 src="source.js" 可能看起来像这样。

document.write('<script type="text/javascript">')
document.write('alert("hello world")')
document.write('</script>')
document.write('<p>goodbye world</p>')

现在一般放

<script type="text/javascript" src="source.js"></script>

在头部工作正常,但有没有其他方法可以source.js使用类似的东西动态添加innerHTML

我试过的 jsfiddle

6个回答
var my_awesome_script = document.createElement('script');

my_awesome_script.setAttribute('src','http://example.com/site.js');

document.head.appendChild(my_awesome_script);

您可以document.createElement()像这样使用该函数:

function addScript( src ) {
  var s = document.createElement( 'script' );
  s.setAttribute( 'src', src );
  document.body.appendChild( s );
}
@mobile 家伙:s.async = true;
2021-03-20 21:22:17
你将如何使这个异步?
2021-03-23 21:22:17
s.setAttribute('src', src); 可能是 s.src = src(我认为?)我知道这不是 pcg
2021-04-06 21:22:17

有一个onload函数,可以在脚本加载成功时调用:

function addScript( src, callback ) {
  var s = document.createElement( 'script' );
  s.setAttribute( 'src', src );
  s.onload=callback;
  document.body.appendChild( s );
}
学到了新东西。好的!
2021-03-27 21:22:17

我写的一个很好的小脚本来加载多个脚本:

function scriptLoader(scripts, callback) {

    var count = scripts.length;

    function urlCallback(url) {
        return function () {
            console.log(url + ' was loaded (' + --count + ' more scripts remaining).');
            if (count < 1) {
                callback();
            }
        };
    }

    function loadScript(url) {
        var s = document.createElement('script');
        s.setAttribute('src', url);
        s.onload = urlCallback(url);
        document.head.appendChild(s);
    }

    for (var script of scripts) {
        loadScript(script);
    }
};

用法:

scriptLoader(['a.js','b.js'], function() {
    // use code from a.js or b.js
});
抱歉...刚刚找到了一个更好的允许依赖的stackoverflow.com/a/1867135/678780
2021-03-31 21:22:17

您可以尝试以下代码片段。

function addScript(attribute, text, callback) {
    var s = document.createElement('script');
    for (var attr in attribute) {
        s.setAttribute(attr, attribute[attr] ? attribute[attr] : null)
    }
    s.innerHTML = text;
    s.onload = callback;
    document.body.appendChild(s);
}

addScript({
    src: 'https://www.google.com',
    type: 'text/javascript',
    async: null
}, '<div>innerHTML</div>', function(){});