JS注入CSS到页面

首先是IE下的注入。

可以用link的方式,这样其实最简单。

只要javascript来创建一个link标签:

var link = document.createElement('link');
document.body.appendChile(link);
link .setAttribute('rel','stylesheet');
link .setAttribute('href','c:/xxx/xxx/xxx.css');
link .setAttribute('type','text/css');

只要把href指向css文件在本地的位置可以了。

(当时想到过用创建style标签,然后把css通过innerHTML写进去,但是这样做在IE下是会报错的,逐用上面的这种方法。)

css已经注入到了IE里面,但是IE浏览器向来问题多,!important的支持很乱,有些div或者font的style属性始终会继承原页面的,导致我们自己创建的div在不同的页面上也不规则,为了兼容所有的页面,不得不把我们自己创建的element使用自定义标签。

特别是有些网页来不来的就是:

div{
	line-height:1.5em!important;
}
font{
	font-size:9pt!important;
}

别人都这样定义了我们最好用自己的标签去和别人的区别,毕竟我们是注入到别人的网页里,不改动别人原网页的元素样式是肯定要先保证的,但也不能委屈了我们的自己创建的元素。

在IE下使用自定义标签必须添加namespace,不然IE是不忍。

用JS代码添加namespace:

document.namespaces.add('ns','http://xxx.xx.com');

ns就是添加的namespace,执行了这句以后,你再看原页面,就会发现html标签的属性多了一句:

 xmlns:ns = "http://xxx.xx.com"

其实要的就是这个效果。

有了ns就可以定义自己的标签了。

你可以定义


然后在css里面定义这些标签的样式就要这样写:

ns/:panel{
	color:#f00!important;
	line-height:1em!important;
}

(加!important是未了避免继承了原页面的color和line-height)

现在创建的element就可以自由的使用自己定义的标签,而不会受到原页面太多的影响了。

在firefox下,注入css可以和IE一样创建link去注入,但是href不能用操作系统下的地址格式,要使用类似URL那种格式。

如果在css文件在电脑中的位置是c:/css/mian.css,那就要写成

link .setAttribute('href','file:///c:/css/main.css');

这样firefox才能找到css文件。

但是除了使用link,在firefox里还可以通过创建style标签来注入css。

var st= document.createElement('style');
document.body.appendChile(st);
st.innerHTML = 'div{.....}................';

通过赋值st的innerHTML来注入css到页面中。

 

你可能感兴趣的:(JS注入CSS到页面)