Page 1 of 212»

浅谈-firefox和IE的区别

  子嘉 |  CSS, HTML, JavaScript, 文章转载 |  [0]  

1.setAttribute(string name, string value):增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。

设置对象的属性则应该采用:
document.getElementById(”apple”).setAttribute(”width”,”100″)
document.getElementsByTagName(”div”)[0].setAttribute(”width”,”100″)
访问对象的属性则采用:
document.getElementById(”apple”).getAttribute(”width”)
document.getElementsByTagName(”div”)[0].getAttribute(”width”)

我们经常需要在JavaScript中给Element动态添加各种属性,这可以通过使用setAttribute()来实现,这就涉及到了浏览器的兼容性问题。
var bar = document.getElementById(”foo”);
bar.setAttribute(”onclick”, “javascript:alert(’This is a test!’);”);
这里利用setAttribute指定e的onclick属性,简单,很好理解。但是IE不支持,IE并不是不支持setAttribute这个函数,
而是不支持用setAttribute设置某些属性,例如对象属性、集合属性、事件属性,也就是说用setAttribute设置style和onclick这些属性
在IE中是行不通的。为达到兼容各种浏览器的效果,可以用点符号法来设置Element的对象属性、集合属性和事件属性。
document.getElementById(”foo”).className = “fruit”;
document.getElementById(”foo”).style.cssText = “color: #00f;”;
document.getElementById(”foo”).style.color = “#00f”;
document.getElementById(”foo”).onclick= function () { alert(”This is a test!”); }

(more…)

heaer前面不能有空格。

  子嘉 |  PHP, 工作日志 |  [0]  

前些时候做的导出Excel文件的程序,今天在外网突然出现了问题。http头处理失效。

查了半天,后来发现是heaer之前加了个空格。

其实这已经是老生长谈的问题了。大部分人都知道,heaer前面不要加空格。但是。。有一种情况往往被忽视。

在php文件里面,heaer前面是没有空格的。

但是,在这个文件里require了其他一个文件。在被require的文件里,最后一行多了空格。

这个错误是很难被发现的,以往都是把注意力放到出问题的文件上。

不是吗?

跨子域页面间的 JavaScript 访问

  子嘉 |  JavaScript, 文章转载 |  [0]  

当某个互联网运营商的网站上规模之后,他们都会考虑将网站部署到主域名相同,子域名 不同的服务器集群上,以此来构建一个聚合的应用。同时,希望能够利用 JavaScript,在不同子域的网页间相互操作,实现一个对用户来说“无缝”的应用。这时,跨域操作的技术难点,仿佛一下子从服务器后台,转移到了浏 览器前台。因为,浏览器将承载跨子域访问的任务。为什么会这么说呢?因为,我们已经步入了集成化的 RIA 时代。

一般情况下,通过运用 DOM 对象模型,不同窗口和框架里的内容可以通过 JavaScript 互相作用。但是,由于浏览器可以同时在窗口或框架中显示不同的页面,甚至是不同域下的页面。为了保证数据的完整性和信息的安全性,就必须建立起一种强制规 则,来保证跨域的数据不会被非法的获取和修改。

多数情况下,只有相同域下的页面才能相互作用。比如,一个位于 www.microsoft.com 域下的页面,可以自由地通过 JavaScript 读写 www.microsoft.com 域下的其它页面,但却不能读写 home.microsoft.com 域下的页面,或是 www.google.com 域下的页面。完全的跨域访问(比如,www.microsoft.com 域下的页面访问 www.google.com 域下的页面),在 JavaScript 开发中是被完全禁止的,没有任何商量的余地。但是,DOM 为 document 对象提供了一个 domain 属性,可以授权“同主域但不同子域”页面间的数据访问,这正好可以应付那些“集团军”式的前台部署。

