JS получить и вставить в <script> - PullRequest
0 голосов
/ 19 марта 2012

Я пишу этот код для расширения , но оно возвращает:

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);
    }

addS ('https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'); addS ('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.js и functions.js с таким идентификатором, как теги:

<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);
}

мне нужен этот идентификатор (через var randomstring), чтобы сохранить его в живых, это главная проблема, потому что мне нужно будет удалить оба после завершения функции, но она возвращает functions.js: Uncaught ReferenceError: randomstring is not defined, используя этот код

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

Вы не можете выполнить междоменный запрос ajax, если домен, который вы запрашиваете, не реализует CORS.

То, что вы делаете в настоящее время, является междоменным запросом ajax. Если вы вместо этого сделаете то, что предложил Сирко, и запросите его, сделав src элемента script, к которому вы добавляете 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);
}

Какова цель этой функции? В каком контексте это используется? Что это делает?

0 голосов
/ 19 марта 2012

Насколько я вижу, вы просто вставляете содержимое файла в тег script. Так почему бы не передать URL файла непосредственно параметру src тега script?

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

  document.head.appenChild( scriptEl );
}
...