JS获取并插入<script> </script>

时间:2012-03-19 15:04:33

标签: javascript jquery get xmlhttprequest

我正在为扩展程序编写此代码,但它返回:

Origin chrome-extension://gjganecebobheilkbpmhmocibjckgidc is not allowed by Access-Control-Allow-Origin

var randomstring = '';var jsid = 0;
    for (var i=0; i<20; i++) {
        var rnum = Math.floor(Math.random() * "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".length);
        randomstring += "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".substring(rnum,rnum+1);
    }
function addS(file){
        var xmlHttp = null;
        xmlHttp = new XMLHttpRequest();
        xmlHttp.open( "GET", file, false );
        xmlHttp.send( null );    
        jsid  = jsid + 1;
        var s = document.createElement('script');
        s.type = 'text/javascript';
        // s.src = file;
        s.innerHTML = xmlHttp.responseText;
        s.async = "true";
        s.id = randomstring+"_unique"+jsid;
        s.className = randomstring;
        document.head.appendChild(s);
    }

增加了( 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js');    添加( 'http://domain.com/functions.js'');

我会使用jQuery但是我不能因为它打破了页面的源代码,我想要做的就是这样做,但是在javascript中并且跳过那个错误

function addS(file){
    jsid  = jsid + 1;
    $.get(file, function(data) {
    var string = '<script type="text/javascript" async="true" id="'+randomstring+"_unique"+jsid+'" class="'+randomstring+'">'+data+'</script>';
        $('head').append(string);
});

其他信息 我要插入jquery.jsfunctions.js以及类似此标记的ID:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" async="true" id="AWhAXksocT6o6OrBxT28_unique1" class="AWhAXksocT6o6OrBxT28"></script>
<script type="text/javascript" src="http://domain.com/functions.js" async="true" id="AWhAXksocT6o6OrBxT28_unique2" class="AWhAXksocT6o6OrBxT28"></script>

使用此代码:

function addS(file){
        jsid  = jsid + 1;
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = file;
        s.async = true;
        s.id = randomstring+"_unique"+jsid;
        s.className = randomstring;
        document.head.appendChild(s);
}

我需要这个ID(通过var randomstring)来保持活着,这是主要问题,因为我需要在函数结束后删除它们但它返回 functions.js: Uncaught ReferenceError: randomstring is not defined使用此代码

$(document).ready(function(){
    alert("Functions loaded");
    //Do some functions....
    $("."+randomstring).delete();
});

谢谢!

2 个答案:

答案 0 :(得分:0)

据我所知,您只是将文件内容粘贴到script标记中。 那么为什么不直接将文件网址传递给src代码的script参数呢?

function addS( file ) {
  var scriptEl = document.createElement( 'script' );
  scriptEl.setAttribute( 'src', file ) ;

  document.head.appenChild( scriptEl );
}

答案 1 :(得分:0)

除非您请求的域实现CORS,否则您无法执行跨域ajax请求。

您目前正在做的是一个跨域的Ajax请求。如果您改为做Sirko建议并通过创建脚本元素的src来请求它,您将url附加到ajax请求,它将正确地发出请求。

function addS(file){
    //var xmlHttp = null;
    //xmlHttp = new XMLHttpRequest();
    //xmlHttp.open( "GET", file, false );
    //xmlHttp.send( null );    
    //jsid  = jsid + 1;
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.src = file;
    //s.innerHTML = xmlHttp.responseText;
    s.async = "true";
    s.id = randomstring+"_unique"+jsid;
    s.className = randomstring;
    document.head.appendChild(s);
}

这个功能的目的是什么?在什么情况下使用它?它完成了什么?