Включение файлов Javascript в скрипт содержимого расширения Chrome - PullRequest
13 голосов
/ 28 сентября 2010

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

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

Update0

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

Ответы [ 3 ]

18 голосов
/ 05 октября 2010

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

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

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

0 голосов
/ 28 сентября 2010

Вы пробовали:

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

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

document.write('<script type="text/javascript" src="otherfile.js"></script>');
0 голосов
/ 28 сентября 2010
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); 

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

...