11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai besoin de quelque aide pour un probleme d'insertion sous ie7. J'ai une page aspx chargée par ajax avec un code Page_load pour ajouter mon code coté Page ( OK sous FFv3)
..Page_Load
Response.Write("<div id=\"mydiv\">");
Response.Write("</div>");
Response.Write("<script type=\"text/javascript\">add_all();</script>");

Mon script sur ma master page est
var image_dir="/images";

function add_link(s,icon, name, url) {
var Node =document.getElementById("mydiv");
var Nodenew = document.createElement("i");
Nodenew.innerHTML=('<span class="AddButton" id="AddButton-' + icon + '"><a href="' + url + '" title="Add to ' + name +'" target="_blank"><img src="' + image_dir + '/' + icon + '.png" /></a></span> ');

Node.appendChild(Nodenew);
var Nodelist= Node.getElementsByTagName("span");
var position = Nodelist.item(s);
Node.parentNode.insertBefore(Nodenew,position);
}

function add_all() {
var title = encodeURIComponent(document.title);
var url = encodeURIComponent(document.URL);

add_social(1,'delicious', 'del.icio.us', 'http://del.icio.us/post?url=' + url + '&amp;title=' + title);
}

Cet ajout fonctionne sous FFv2-3 mais pas sous Ie7 . J'ai bien verifié, mon script est chargé et ma page charge tous les elements. Sous FF avec firebug tout fonctionne. J'ai testé diferents configurations pour insertBefore

Node est id="mydiv", l'element span est ajouté dans un <i><span>..</i>

Node.insertBefore(Node, position) OK FF, Non ie7
Node.parentNode.insertBefore(Node, postion) OK FF, N ie7
Node.parentNode.insertBefore(Node, position.nextSibiling) N ff, N ie car postion est sous forme de list.

Help!
Pourquoi ne pas utiliser une bibliothèque comme JQuery pour réaliser ce genre d'opération plutôt que réinventer à chaque fois ?

Elle permet de plus de faire abstraction du navigateur (en résumé elle gére les particularités des uns et des autres) en proposant des méthodes "prêtes à l'emploi" de manipulation du DOM.
PiR2 a écrit :
Pourquoi ne pas utiliser une bibliothèque comme JQuery pour réaliser ce genre d'opération plutôt que réinventer à chaque fois ?


1) Pour éviter d'appeler quelques kilo-octets de trop pour rien (même si je te l'accorde JQuery n'est pas spécialement lourd). Smiley cligne
2) Pour ne pas être emprisonner par un framework JS quelconque ... et cette raison elle est vraiment canon. Smiley ravi
Salut,

Merci, j'ai teste aussi avec jquery, mais j'ai decouvert que mon probleme viens de une non execution de mon script sur ma page ie. Avec companionJS j'ai pu tester que tout est bien en place et executer manuellement mon script par "add_all();". Le probleme est ceci, la page est chargee dans une bubble google, mais mon script qui est chargé n'est pas executé sous ie7, seulement sous FF.

J'ai teste plusieurs types de enregistrement de mon script sur la page aspx :

Body Onload="add_all()" -X
Page_Load -X
Page_SaveStateComplete / Page.ClientScript.RegisterClientScriptBlock -X
jQuery(function() {add_all();}); En Static - ecrit Response.Write(...)--X
jQuery(function() {add_all();}); Sur aspx dans un script--X

Rien à faire mon script n'est pas lance quand ma bublle s'ouvre Smiley biggol

Quoi faire pour lancer mon script?

Merci de votre aide
Pour IE :
window.attachEvent('onload', add_all);

Pour tous les autres :
window.addEventListener('load' add_all, false);