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:
  1. function DisplayPage(id)  
  2.   {  
  3.  var xmlHttp;  
  4.   try  
  5.     {  
  6.     // Firefox, Opera 8.0+, Safari  
  7.     xmlHttp=new XMLHttpRequest();  
  8.     }  
  9.   catch (e)  
  10.     {  
  11.     // Internet Explorer  
  12.     try  
  13.       {  
  14.       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");  
  15.       }  
  16.     catch (e)  
  17.       {  
  18.       try  
  19.         {  
  20.         xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");  
  21.         }  
  22.       catch (e)  
  23.         {  
  24.         alert("Your browser does not support AJAX!");  
  25.         return false;  
  26.         }  
  27.       }  
  28.     }  
  29.     xmlHttp.onreadystatechange=function()  
  30.       {  
  31.       if(xmlHttp.readyState==4)  
  32.         {  
  33.         document.getElementById("links").innerHTML=xmlHttp.responseText;  
  34.         }  
  35.       }  
  36.         
  37.     var url="http://bendesoft.extra.hu/demo/show.php?id="+id;  
  38.     xmlHttp.open("GET",url,true);  
  39.     xmlHttp.send(null);    
  40. }  
 
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:
  1. document.getElementById("links").innerHTML=xmlHttp.responseText;  
  2. var re = /<script([\s\S]*?)>([\s\S]*?)<\//ig;  
  3. var match;  
  4. while (match = re.exec(xmlHttp.responseText)) {  
  5.     var newScript = document.createElement('script');  
  6.     newScript.type = "text/javascript";  
  7.     newScript.text = match[2];                    
  8.     //levizsgálom h van-e benne src :)  
  9.     var r = /src="([\s\S]*?)"/ig;  
  10.     var res;  
  11.     var str=match[1];  
  12.     res=r.exec(str);  
  13.     if(res.length>0){  
  14.     newScript.src=res[1];  
  15.     }  
  16.                   
  17.     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:
  1. <script type="text/javascript"><!--  
  2. google_ad_client = "pub-3291771866355030";  
  3. google_ad_width = 300;  
  4. google_ad_height = 250;  
  5. google_ad_format = "300x250_as";  
  6. google_ad_type = "image";  
  7. google_ad_channel ="";  
  8. google_color_border = "CCCCCC";  
  9. google_color_bg = "FFFFFF";  
  10. google_color_link = "000000";  
  11. google_color_url = "666666";  
  12. google_color_text = "333333";  
  13. //--></script>  
  14. <script type="text/javascript"  
  15.   src="http://pagead2.googlesyndication.com/pagead/show_ads.js">  
  16. </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 ;)