ugrás a tartalomhoz

innerHTML + js kód nem megy

bendesoft · 2007. Dec. 25. (K), 15.24
Sziasztok!

A következő problémám van:

Van egy ajax fv-em, ami egy php-s oldal által generált tartalmat, ad át egy adott id-vel ellátott divnek. Az innerHTML tulajdonságon keresztül írom bele a tartalmat. A tartalom tartalmaz némi javascript kódot is, és ez vhogy nem kerül lefutásra, amikor beillesztődik a divbe. Mi lehet a probléma?

Itt az ajaxos fv:

function DisplayPage(id)
  {
 var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
      catch (e)
        {
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }
    xmlHttp.onreadystatechange=function()
      {
      if(xmlHttp.readyState==4)
        {
		document.getElementById("links").innerHTML=xmlHttp.responseText;
        }
      }
      
    var url="http://bendesoft.extra.hu/demo/show.php?id="+id;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);  
}
 
1

biztonsági okokból

razielanarki · 2007. Dec. 25. (K), 15.55
ha jól tévedek biztonsági okokból nem fut le a js ezzel a módszerrel, ezért vagy kézzel (regexppel) kell kiszedned a script tag tartalmát, vagy külön szálon betölteni a js-t és úgy futtatni
azaz kézzel createElement()-elni egy script taget, és beilleszteni a kódot (vagy eval, de eval is evil, mint tudjuk)

egy kis infó (ezt találtam most gyorsba):
ajaxpatterns: on-demand javascript
innertHTMl and script tag
2

még egy kis hiba

bendesoft · 2007. Dec. 25. (K), 20.58
Működik az eljárás, csak amikor meg akarom különböztetni az egyes szkripteket, hogy van-e utasítás a tagek között vagy éppenséggel egy fájlt ágyazna be, akkor vmiért nem működik :(

Itt a kódom:

document.getElementById("links").innerHTML=xmlHttp.responseText;
var re = /<script([\s\S]*?)>([\s\S]*?)<\//ig;
var match;
while (match = re.exec(xmlHttp.responseText)) {
    var newScript = document.createElement('script');
    newScript.type = "text/javascript";
    newScript.text = match[2];					
    //levizsgálom h van-e benne src :)
    var r = /src="([\s\S]*?)"/ig;
    var res;
    var str=match[1];
    res=r.exec(str);
    if(res.length>0){
	newScript.src=res[1];
    }
				
    document.getElementById('links').appendChild (newScript);		
3

debug

vbence · 2007. Dec. 26. (Sze), 00.53
Készíts egy div-et, mondjuk "debug" id-vel, és írd ki a RegEx-ek eredményeit.

Mellesleg az, hogy csak a "</" stringig veszed a szkripted nem túl logikus. Biztos vagy benne, hogy a szkriptben sosem szerepelhet ilyen karakterlánc? (Például HTML szöevget nem tartalmaz)? Nézd inkább "</script>" -ig. A böngésző is ennél az elemnél fog leállni az értelmezéssel, miért szabnál szigorúbb feltételt?

Mi a helyzet a <script type="..." src="..."/> formával?
4

folyamatos töltés

bendesoft · 2007. Dec. 26. (Sze), 10.08
Sikerült kiszürni a különböző script tageket, és minden adat jó, de amikor az src attributumot beállítom a megfelelő értékre, akkor el kezd tölteni az oldal és nem is haggya abba. Az addig megjelenített tartalom meg eltűnik. Ötlet? :)
5

link?

razielanarki · 2007. Dec. 26. (Sze), 13.49
esetleg egy demo-linket tudsz mutatni?


(ugye nincs document.write a beillesztett scriptben?)
6

demo link

bendesoft · 2007. Dec. 26. (Sze), 16.00
http://bendesoft.extra.hu/demo/proba.html

Nincs benne. A legenerált oldal egy google hirdetést jelenítene meg+ néhány linket. Ez lenne egy lényegi része egy feladatnak. Az lenne a lényeg, hogy az én általam generált kódot beillesztve egy html oldalba, megjeleníti a linkeket és a a google hirdetés(eke)t is.

Itt egy példa h h néz ki egy google hirdetés:

<script type="text/javascript"><!--
google_ad_client = "pub-3291771866355030";
google_ad_width = 300;
google_ad_height = 250;
google_ad_format = "300x250_as";
google_ad_type = "image";
google_ad_channel ="";
google_color_border = "CCCCCC";
google_color_bg = "FFFFFF";
google_color_link = "000000";
google_color_url = "666666";
google_color_text = "333333";
//--></script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
7

valszeg az adsense a ludas

razielanarki · 2007. Dec. 26. (Sze), 17.49
így első blikkre azt vettem észre hogy a betöltött oldaladhoz is hozzáfűzi magát az extra tárhely scriptje, és ezt a te kódod így lefuttatja mégegyszer

de valószínűbb hogy a google az ami bekavar, amikor be akarja document.writeolni a hirdetését a mr betöltött dom-ba (és így felülírja az egészet)
hívd meg a hirdetést inkább egy iframeből (a show.php-ban), ami a tartalom beillesztése után szépen betölti külön.
(és elvileg olyan kulcsszavakat tehetsz a betöltőbe a hirdetés mellé amilyeneket szeretnél)
8

működik

bendesoft · 2007. Dec. 27. (Cs), 18.47
így már megy a dolog. köszönöm a segítséget ;)