Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Как получить значение переменной из другого файла js? (https://javascript.ru/forum/css-html/5977-kak-poluchit-znachenie-peremennojj-iz-drugogo-fajjla-js.html)

Ser_Maxim 05.11.2009 10:11

Как получить значение переменной из другого файла js?
 
Возникла такая вот очень не понятная проблема с Оперой и IE, в Хроме и Фаерфоксе все красиво работает.
Необходимо получить данные из одного файла js и использовать их в другом.
Имеем три файла (код приведен в упрощенном виде, чтобы показать cуть проблемы):

1. test.html его содержание:
<html>
<head>
<title>Тест скрипта</title>
</head>
<body>
<script type="text/javascript" src="main.js"></script>
</body>
</html>


2. main.js его содержание:
document.write('<script type="text/javascript" src="addtext.js"></script>')
document.write('Второй блок текста<br>')


3. addtext.js
var add = 'Первый блок текста<br>'
document.write(add)


Если запускаем test.html в браузерах Хром и Фаерфокс, то результат на экране получаем такой:

Первый блок текста
Второй блок текста

А вот в Опере и IE результат тоже получаем, только неожиданный:

Второй блок текста
Первый блок текста

Эта парочка браузеров выполняет document.write('<script type="text/javascript" src="addtext.js"></script>') в последнюю очередь и записывает результат ниже, т.е. не на том месте как ожидаешь.
Перебрал кучу вариантов (я не опытный юзер явы - тока учусь), прогуглил все что можно и вот решил спросить совета у профессионалов.

Предполагаю что в данном случае нужно как то получить значение переменной add из файла addtext.js, т.е. решение проблемы что то вроде такого должно получиться:

main.js его содержание:
var fist = (src="addtext.js"?add.value) //значение переменной add из файла addtext.js
document.write(fist)
document.write('Второй блок текста<br>')


Вариант типа, разбить содержимое всего файла main.js на
document.write('<script type="text/javascript" src="addtext1.js"></script>')
document.write('<script type="text/javascript" src="addtext2.js"></script>')

что бы уж точно все браузеры поочередно вписывали в страницу содержимое из составных частей не подходит, т.к. файлов типа addtext.js получиться больше десятка и редактировать main.js сами понимаете по кусочкам из разных файлов не реально.
Два очень важных условия, файл addtext.js должен обязательно содержать document.write('...'), т.к. он используется в таком виде в других местах и путь к нему должен быть абсолютный, т.к. файлы будут собираться в main.js из разных доменов.

Очень надеюсь на Вашу помощь, только, пожалуйста, если это возможно то приведите пример кода, если нет, то какие тогда варианты решения данной задачи?
Заранее всем спасибо!

Basonsan 05.11.2009 20:23

а ты попробуй через функцию. ну типо в 1 файл функцию а в другие переменые

Ser_Maxim 06.11.2009 07:52

Формулирую вопрос конкретней:

Как обратиться за значением переменной из одного файла .js в другой файл .js? Т.е. как правильно должен выглядеть такой код в файле main.js?
var fist = ???(src="addtext.js"?add.value)??? //значение переменной add из файла addtext.js
document.write(fist)

Цитата:

пожалуйста, если это возможно то приведите пример кода, если нет, то какие тогда варианты решения данной задачи?

Basonsan 06.11.2009 15:27

Цитата:

Сообщение от Ser_Maxim (Сообщение 34582)
Возникла такая вот очень не понятная проблема с Оперой и IE, в Хроме и Фаерфоксе все красиво работает.
Необходимо получить данные из одного файла js и использовать их в другом.
Имеем три файла (код приведен в упрощенном виде, чтобы показать cуть проблемы):

1. test.html его содержание:
<html>
<head>
<title>Тест скрипта</title>
</head>
<body>
<script type="text/javascript" src="main.js"></script>
</body>
</html>


2. main.js его содержание:
document.write('<script type="text/javascript" src="addtext.js"></script>')
document.write('Второй блок текста<br>')


3. addtext.js
var add = 'Первый блок текста<br>'
document.write(add)


Если запускаем test.html в браузерах Хром и Фаерфокс, то результат на экране получаем такой:

Первый блок текста
Второй блок текста

А вот в Опере и IE результат тоже получаем, только неожиданный:

Второй блок текста
Первый блок текста

Эта парочка браузеров выполняет document.write('<script type="text/javascript" src="addtext.js"></script>') в последнюю очередь и записывает результат ниже, т.е. не на том месте как ожидаешь.
Перебрал кучу вариантов (я не опытный юзер явы - тока учусь), прогуглил все что можно и вот решил спросить совета у профессионалов.

Предполагаю что в данном случае нужно как то получить значение переменной add из файла addtext.js, т.е. решение проблемы что то вроде такого должно получиться:

main.js его содержание:
var fist = (src="addtext.js"?add.value) //значение переменной add из файла addtext.js
document.write(fist)
document.write('Второй блок текста<br>')


Вариант типа, разбить содержимое всего файла main.js на
document.write('<script type="text/javascript" src="addtext1.js"></script>')
document.write('<script type="text/javascript" src="addtext2.js"></script>')

что бы уж точно все браузеры поочередно вписывали в страницу содержимое из составных частей не подходит, т.к. файлов типа addtext.js получиться больше десятка и редактировать main.js сами понимаете по кусочкам из разных файлов не реально.
Два очень важных условия, файл addtext.js должен обязательно содержать document.write('...'), т.к. он используется в таком виде в других местах и путь к нему должен быть абсолютный, т.к. файлы будут собираться в main.js из разных доменов.

Очень надеюсь на Вашу помощь, только, пожалуйста, если это возможно то приведите пример кода, если нет, то какие тогда варианты решения данной задачи?
Заранее всем спасибо!

ну вот ты говоришь у тебя их будут десятки js
document.write('<script type="text/javascript" src="addtext1.js"></script>')
document.write('<script type="text/javascript" src="addtext2.js"></script>')

можно сделать так

for (i=1; i<=(скок будет js); i++)
document.write('<script type="text/javascript" src="addtext'+i+'.js"></script>')

Ser_Maxim 07.11.2009 09:35

Спасибо, конечно! Как я уже писал, это вариант на самый - самый крайний случай. Почему с таким вариантом не хочется связываться:
Редактировать все содержание main.js станет просто нереально, потому что буквально одно предложение будет разбито на несколько файлов:
|Мама пошла в|магазин "Радуга"|,чтобы купить молоко|
В примере просто текст, а ведь это будет куча кода и текста. Вобщем сложно очень работать с такой структурой.
По-этому вопрос остается открытым:
Цитата:

Как обратиться за значением переменной из одного файла .js в другой файл .js? Т.е. как правильно должен выглядеть такой код в файле main.js?
var fist = ???(src="addtext.js"?add.value)??? //значение переменной add из файла addtext.js
document.write(fist)

Пожалуйста, господа профессионалы!! обратите внимание на эту проблему - помогите решить эту задачу новичку :help:


Часовой пояс GMT +3, время: 03:32.