可以运行JavaScript代码加载JSONP而不是脚本标记

Can running JavaScript code load JSONP instead of a script tag?

本文关键字:脚本 JSONP 运行 JavaScript 代码 加载      更新时间:2023-09-26

我刚刚让JSONP在这个伟大问题的答案的帮助下工作。现在,在我的设置中,HTML文件通过脚本标签加载JavaScript:

<script src="js/playlistcontroller.js"></script>

现在我的问题是,这个代码在运行时是否可以触发加载我的JSONP响应?

目标是避免出现

<script src="playlistcontent.jsonp"></script>

在HTMLHead中,但在控制器中做这些事情(如果你好奇的话,它恰好是一个AngularJS控制器)。

这可能吗(从JavaScript加载JavaScript)

完全跨浏览器测试的脚本:

var CFLoad = {
    fScript : null,
    isFileReady : function ( v ) {
        return ( ! v || v == "loaded" || v == "complete" || v == "uninitialized" );
    },
    js : function(src,cb,attrs) {
        var s = document.createElement( "script" ),
            done = !1, i;
        s.src = src;
        s.type = "text/javascript";
        for ( i in attrs ) {
            s.setAttribute( i, attrs[ i ] );
        }
        s.onreadystatechange = s.onload = function () {
            if ( ! done && CFLoad.isFileReady( s.readyState ) ) {
                done = !0;
                if(cb) cb(s);
                s.onload = s.onreadystatechange = null;
            }
        };
        window.setTimeout(function() {
            if( !done) {
                done = !0;
                if(cb) cb(s,1);
            }
        }, 5000);
        if(this.fScript===null) this.init();
        this.fScript.parentNode.insertBefore( s, this.fScript );
    },
    css : function(href,cb,attrs) {
        var l = document.createElement("link"),i;
        l.href = href;
        l.rel = "stylesheet";
        l.type = "text/css";
        for ( i in attrs ) {
            l.setAttribute( i, attrs[i]);
        }
        if(this.fScript===null) this.init();
        this.fScript.parentNode.insertBefore(l,this.fScript);
        if(cb) window.setTimeout(cb, 0);
    },
    init : function() {
        this.fScript = document.getElementsByTagName( "script" )[ 0 ];
    }
};

用法

CFLoad.js("http://code.jquery.com/jquery-1.8.3.js", function (script_tag, failed) {
    if(!failed) {
        CFLoad.js("http://code.jquery.com/ui/1.9.2/jquery-ui.js", function(s, f) {
            if(!f) {
                alert("Loaded");
                js13 = jQuery.noConflict(true);
                main();
            }
        })
    }
});

在您的情况下:

CFLoad.js("playlistcontent.jsonp");