Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wywołanie funkcji
SaMi
post
Post #1





Grupa: Zarejestrowani
Postów: 173
Pomógł: 14
Dołączył: 27.03.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Witam, mam mały problem i najprawdopodobniej jest to banał. Mianowicie gdy tworzę zewnetrzny plik js poprzez utworzenie tagu <script> w DOMie i wywoluję zawartą w nim funkcje uzyskuję komunikat ReferenceError: user is not defined. natomiast jeśli załaduję klasycznie w htmlu ten sam plik wszystko działa bez problemu.
  1. <script type="text/javascript">
  2. (function(d,s){
  3. var js,jsr = d.getElementsByTagName(s)[0];
  4. js = d.createElement(s);
  5. js.src = '//www.mojadomena.pl/js/iframe.js';
  6. jsr.parentNode.insertBefore(js,jsr);
  7. }(document,'script'));
  8.  
  9. user.setAccount(['12345']);

iframe.js w wielkim uproszczeniu
  1. // (function(w){ - tego tu miało tu nie być
  2. var user = user || (function(){
  3. _args = {};
  4.  
  5. return {
  6. setAccount: function(a){
  7. _args = a;
  8. },
  9. key: function(){
  10. return _args[0];
  11. }
  12. };
  13. }());


Ten post edytował SaMi 30.12.2013, 10:30:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lukasz1985
post
Post #2





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Odpowiedź na Twoje pytanie jest dość prosta. Otóż tworząc z poziomu JavaScript tag "script" i ustawiając jego źródło informujesz tym samym przeglądarkę, że ma wykonać kolejne zapytanie pod podane źródło, a więc robiąc tak:

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var js = ddocument.createElement("script");
  3. js.src = "iframe.js";
  4. document.body.appendChild(js);
  5. user.setAccount("213");
[JAVASCRIPT] pobierz, plaintext


przeglądarka zacznie wgrywać nowy adres, w tym przypadku plik skryptu znajdującego się pod ścieżką "iframe.js".

Tak się składa, że nie dzieje się to natychmiast, a ładowanie następuje asynchronicznie, w tle, tak jak w przypadku XHR (XmlHttpRequest, czy krócej "AJAX"). Oznacza to, że zmienna "user" zdefiniowana w tamtym pliku nie pojawi się natychmiast, a dopiero po wykonaniu całego procesu: pobrania pliku js i wrzucenia go w dokument.

Aby wykonać kod po załadowaniu tego dokumentu należy się posłużyć funkcją zwrotną ("callback'iem"):


[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var js = ddocument.createElement("script");
  3. js.src = "iframe.js";
  4. document.body.appendChild(js);
  5.  
  6. js.onload = function() {
  7. user.setAccount("213");
  8. }
  9.  
[JAVASCRIPT] pobierz, plaintext


Ten post edytował lukasz1985 30.12.2013, 22:38:33
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 17:20