» »

Dostop do eksterne funkcije v dinamično naloženi JS

Dostop do eksterne funkcije v dinamično naloženi JS

imagodei ::

V html-ju imam vtaknjeno JavaScript in od tam želim dinamično naložit drugo JS.

<head>
  <script type="text/javascript">
    function DynamicJsLoad()
    {  
      var MarkerList = new Array(3);
        MarkerList[0] = new GMarker(new GLatLng(0,0));
        MarkerList[1] = new GMarker(new GLatLng(0,0));
        MarkerList[2] = new GMarker(new GLatLng(0,0));  

        var FileRef = document.createElement("script");

	FileRef.setAttribute("type","text/javascript");
	FileRef.setAttribute("src", "file:///s:/blinkblonk.js");
	document.getElementsByTagName("head")[0].appendChild(FileRef);

        MarkerList = MAddMarker();
	for (var i=0; i<3; i++) {GlobalMap.addOverlay(MarkerList[i]);}

  </script>
</head>

<body onload="initialize()" onunload="GUnload()">  //mam eno initialize funkcijo, ki ne dela problemov
    <div id="map1" style="width: 600px; height: 400px"></div>
	<script type="text/javascript">
	  var GlobalMap = new GMap2(document.getElementById("map1"));
          DynamicJsLoad();
	</script>
</body>


Potem pa se blinkblonk.js, ki se dinamično naloada:
function MAddMarker()
{
var LMarkerList = new Array(3);
  LMarkerList[0] = new GMarker(new GLatLng(0,0));
  LMarkerList[1] = new GMarker(new GLatLng(0,0));
  LMarkerList[2] = new GMarker(new GLatLng(0,0));
  
  for(var i = 0; i < 3; i++)
  {
    LMarkerList[i].setLatLng(new GLatLng((46.36090 + i /100),(14.15530 + i/100)));
  }
  
  return LMarkerList;
  
}


Rezultat tega je, da mi FireBug po zagonu javi:
MAddMarker() is not defined.

Kaj delam narobe?

EDIT: Ene par napakc...
- Hoc est qui sumus -
  • spremenil: imagodei ()

root987 ::

Si prepričan da je blinkblink.js na isti domeni? JS zna bit kr tečn glede teh same-domain stvari, ta absolute path je pa mal sumljiv...

Moj nasvet - uporabi jQuery, ki omogoča nalaganje stvari tudi iz drugih domen.
"Myths which are believed in tend to become true."
--- George Orwell

imagodei ::

root,

blinkblonk je lokalno na računalniku, tko kot tudi html, v katerem teče "main" js. Se strinjam, se bom držal jQuery-ja, so mi že drugi tudi svetovali. Drugače sem zadevo sedaj rešil tako, da sem tistle postopek razbil v dve funkciji, poleg tega sem pa dodal še funkcijo IsLoaded:

function IsLoaded() 
{
  if(typeof MAddMarker != 'function')
  {
    var t=setTimeout("IsLoaded()",500);
  }
  else
  {
    PlaceMarkers();
  }
}

Baje je fora v tem, da sem prehitro klical funkcijo (čeprav sem preveril onLoad dogodek ?!). Zdaj pa pač čakam da prepozna funkcijo, v nasprotnem primeru se vidimo čez 0,5 sekunde. ;)
- Hoc est qui sumus -


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Google maps API ne deluje v wordpress

Oddelek: Izdelava spletišč
81882 (1137) shark_nm
»

E-račun

Oddelek: Programiranje
217470 (4233) ivanhoe5x
»

[Java]Shranjevanje/Branje nastavitev za povezavo z podatkovno bazo

Oddelek: Programiranje
192629 (2403) KernelPanic
»

Javascript problemcek

Oddelek: Programiranje
141596 (1389) tempoFlow
»

js generiran input hidden noče biti POSTan z php

Oddelek: Izdelava spletišč
51815 (1732) Buffy

Več podobnih tem