Як ўключыць файл JavaScript у іншы файл JavaScript?

Ці ёсць у JavaScript нешта падобнае на @import ў CSS, што дазваляе ўключаць файл JavaScript у іншы файл JavaScript?

4465
04 июня '09 в 14:59 2009-06-04 14:59 зададзены Alec Smart 04 чэрвеня '09 у 14:59 2009-06-04 14:59
@ 56 адказаў
  • 1
  • 2

У старых версіях JavaScript не было імпарту, ўключэння або патрабаванні, таму было распрацавана шмат розных падыходаў да гэтай праблемы.

Але з 2015 года (ES6) у JavaScript з'явіўся стандарт модуляў ES6 для імпарту модуляў ў Node.js, які таксама падтрымліваецца большасцю сучасных браўзэраў .

Для сумяшчальнасці са старымі браўзэрамі можна выкарыстоўваць інструменты зборкі і / або пераносу .

ES6 Модулі

Модулі ECMAScript (ES6) падтрымліваюцца ў Node.js пачынаючы з версіі --experimental-modules сцягам --experimental-modules . Усе задзейнічаныя файлы павінны мець пашырэнне .mjs .

 // main.mjs import { hello } from 'module'; // or './module' let val = hello(); // val is "Hello"; 

Модулі ECMAScript ў браўзэрах

Браўзэры падтрымліваюць загрузку модуляў ECMAScript напрамую (не патрабуюцца такія інструменты, як Webpack) пачынаючы з Safari 10.1, Chrome 61, Firefox 60 і Edge 16. Праверце бягучую падтрымку ў caniuse .

 // hello.mjs export function hello(text) { const div = document.createElement('div'); div.textContent = 'Hello ${text}'; document.body.appendChild(div); } 

Даведайцеся больш на https://jakearchibald.com/2017/es-modules-in-browsers/

Дынамічны імпарт у браўзэрах

Дынамічны імпарт дазваляе скрыпту загружаць іншыя скрыпты па меры неабходнасці:

чытайце на старонцы https://developers.google.com/web/updates/2017/11/dynamic-import. 

Node.js патрабуе

Стары стыль імпарту модуляў, усё яшчэ шырока выкарыстоўваецца ў Node.js, гэта сістэма module.exports / require .

 // server.js const myModule = require('./mymodule'); let val = myModule.hello(); // val is "Hello" 

Існуюць і іншыя спосабы ўключэння JavaScript вонкавага змесціва ў браўзэрах, якія не патрабуюць папярэдняй апрацоўкі.

AJAX Загрузка

Вы можаце загрузіць дадатковы скрыпт з дапамогай выкліку AJAX, а затым выкарыстоўваць eval для яго запуску. Гэта найбольш просты спосаб, але ён абмежаваны вашым даменам з-за мадэлі бяспекі пясочніцы JavaScript. Выкарыстанне eval таксама адкрывае шлях да памылак, ўзломаў і праблемам бяспекі.

загрузка загрузка

Як і ў выпадку дынамічнага імпарту, вы можаце загружаць адзін або некалькі сцэнарыяў з дапамогай выкліку fetch выкарыстоўваючы абяцанні для кіравання парадкам выканання залежнасцяў сцэнарыяў з дапамогай бібліятэкі Fetch Inject :

 fetchInject([ 'https://cdn.jsdelivr.net/momentjs/2.17.1/moment.min.js' ]).then(() => { console.log('Finish in less than ${moment().endOf('year').fromNow(true)}') }) 

загрузка jQuery

