2011-05-31 2 views
2

J'ai créé un bookmarklet pour ajouter un fichier CSS personnalisé à n'importe quelle page. Fonctionne bien dans FF et dans Safari, mais je ne peux pas le faire fonctionner dans IE9.Problèmes avec bookmarklet pour l'ajout de CSS à IE9

Rien ne se passe dans le inspertor DOM, et je reçois pas d'erreur ... :(J'ai essayé de l'exécuter directement dans la console, mais même problème ... il

Toute aide est appréciée.

Ceci est mon code:

(function(d,u){ 

if(d.createStyleSheet) { 
    d.createStyleSheet(u); 
} else { 
    var styles = "@import url('"+u+"');", 
     css=d.createElement('link'); 
    css.rel='stylesheet'; 
    css.href='data:text/css,'+escape(styles); 
    d.getElementsByTagName("head")[0].appendChild(css); 
} 

}(document, "\\vmware-host\Shared%20Folders\css.css")) 

Ceci est le même code que bookmarklet ...

javascript:(function(d,u){if(d.createStyleSheet){ d.createStyleSheet(u); }else{var styles = "@import url('"+u+"');",css=d.createElement('link');css.rel='stylesheet';css.href='data:text/css,'+escape(styles);d.getElementsByTagName("head")[0].appendChild(css);}}(document, "\\vmware-host\Shared%20Folders\")) 

éditer quand je l'ai mis directement à l'URL, il me dit que IE9 a modifié la page pour empêcher les scripts inter-site:/Toute solution? (Et bandes loin le javascript: partie bing de ce: /)

+0

Juste une supposition: utiliser une balise 'style' au lieu de votre tag 'link'. – jantimon

+0

@Ghommey: Vous voulez dire 'css = d.createElement ('style'); css.innerHTML = "@ import url ('" + u + "');" ' – mplungjan

Répondre

1

Essayez Ceci - comme suggéré par ghommey - Si vous avez des problèmes dus à des origines différentes, alors IE a renforcé la sécurité (c'est logique car css peut faire beaucoup de choses) et vous aurez besoin d'utiliser un proxy. Cela dit: Jetez un oeil à IE9 Not applying linked style sheets

(function(d,u){ 

if(d.createStyleSheet) { 
    d.createStyleSheet(u); 
} else { 
    var css=d.createElement('style'); 
    css.setAttribute("type","text/css"); 
    css.appendChild(document.createTextNode("@import url("+u+")")); 
    d.getElementsByTagName("head")[0].appendChild(css); 
} 

}(document, "http://server/some.css")) 

ne pas oublier d'échapper antislashs si vous utilisez des fichiers locaux - par exemple un chemin du serveur \\ a besoin d'être \\\\

+0

il y a une erreur dans votre code tbere est un ")" manquant après 'document.createTextNode (etc ..» mais je l'ai corrigé, et il fonctionne toujours dans tous les navigateurs, mais dans IE9 – meo

+0

@meo s'il vous plaît voir mise à jour – mplungjan

+0

étrange pourquoi est-ce que ce travail alors? http: // www.phpied.com/user-stylesheet-in/ie – meo

1

Je l'ai testé cela dans IE8 et Firefox, juste changé la définition href:

(function(d,u){ 
    if(d.createStyleSheet) { 
     d.createStyleSheet(u); 
    } 
    else { 
     var css = d.createElement('link'); 
     css.rel = 'stylesheet'; 
     css.href = u; 
     d.getElementsByTagName("head")[0].appendChild(css); 
    } 
}(document, "test.css")) 

bookmarklet:

javascript:(function(d,u){ if(d.createStyleSheet) { d.createStyleSheet(u); } else { var css = d.createElement('link'); css.rel = 'stylesheet'; css.href = u; d.getElementsByTagName("head")[0].appendChild(css); }}(document, "test.css")) 
+0

ne fonctionne pas ... :(quand je l'entre dans l'URL, il me dit que IE9 a modifié la page pour empêcher corss site scripting :( – meo

+0

Je suppose que cela a fonctionné pour moi depuis que j'ai utilisé un css du même domaine :(désolé – aorcsik

+0

son ok merci pour la recherche ... J'adorerais obtenir une solution à ce problème. – meo