跨子域设置的规则:当两个二级域名,URL 协议,端口都相同的网页,自身都通过 JavaScript 显示地设置了相同的 document.domain 值,并且此值至少等于自身的二级域名,它们之间才可以相互作用。(注意,此规则只适用大于二级域名的页面,并且千万别指望 http 页面可以与 https 页面相互作用。

也就是说,当网页作者指定 document.domain 属性为域名的后半部分时,读写许可将扩展至二级域名。例如:http://www.microsoft.com 下的某个页面,将 document.domain 属性设置成 microsoft.com,同时 http://home.microsoft.com 下的某个页面,也将 document.domain 属性设置成 microsoft.com,它们之间即可完成跨子域的访问。因为,只有以 microsoft.com 结尾的站点上的文档,才可能将其 document.domain 属性设置为 microsoft.com,这样就确保了同一个服务提供者的页面,才能互相提供权限,从而完成交互操作。

注意,document.domain 属性值不能比二级域名更短(比如“com”,浏览器将禁止这种设置,并认为此操作是无效的)。但是,对于如 www.microsoft.co.jp 这样的域名,实际的最大操作权限应该是二级域名 microsoft.co.jp(而不是一级域名“co.jp”,浏览器不会像限制“com”那样,将“co.jp”认为是无效的。但如果你真这样做了, 带来的风险可想而知)。

在窗口、对话框、框架(frameset,frame,iframe),甚至是 IE 的 popup 窗口之间(通过 IE 特有的 window.createPopup 方法创建),只要它们涉及到了相互读写,都要考虑 document.domain 问题。这仿佛是“一损俱损,一荣俱荣”的事情,一旦你在某个地方设置了 document.domain,你必须小心应对。因为,你不知道在哪个角落里,会出现“没有权限”的脚本错误

让窗口或框架在不同域页面之间跳转,是件很寻常的事情,所以跳转操作总是被允许的。只有试图读写页面内容时,才会受到 domain 限制。例如:window.location 可以用来设置地址间的跳转,但是不能用它来读取在不同域下的地址。因为,这会使一个页面知道浏览者去过哪些地方,而这会暴露浏览者的隐私。

在不同域间的页面制约包括

  • window.location 可以设置,但不能读取。其它的 location 属性和方法被禁止访问;
  • document.href 可以设置,但不能读取。其它的 document 属性和方法被禁止访问;
  • <iframe> 的 src 可以设置,但不能读取;

浏览器为什么要加入跨域限制?

浏览器的跨域网页限制,是出于安全角度考虑的,为什么会这么说呢?请想像一下,如果没有域之间的安全限制,一个无赖网页可以“偷窥”别人浏览的页面,然后通过 Ajax 方式,将“偷窥”后的数据发送到某台不为人知的服务器上,它便实现了无耻的侵略行为。

再或者,这个无赖网页可以通过 DHTML 来更改别人页面的内容。比如:编写一个监视脚本,把用户已经打开的所有页面改换背景色,版权文字,以及放入一些自制的 banner,这样就可以把别人的整个站点变成“自己的”了。

浅谈Apache和Php编码

  子嘉 |  PHP, 文章转载 |  [0]  

Apache和PHP网页的编码问题分析

谈到Apache的编码我们就要涉及到3个东西

  • http标记语言中的<META http-equiv=”content-type” content=”text/html; charset=xxx”>标签
  • PHP中的header(”content-type:text/html; charset=xxx”);函数
  • Apache配置文件httpd.conf中的AddDefaultCharset

一、<META http-equiv=”content-type” content=”text/html; charset=xxx”>标签
按顺序来,先说这个<META>标签,这个标签有很多功能的。
我今天想说只是上面提到的那种形式。解释一下<META http-equiv=”content-type” content=”text/html; charset=utf-8″>, 意思是对这个网页进行声明,让浏览器对整个页面的内容采用xxx编码,xxx可以为GB2312,GBK,UTF-8(和MySQL不同,MySQL是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会 发现有了这句还是不行,不管xxx是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。
请注意,<meta>是属于html信息的,仅仅是一个声明,它起作用表明服务器已经把HTML信息传到了浏览器。

二、header(”content-type:text/html; charset=xxx”);
这个函数header()的作用是把括号里面的信息发到http标头。
如果括号里面的内容为文中所说那样,那作用和<META>标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数, 浏览器就会永远采用你所要求的xxx编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说HTTPS标头和HTML信息的差别了:

引用:

https标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。

因为meta标签是属于html信息的,所以header()发送的内容先到达浏览器,通俗点就是header()的优先级高于meta(不知道可不可以这样讲)。加入一个php页面既有header(”content-type:text/html; charset=xxx”),又有<META http-equiv=”content-type” content=”text/html; charset=xxx”>,浏览器就只认前者http标头而不认meta了。当然这个函数只能在php页面内使用。
同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache的原因了。
(more…)

用CSS写hello world

  子嘉 |  CSS |  [0]  


看,是不是很神奇。
神奇吗?是不是好多人都知道了。呵呵。

Page 1 of 212»