Бібліятэка jQuery забяспечвае загрузку ў адзін радок :

 function dynamicallyLoadScript(url) { var script = document.createElement("script"); // create a script DOM node script.src = url; // set its src to the provided URL document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead) } section of the page function dynamicallyLoadScript(url) { var script = document.createElement("script"); // create a script DOM node script.src = url; // set its src to the provided URL document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead) } body section instead function dynamicallyLoadScript(url) { var script = document.createElement("script"); // create a script DOM node script.src = url; // set its src to the provided URL document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead) } 

Гэта функцыя дадасць новы <script> у канец падзелу head старонкі, дзе атрыбут src усталяваны на URL-адрас, які перадаецца функцыі ў якасці першага параметру.

Абодва гэтыя рашэнні абмяркоўваюцца і ілюструюцца ў JavaScript Madness: дынамічная загрузка скрыптоў .

Выяўленне, калі скрыпт быў выкананы

Зараз ёсць вялікая праблема, пра якую вы павінны ведаць. Гэта мае на ўвазе, што вы загружаеце код выдалена. Сучасныя вэб-браўзэры загружаюць файл і працягваюць выконваць ваш бягучы скрыпт, таму што яны загружаюць ўсе асінхронна для павышэння прадукцыйнасці. (Гэта ставіцца як да метаду jQuery, так і да метаду ручной дынамічнай загрузкі скрыпту.)

Гэта азначае, што калі вы будзеце выкарыстоўваць гэтыя трукі наўпрост, вы не зможаце выкарыстоўваць свой нядаўна загружаны код на наступным радку пасля таго, як вы папрасілі яго загрузіць, таму што ён усё яшчэ будзе загружацца.

Напрыклад: my_lovely_script.js ўтрымлівае MySuperObject :

 function loadScript(url, callback) { // Adding the script tag to the head as suggested before var head = document.head; var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; // Then bind the event to the callback function. // There are several events for cross browser compatibility. script.onreadystatechange = callback; script.onload = callback; // Fire the loading head.appendChild(script); } suggested before function loadScript(url, callback) { // Adding the script tag to the head as suggested before var head = document.head; var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; // Then bind the event to the callback function. // There are several events for cross browser compatibility. script.onreadystatechange = callback; script.onload = callback; // Fire the loading head.appendChild(script); } 

Затым вы пішаце код, які хочаце выкарыстоўваць ПАСЛЯ таго, як скрыпт загружаецца ў лямбда-функцыю :

 loadScript("my_lovely_script.js", myPrettyCode); 

Звярніце ўвагу, што сцэнар можа выконвацца пасля загрузкі DOM ці раней, у залежнасці ад браўзэра і ад таго, ці ўключаная радок script.async = false; , Там ёсць выдатная артыкул аб загрузцы Javascript ў цэлым, якая абмяркоўвае гэта.

Зліццё / папярэдняя апрацоўка зыходнага кода

Як згадвалася ў верхняй частцы гэтага адказу, многія распрацоўшчыкі выкарыстоўваюць у сваіх праектах інструменты зборкі / пераносу, такія як Parcel, Webpack або Babel, што дазваляе ім выкарыстоўваць маючы адбыцца сінтаксіс JavaScript, забяспечваць зваротную сумяшчальнасць для старых браўзэраў, аб'ядноўваць файлы, мінімізаваць, выконваць разбіццё кода і г.д.

3838
04 июня '09 в 15:13 2009-06-04 15:13 адказ дадзены e-satis 04 чэрвеня '09 у 15:13 2009-06-04 15:13

Калі хто-то шукае нешта больш прасунутае, паспрабуйце RequireJS . Вы атрымаеце дадатковыя перавагі, такія як кіраванне залежнасцямі, палепшаны паралелізм і пазбягання дублявання (гэта значыць атрыманне сцэнара больш за адзін раз).

Вы можаце запісаць свае файлы JavaScript у "модулі", а затым спасылацца на іх як на залежнасці ў іншых скрыптах. Ці вы можаце выкарыстоўваць RequireJS як простае рашэнне "ідзі і атрымай гэты скрыпт".

прыклад:

Вызначыце залежнасці як модулі:

некаторыя-dependency.js

border=0
 define(['lib/dependency1', 'lib/dependency2'], function (d1, d2) { //Your actual script goes here. //The dependent scripts will be fetched if necessary. return libraryObject; //For example, jQuery object }); 

creation.js - гэта ваш "асноўны" файл JavaScript, які залежыць ад some-dependency.js

 require(['some-dependency'], function(dependency) { //Your script goes here //some-dependency.js is fetched. //Then your script is executed }); 

Вытрымка з GitHub README:

RequireJS загружае простыя файлы JavaScript, а таксама больш пэўныя модулі. Ён аптымізаваны для выкарыстання ў браўзэры, у тым ліку ў Web Worker, але можа выкарыстоўвацца ў іншых асяроддзях JavaScript, такіх як Rhino і Node. Ён рэалізуе API асінхроннага модуля.

RequireJS выкарыстоўвае простыя тэгі сцэнарыяў для загрузкі модуляў / файлаў, таму ён павінен забяспечваць лёгкую адладку. Яго можна выкарыстоўваць проста для загрузкі існуючых файлаў JavaScript, таму вы можаце дадаць яго ў існуючы праект без неабходнасці перапісваць файлы JavaScript.

...

532
07 июня '12 в 23:55 2012-06-07 23:55 адказ дадзены John Strickler 07 чэрвеня '12 у 23:55 2012-06-07 23:55

На самай справе ёсць спосаб загрузіць файл JavaScript ня асінхронна, так што вы можаце выкарыстоўваць функцыі, уключаныя ў ваш нядаўна загружаны файл, адразу пасля загрузкі, і я думаю, што ён працуе ва ўсіх браўзэрах.

Вам трэба выкарыстоўваць jQuery.append() у элеменце <head> вашай старонкі, гэта значыць:

 $("head").append('<script type="text/javascript" src="' + script + '"></script>'); 

Аднак гэты метад таксама мае праблему: калі ў імпартавала файле JavaScript ўзнікае памылка, Firebug (а таксама Firefox Error Console і Chrome Developer Tools таксама паведамяць пра сваё месца няправільна, што з'яўляецца вялікай праблемай, калі вы выкарыстоўваеце Firebug для адсочвання Памылкі JavaScript шмат (я раблю ). Firebug па нейкай прычыне проста не ведае аб нядаўна загружаным файле, таму, калі ў гэтым файле адбываецца памылка, ён паведамляе, што яна адбылася ў вашым асноўным HTML- файле, і ў вас будуць праблемы з пошукам сапраўднай прычыны памылкі.

Але калі гэта не праблема для вас, тады гэты метад павінен працаваць.

На самай справе я напісаў убудова jQuery з імем $ .import_js (), які выкарыстоўвае гэты метад:

 (function($) {  var import_js_imported = []; $.extend(true, { import_js : function(script) { var found = false; for (var i = 0; i < import_js_imported.length; i++) if (import_js_imported[i] == script) { found = true; break; } if (found == false) { $("head").append('<script type="text/javascript" src="' + script + '"></script>'); import_js_imported.push(script); } } }); })(jQuery); 

Таму ўсё, што вам трэба зрабіць для імпарту JavaScript, гэта:

 $.import_js('/path_to_project/scripts/somefunctions.js'); 

Я таксама зрабіў просты тэст для гэтага ў прыкладах .

Яна ўключае ў сябе main.js файл ў галоўным HTML, а затым сцэнар у main.js выкарыстоўвае $.import_js() , каб імпартаваць дадатковы файл з імем included.js , які вызначае гэтую функцыю:

 function hello() { alert("Hello world!"); } 

І адразу ж пасля ўключэння included.js , то hello() функцыя выклікаецца, і вы атрымаеце апавяшчэнне.

(Гэты адказ з'яўляецца адказам на каментар e-sat).

173
28 апр. адказ дадзены Kipras 28 крас. 2011-04-28 18:25 '11 у 18:25 2011-04-28 18:25

Іншы спосаб, які, на мой погляд, нашмат чысцей, - гэта зрабіць сінхронны Ajax-запыт замест выкарыстання <script> . Да таго ж, як апрацоўвае Node.js.

Вось прыклад выкарыстання jQuery:

 function require(script) { $.ajax({ url: script, dataType: "script", async: false, // <-- This is the key success: function () { // all good... }, error: function () { throw new Error("Could not load script " + script); } }); } 

Затым вы можаце выкарыстоўваць яго ў сваім кодзе, як калі б вы звычайна выкарыстоўвалі include:

 require("/scripts/subscript.js"); 

І зможаце выклікаць функцыю з неабходнага скрыпту ў наступным радку:

 subscript.doSomethingCool(); 
138
08 сент. адказ дадзены Ariel 08 сент. 2011-09-08 21:22 '11 а 21:22 2011-09-08 21:22

Для вас ёсць добрыя навіны. Вельмі хутка вы зможаце лёгка загрузіць код JavaScript. Гэта стане стандартным спосабам імпарту модуляў кода JavaScript і стане часткай самага ядра JavaScript.

Вы проста павінны напісаць import cond from 'cond.js'; загрузіць макрас з імем cond з файла cond.js

Такім чынам, вам не трэба спадзявацца на якую-небудзь інфраструктуру JavaScript і не трэба відавочна рабіць выклікі Ajax .

Спасылацца на:

90
03 июля '12 в 16:32 2012-07-03 16:32 адказ дадзены Imdad 03 ліпеня '12 ў 16:32 2012-07-03 16:32

Можна дынамічна генераваць тэг JavaScript і дадаваць яго ў дакумент HTML з іншага кода JavaScript. Гэта загрузіць мэтавай файл JavaScript.

 function includeJs(jsFilePath) { var js = document.createElement("script"); js.type = "text/javascript"; js.src = jsFilePath; document.body.appendChild(js); } includeJs("/path/to/some/file.js"); 
78
04 июня '09 в 15:02 2009-06-04 15:02 адказ дадзены Svitlana Maksymchuk 04 чэрвеня '09 у 15:02 2009-06-04 15:02

import аператара ў ECMAScript 6.

сінтаксіс

 import name from "module-name"; import { member } from "module-name"; import { member as alias } from "module-name"; import { member1 , member2 } from "module-name"; import { member1 , member2 as alias2 , [...] } from "module-name"; import name , { member [ , [...] ] } from "module-name"; import "module-name" as name; 
61
17 апр. адказ дадзены draupnie 17 крас. 2015-04-17 04:56 '15 у 04:56 2015/04/17 04:56

Можа быць, вы можаце выкарыстоўваць гэтую функцыю, якую я знайшоў на гэтай старонцы Як мне ўключыць файл JavaScript у файл JavaScript? :

 function include(filename) { var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.src = filename; script.type = 'text/javascript'; head.appendChild(script) } 
51
04 июня '09 в 15:04 2009-06-04 15:04 адказ дадзены Arnaud Gouder de Beauregard 04 чэрвеня '09 у 15:04 2009-06-04 15:04

Вось сінхронная версія без jQuery:

 function myRequire( url ) { var ajax = new XMLHttpRequest(); ajax.open( 'GET', url, false ); // <-- the 'false' makes it synchronous ajax.onreadystatechange = function () { var script = ajax.response || ajax.responseText; if (ajax.readyState === 4) { switch( ajax.status) { case 200: eval.apply( window, [script] ); console.log("script loaded: ", url); break; default: console.log("ERROR: script not loaded: ", url); } } }; ajax.send(null); } 

Звярніце ўвагу, што для атрымання гэтага працоўнага междомена сервер павінен будзе ўсталяваць загаловак allow-origin ў сваім адказе.

47
11 дек. адказ дадзены heinob 11 снеж. 2013-12-11 14:54 '13 у 14:54 2013/12/11 14:54

Толькі што я напісаў гэты код JavaScript (выкарыстоўваючы Prototype для маніпулявання DOM ):

 var require = (function() { var _required = {}; return (function(url, callback) { if (typeof url == 'object') { // We've (hopefully) got an array: time to chain! if (url.length > 1) { // Load the nth file as soon as everything up to the // n-1th one is done. require(url.slice(0, url.length - 1), function() { require(url[url.length - 1], callback); }); } else if (url.length == 1) { require(url[0], callback); } return; } if (typeof _required[url] == 'undefined') { // Haven't loaded this URL yet; gogogo! _required[url] = []; var script = new Element('script', { src: url, type: 'text/javascript' }); script.observe('load', function() { console.log("script " + url + " loaded."); _required[url].each(function(cb) { cb.call(); // TODO: does this execute in the right context? }); _required[url] = true; }); $$('head')[0].insert(script); } else if (typeof _required[url] == 'boolean') { // We already loaded the thing, so go ahead. if (callback) { callback.call(); } return; } if (callback) { _required[url].push(callback); } }); })(); up to the var require = (function() { var _required = {}; return (function(url, callback) { if (typeof url == 'object') { // We've (hopefully) got an array: time to chain! if (url.length > 1) { // Load the nth file as soon as everything up to the // n-1th one is done. require(url.slice(0, url.length - 1), function() { require(url[url.length - 1], callback); }); } else if (url.length == 1) { require(url[0], callback); } return; } if (typeof _required[url] == 'undefined') { // Haven't loaded this URL yet; gogogo! _required[url] = []; var script = new Element('script', { src: url, type: 'text/javascript' }); script.observe('load', function() { console.log("script " + url + " loaded."); _required[url].each(function(cb) { cb.call(); // TODO: does this execute in the right context? }); _required[url] = true; }); $$('head')[0].insert(script); } else if (typeof _required[url] == 'boolean') { // We already loaded the thing, so go ahead. if (callback) { callback.call(); } return; } if (callback) { _required[url].push(callback); } }); })(); 

выкарыстанне:

 <script src="prototype.js"></script> <script src="require.js"></script> <script> require(['foo.js','bar.js'], function () {  }); </script> 

Сутнасць: http://gist.github.com/284442 .

43
23 янв. адказ дадзены nornagon 23 студз. 2010-01-23 08:20 '10 у 08:20 2010-01-23 08:20

Вось абагульненая версія таго, як Facebook робіць гэта для іх ўсюдыіснай кнопкі "Падабаецца":

http://www.jspatterns.com/the-ridiculous-case-of-adding-a-script-element/ . 

36
08 июля '15 в 5:41 2015-07-08 05:41 адказ дадзены Dan Dascalescu 08 ліпеня '15 у 5:41 2015/07/08 05:41

Калі вы хочаце ў чыстым JavaScript, вы можаце выкарыстоўваць document.write .

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

Калі вы выкарыстоўваеце бібліятэку jQuery, вы можаце выкарыстоўваць метад $.getScript .

 $.getScript("another_script.js"); 
30
13 нояб. адказ дадзены Venu immadi 13 лістапада. 2013-11-13 12:18 '13 у 12:18 2013/11/13 00:18

Гэта, бадай, самая вялікая слабасць JavaScript на мой погляд. На працягу многіх гадоў у мяне не было праблем з адсочваннем залежнасцяў. У любым выпадку, здаецца, што адзінае практычнае рашэнне - гэта выкарыстоўваць скрыпт, які ўключаны ў HTML файл, і, такім чынам, жудасна зрабіць ваш код JavaScript залежным ад карыстальніка, уключаючы патрэбны вам крыніца, і зрабіць яго паўторнае выкарыстанне недружалюбным.

Выбачайце, калі гэта гучыць як лекцыя;) Гэта мая (дрэнная) звычка, але я хачу падкрэсліць гэта.

Праблема вяртаецца да таго ж, што і ўсё астатняе ў сетцы, да гісторыі JavaScript. Гэта сапраўды не было распрацавана, каб выкарыстоўвацца ў шырокім распаўсюдзе, якое гэта выкарыстала сёння. Netscape стварыў мову, які дазваляў бы вам кіраваць некалькімі рэчамі, але яны не меркавалі яго шырокага выкарыстання для многіх рэчаў, як гэта прынята цяпер, і па той ці іншай прычыне ён пашырыўся адтуль, не закранаючы некаторыя фундаментальныя слабыя бакі арыгінальнай стратэгіі.

Гэта не адзін, вядома. HTML не быў распрацаваны для сучаснай вэб-старонкі; ён быў распрацаваны для таго, каб выказаць логіку дакумента, каб чытачы (браўзэры ў сучасным свеце) маглі адлюстроўваць гэта ў адпаведнай форме, якая была ў межах магчымасцяў сістэмы, і спатрэбіліся гады для вырашэння (іншая чым ўзламаць MS і Netscape). CSS вырашае гэтую праблему, але гэта было доўгі час і нават даўжэй, каб прымусіць людзей выкарыстоўваць яго, а не ўстояныя метады BAD. Гэта здарылася, хвала.

Спадзяемся, што JavaScript (асабліва цяпер ён з'яўляецца часткай стандарту) будзе развівацца, каб прыняць канцэпцыю правільнай модульнасці (а таксама некаторых іншых рэчаў), як і любы іншы (існуючы) мова праграмавання ў свеце, і гэтая глупства знікне. Да таго часу, пакуль табе проста не спадабаецца і я не прыму гэта, я баюся.

30
24 мая '12 в 12:51 2012-05-24 12:51 адказ дадзены Stephen Whipp 24 мая '12 у 12:51 2012-05-24 00:51

Большасць прадстаўленых тут рашэнняў мяркуюць дынамічную загрузку. Замест гэтага я шукаў кампілятар, які збірае ўсе залежныя файлы ў адзін выхадны файл. Гэтак жа, як препроцессора Less / Sass @import з правілам CSS @import . Бо я не знайшоў нічога прыстойнага ў гэтым родзе, я напісаў просты інструмент для вырашэння праблемы.

Такім чынам, вось кампілятар https://github.com/dsheiko/jsic , які надзейна замяняе $import("file-path") запрошваюць змесцівам файла. Вось адпаведны убудова Grunt : https://github.com/dsheiko/grunt-jsic .

У асноўнай галінцы jQuery яны проста аб'ядноўваюць атамарнага зыходныя файлы ў адзін, пачынаючы з intro.js і заканчваючы outtro.js . Гэта мяне не задавальняе, бо не забяспечвае гнуткасці пры распрацоўцы зыходнага кода. Праверце, як гэта працуе з JSIC:

SRC / main.js

 var foo = $import("./Form/Input/Tel"); 

ЦСІ / Форма / уваход /Tel.js

 function() { return { prop: "", method: function(){} } } 

Цяпер мы можам запусціць кампілятар:

 node jsic.js src/main.js build/mail.js 

І атрымаеце аб'яднаны файл

будаваць /main.js

 var foo = function() { return { prop: "", method: function(){} } }; 
24
14 июля '13 в 0:44 2013-07-14 00:44 адказ дадзены Dmitry Sheiko 14 ліпеня '13 ў 0:44 2013/07/14 00:44

Вы таксама можаце сабраць свае скрыпты, выкарыстоўваючы PHP :

Файл main.js.php :

 <?php header('Content-type:text/javascript; charset=utf-8'); include_once("foo.js.php"); include_once("bar.js.php"); ?> // Main JavaScript code goes here 
24
28 дек. адказ дадзены Calmarius 28 снеж. 2010-12-28 00:03 '11 у 0:03 2010-12-28 00:03

Калі ваш намер загрузіць файл JavaScript выкарыстоўвае функцыі з імпартаванага / уключанага файла, вы таксама можаце вызначыць глабальны аб'ект і ўсталяваць функцыі ў якасці элементаў аб'екта. напрыклад:

global.js

 A = {}; 

file1.js

 A.func1 = function() { console.log("func1"); } 

file2.js

 A.func2 = function() { console.log("func2"); } 

main.js

 A.func1(); A.func2(); 

Вам проста трэба быць асцярожным, калі вы ўключаеце скрыпты ў HTML файл. Парадак павінен быць такім, як паказана ніжэй:

 <head> <script type="text/javascript" src="global.js"></script> <script type="text/javascript" src="file1.js"></script> <script type="text/javascript" src="file2.js"></script> <script type="text/javascript" src="main.js"></script> </head> 
20
24 июля '15 в 9:53 2015-07-24 09:53 адказ дадзены Adem İlhan 24 ліпеня '15 г. у 9:53 2015/07/24 09:53

Гэта павінна зрабіць:

 xhr = new XMLHttpRequest(); xhr.open("GET", "/soap/ajax/11.0/connection.js", false); xhr.send(); eval(xhr.responseText); 
18
24 марта '13 в 22:32 2013-03-24 22:32 адказ дадзены tggagne 24 сакавіка '13 у 22:32 2013/03/24 22:32

Або замест ўключэння падчас выканання выкарыстоўвайце сцэнар для аб'яднання перад загрузкай.

Я выкарыстоўваю Зорачкі (я не ведаю, ці ёсць іншыя). Вы будуеце свой код JavaScript у асобных файлах і ўключаеце каментары, якія апрацоўваюцца механізмам Sprockets, як і ўключаныя. Для распрацоўкі вы можаце ўключыць файлы паслядоўна, а затым для вытворчасці, каб аб'яднаць іх ...

Глядзі таксама:

17
07 июня '12 в 23:48 2012-06-07 23:48 адказ дадзены JMawer 07 чэрвеня '12 у 23:48 2012-06-07 23:48

Калі вы выкарыстоўваеце Web Workers і хочаце ўключыць у вобласць работніка дадатковыя сцэнары, іншыя адказы аб даданні сцэнарыяў ў тэг head і г.д. Не будуць працаваць для вас.

На шчасце, у Web Workers ёсць свая ўласная функцыя importScripts якая з'яўляецца глабальнай функцыяй ў галіне Web Worker, убудаванай у сам браўзэр, паколькі з'яўляецца часткай спецыфікацыі .

Акрамя таго, у якасці другога найбольш высока ацэнены адказу на ваша пытанне , RequireJS можа таксама апрацоўваць ўключэнне сцэнарыяў ўнутры Web Worker (верагодна, які выклікае сам importScripts , але з некалькімі іншымі карыснымі функцыямі).

14
01 янв. адказ дадзены Turnerj 01 студз. 2015-01-01 11:58 '15 г. у 11:58 2015/01/01 11:58

У мяне была простая праблема, але я быў збянтэжаны адказамі на гэтае пытанне.