2012-06-02 2 views
6

Можно создать дубликат:
Dynamically Importing JavasScriptJavaScript: Доступ к переменным, определенным в внешних файлах .js

Есть ли способ получить доступ к переменным, которые поступают из внешних импортировала JavaScript .js файлы?

В внешнем .js файл я определяю varialbe например следующим образом:

// JavaScript Document 
var PETNAME = "Beauty"; 

После динамического импорта этого кода, я хочу, чтобы получить доступ к переменной PETNAME, но я не получаю определенное значение:

alert("Pet Name: " + PETNAME); 

Что может быть неправильным, и есть ли способ принести значения из внешнего .js-кода в мастер-код JavaScript?

спасибо.

ответ

10

Чтобы импортировать JS динамически, вам необходимо рассмотреть onreadystatechange и load события, которые запускаются, когда скрипт анализируется браузером и доступен вам. Вы можете использовать эту функцию:

function getScript(url, callback) { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = url; 

    script.onreadystatechange = callback; 
    script.onload = callback; 

    document.getElementsByTagName('head')[0].appendChild(script); 
} 

И вы можете использовать его как это:

getScript('path to your js file', function(){ 
    alert("Pet Name: " + PETNAME); 
}); 
+0

+1 - Спасибо за ответ. Вы правильно получили источник моей проблемы, что я импортирую файл .js динамически. Я буду использовать представленные советы. Поскольку ваш ответ ясен и не требует никаких дополнительных дополнений, я хотел бы отметить его как * Принятый ответ * для моего вопроса. –

+0

@ Bunkai.Satori: Рад видеть, что это помогло :) – Sarfraz

2

Убедитесь, что вы включили внешний файл, прежде чем пытаться получить доступ к переменной, определенной в ней. Также убедитесь, что переменная во внешнем файле не определена внутри функции, и в этом случае они ограничиваются только этой функцией. Если это не помогает попытаться удалить ключевое слово var перед переменной, это создаст глобальную переменную.

+0

+1, спасибо за ваш ответ. Удаление «var» было для меня новым. Более того, я должен был упомянуть, что я динамически импортирую код .js. Я не знал, это очень важно для ответа. Спасибо. –

+1

Удаление ключевого слова var крайне плохое, оно создает глобальные переменные и загрязняет глобальную среду. – Sarfraz

+0

@Sarfraz, есть ли другой способ гарантировать, что переменная будет глобальной? Другими словами, есть ли лучшая альтернатива удалению 'var'? –

Смежные вопросы