Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Script injection

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    33

    Script injection

    Salve a tutti,
    da due giorni sto cercando di risolvere un problema dal quale non riesco a venirne fuori.

    Nel mio sito ho un file (main.js) nel quale sono contenute tutte le funzioni javascript. In una di queste funzioni ho la necessità di inserire del codice per creare uno script dinamicamente (a seconda delle scelte lato utente) in un div.

    Il div nella pagina php ha id "ads_box". Per creare lo script ho provato nei seguenti modi:
    codice:
    function insertScript() {
    	var scriptElem = document.createElement("script");
    	scriptElem.setAttribute("type", "text/javascript");
    	var content = document.createTextNode("alert('ciao');");
    	scriptElem.appendChild(content);
    	document.getElementsById('ads_box').appendChild(scriptElem);
    }
    codice:
    function insertScript(){
    	var scriptElem = "<"+"script"+">";
    	scriptElem = scriptElem + "alert('ciao');";
    	scriptElem = scriptElem + "<"+"\/"+"script" + ">";
    	document.getElementById('ads_box').innerHTML = scriptElem;
    }
    Nessuno dei due però riesce a farmi comparire l'alert di prova.

    Ho provato anche a sostituire i caratteri speciali "<" e ">" con le rispettive entità HTML, ovvero "&lt;" e "&gt;", ma naturalmente il risultato che ottengo è la stampa di <script>alert('ciao');</script> e non la finestra d'avviso.

    Qualcuno sa come risolvere? Grazie mille.

    Ciao,
    Francesco

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Guarda nella sezione ajax di questa discussione

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    33
    Originariamente inviato da br1
    Guarda nella sezione ajax di questa discussione

    ciao
    Grazie br1, ho dato un'occhiata, ma in tutte le funzioni che vengono utilizzate si fa riferimento all'elemento <head>: document.getElementsByTagName('head').item(0).

    Se provo a sostituire head con l'id del div (in questo modo: document.getElementsById('ads_box')), allora non funziona più nulla e non riesco a capire il perché.

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    forse perche' getElementsById non esiste

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    33
    Originariamente inviato da Xinod
    forse perche' getElementsById non esiste
    Sì, hai ragione. E' stato però un errore di battitura sul forum.

    Spiego meglio il problema. Lo script che dovrei aggiungere è quello di Google AdSense.

    Sto provando con la seguente funzione:
    codice:
    function include_dom(script_filename) {
    	var html_doc = document.getElementById('ads_box');
    	var js = document.createElement('script');
    	js.setAttribute('language', 'javascript');
    	js.setAttribute('type', 'text/javascript');
    	js.setAttribute('src', script_filename);
    	html_doc.appendChild(js);
    	return false;
    }
    la quale deve semplicemente creare uno script "al volo" dentro il div ads_box, ad esempio:
    codice:
    <div id="ads_box"><script>alert('ciao');</script></div>
    Con l'alert funziona, ma con il codice dell'adsense no, che è questo:
    codice:
    <script type="text/javascript">
    <!--
    google_ad_client = "pub-xxxxxxxxx";
    google_ad_slot = "xxxxxxxxx";
    google_ad_width = 160;
    google_ad_height = 600;
    //-->
    </script>
    <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>
    Siccome sono due script (il primo con contenuto e il secondo con link a script esterno) allora ho pensato di mettere in un file esterno anche il contenuto del primo, ovvero questo codice in "ads.js":

    codice:
    <!--
    google_ad_client = "pub-xxxxxxxxx";
    google_ad_slot = "xxxxxxxxx";
    google_ad_width = 160;
    google_ad_height = 600;
    //-->
    dopodiché richiamare la funzione due volte in questo modo:
    codice:
    include_dom("ads.js");
    include_dom("http://pagead2.googlesyndication.com/pagead/show_ads.js");
    Il problema è che mi restituisce una pagina totalmente bianca e in basso Firefox rimane in "Lettura di http://... ". La console degli errori di Firefox mi indica: google_protectAndRun is not defined

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    ma non puoi pretendere funzioni qualsiasi cosa gli butti dentro
    per esempio quello script sicuramente fa qualcosa all' onload (basta cercarlo dentro lo script per rendersene conto) del documento
    onload che oramai si e' verificato da tempo

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    33
    Originariamente inviato da Xinod
    ma non puoi pretendere funzioni qualsiasi cosa gli butti dentro
    per esempio quello script sicuramente fa qualcosa all' onload (basta cercarlo dentro lo script per rendersene conto) del documento
    onload che oramai si e' verificato da tempo
    Hai ragione, difatti cercando quell'errore su internet ho trovato altre discussioni di persone, che utilizzando jQuery, lo caricavano alla fine. Dato che io jQuery non lo sto usando ho risolto in altri modi. Ho inserito comunque lo script staticamente nell'HTML della pagina di ricerca, solo che ho impostato il div con proprietà CSS "display" a "none". Viene impostato ad "inline" quando l'utente avvia una ricerca. A pensarci prima...

    Grazie comunque!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.