2012-06-02 13 views
6

Powiel możliwe:
Dynamically Importing JavasScriptjavascript: Dostęp do zmiennych zdefiniowanych w Zewnętrzne .js

Czy istnieje sposób, aby uzyskać dostęp do zmiennych, które pochodzą z zewnętrznych importowane JavaScript .js pliki?

W pliku js zewnętrznych I zdefiniować varialbe takich jak następuje:

// JavaScript Document 
var PETNAME = "Beauty"; 

Po dynamicznie importowania tego kodu, życzę, aby uzyskać dostęp zmiennej petname, ale nie uzyskać określoną wartość:

alert("Pet Name: " + PETNAME); 

Co może być nie tak i czy istnieje sposób na przeniesienie wartości z zewnętrznego kodu .js do głównego kodu JavaScript?

Dziękuję.

Odpowiedz

10

Aby importować dynamicznie JS, należy wziąć pod uwagę następujące zdarzenia: onreadystatechange i load, które są uruchamiane, gdy skrypt jest analizowany przez przeglądarkę i dostępny dla użytkownika. Można użyć tej funkcji:

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); 
} 

I można go używać tak:

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

+1 - Dziękuję za odpowiedź. Poprawnie masz źródło mojego problemu, że importuję plik .js dynamicznie. Wykorzystam przedstawione rady. Ponieważ twoja odpowiedź jest jasna i nie wymaga dalszych uzupełnień, chciałbym ją oznaczyć jako * Zaakceptowana odpowiedź * na moje pytanie. –

+0

@ Bunkai.Satori: Cieszę się, że pomogło :) – Sarfraz

2

Upewnij się, że dołączasz plik zewnętrzny, zanim spróbujesz uzyskać dostęp do zmiennej w nim zdefiniowanej. Upewnij się również, że zmienna w pliku zewnętrznym nie jest zdefiniowana w funkcji, w takim przypadku zakres jest ograniczony tylko do tej funkcji. Jeśli nie pomoże to w usunięciu słowa kluczowego var przed zmienną, utworzy to zmienną globalną.

+0

+1, bardzo dziękuję za odpowiedź. Usunięcie 'var' było dla mnie nowością. Co więcej, powinienem był wspomnieć, że dynamicznie importuję kod .js. Nie wiedziałem, to jest kluczowe dla odpowiedzi. Dziękuję Ci. –

+1

Usunięcie słowa kluczowego var jest bardzo niekorzystne, tworzy globalne zmienne i zanieczyszcza globalne środowisko. – Sarfraz

+0

@Sarfraz, czy istnieje inny sposób na zapewnienie, że zmienna będzie globalna? Innymi słowy, czy istnieje lepsza alternatywa dla usuwania 'var'? –

Powiązane problemy