Включение файлов Javascript в контент расширения Chrome script

Я пишу расширение Chrome и хочу написать один JS файл, который предоставляет несколько ожидаемых функций, которые не присутствуют в другом, а затем загружают этот другой файл. Я выполняю поведение, аналогичное require в Perl, #include в C или execfile в Python при передаче текущих локалей модулей и globals, как если бы указанный файл был вставлен непосредственно в текущий script.

Большинство существующих решений, которые я могу найти там, ссылаются на включение этих "включает" внутри тегов script, но я не уверен, что это применимо (и если это так, объяснение того, где именно мое расширение вводит все эти script на текущей странице).

Update0

Обратите внимание, что я пишу контент script. По крайней мере, на стороне пользователя, я не предоставляю оригинальный HTML-документ.

Ответ 1

Ну, лучшее решение было для Chrome. Файлы javascript перечислены в том порядке, в котором они загружены в расширение manifest.json, здесь выдержка соответствующее поле:

{
  "content_scripts": [
    {
      "js" : ["contentscript.js", "254195.user.js"]
    }
  ]
}

Файлы javascript эффективно объединяются в заданный порядок и затем выполняются.

Ответ 2

Вы пытались:

<script language="javascript" src="otherfile.js">

или (я не уверен, какой... но я помню, как один из них работал)

document.write('<script type="text/javascript" src="otherfile.js"></script>');

Ответ 3

function load_script (url, cache) 
{ 

    var httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
    httpRequest.open('GET', url, false); 

    if(!cache)
    {
        httpRequest.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    }

    httpRequest.send(null);
    eval(httpRequest.responseText); 

    var s = httpRequest.responseText.split(/\n/); 
    var r = /^function\s*([a-z_]+)/i; 

    for (var i = 0; i < s.length; i++) 
    { 
        var m = r.exec(s[i]); 
        if (m != null) 
        {
            window[m[1]] = eval(m[1]); 
        }
    }
}

load_script("/script.js",true); 

Мы используем это в нашей организации для этого. Кажется, что он работает достаточно хорошо.