Я пишу расширение 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);
Мы используем это в нашей организации для этого. Кажется, что он работает достаточно хорошо.