Javascript JS获取并插入到<;脚本>;

Javascript JS获取并插入到<;脚本>;,javascript,jquery,get,xmlhttprequest,Javascript,Jquery,Get,Xmlhttprequest,我正在为一个扩展编写这段代码,但它返回: 源铬-extension://gjganecebobheilkbpmhmocibjckgidc 访问控制允许源站不允许此操作 var randomstring = '';var jsid = 0; for (var i=0; i<20; i++) { var rnum = Math.floor(Math.random() * "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmn

我正在为一个扩展编写这段代码,但它返回:

源铬-extension://gjganecebobheilkbpmhmocibjckgidc 访问控制允许源站不允许此操作

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);
    }
使用此代码:

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)来保持活动状态,这是主要问题,因为我需要在函数结束后删除这两个ID,但它返回
functions.js:Uncaught ReferenceError:randomstring未使用此代码定义

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

谢谢

据我所知,您只是将文件内容粘贴到
脚本
标记中。 那么,为什么不直接将文件url传递给
脚本
标记的
src
参数呢

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

  document.head.appenChild( scriptEl );
}

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

您当前正在做的是一个跨域ajax请求。如果您按照Sirko的建议执行,并通过将url附加到ajax请求中的脚本元素的src进行请求,它将正确地发出请求

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

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

我很好奇是什么阻止了您使用jQuery。@mblase75它是一个扩展,jQuery阻止了原始代码的工作。比如说,它就像Facebook。好吧,你的错误听起来像是在违反安全规则,试图使用AJAX访问外部文件。如果是这样的话,你就倒霉了。@mblase75我并没有完全违反这些规则,我更新了这个问题,以便你能理解最后一次编辑的工作…Wrt:你知道,删除脚本元素不会删除该元素中脚本创建的任何对象/函数/任何东西吗?要删除所有内容,您必须使用名称空间并删除DOM内部名称空间的内容。@Luis您可以使用
data-*
属性将所有附加信息附加到相应的
script
标记中。我想,我还是很想念你的问题。那我该怎么办呢?我需要使用jQuery,但我不能,因为它会破坏页面代码。@Luis两个步骤:第一步,看一下。另一个取决于您绑定到jQuery的程度,或者您是否可以提取它的一些函数并将它们移动到另一个命名空间以防止共谋(假设这就是“破坏页面代码”的原因)。@Luis-我不知道您在哪里定义
randomstring
,所以,您的删除代码不起作用,对吗?你也可以发布吗?那段代码在哪里?要让它工作,它必须与我答案中的代码位于同一个文件中。
function addS( file ) {
  var scriptEl = document.createElement( 'script' );
  scriptEl.setAttribute( 'src', file ) ;

  document.head.appenChild( scriptEl );
}
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);
}