与脚本相关的兼容性问题

内容如题


  • 1、IE Chrome Opera 中,cookie 中可以保存 Unicode 字符;Firefox 则会将中文字符内码将被转换为 Unicode 编码;Safari 会忽略包含中文字符的键值对。

    解决办法:在设置和读取 cookie 时,始终为字符进行编解码操作,推荐使用 “encodeURIComponent” 和 “decodeURIComponent” 方法做相应编解码工作。

  • 2、IE Firefox Opera 在自定义提交方式下不会提交普通按钮及提交按钮的键值对信息;而 Chrome Safari 会将这些信息也提交给服务器端。

    解决办法:通常情况下,服务器端不需要按钮的 key/value 信息,建议删除按钮的 name 属性,不使其成为 successful control。

  • 3、Content-Type 报头字符串代表着服务器端发送给客户端浏览器的具体数据类型,浏览器将根据这个信息决定如何处理得到的数据内容。比如:’Content-Type:text/html’ 表示着这是个 HTML 文件,需要渲染引擎解释内容后输出;’Content-Type: application/octet-stream’ 表示这是个二进制流,需要下载到本地后由用户端环境决定如何使用。
    每个浏览器内置支持的 Content-Type 类型表各不相同,这导致了某些类型字符串在某些浏览器下不被识别;另外,如果出现错误的 Content-Type 类型,各个浏览器又会以不同的方式处理。

    解决办法:这个问题比较复杂,如需避免出现显示异常,建议不要使用非法的 Content-Type 头字符串;并且文件实际内容和数据格式应与 Content-Type 头字符串内类型声明一致。

  • 4、在 IE6 IE7 IE8 中,若一个页面被打开时接收到的响应头的 content-type 为 text/plain,浏览器会尝试嗅探页面文件内实际内容来判断是否可能为一个 HTML 文档,若是则会以 text/html 的方式将页面作为 HTML 文档解释,而不是将其作为纯文本内容处理。

    解决办法:这是由于 IE 浏览器的特有内容嗅探机制导致,故在不修改服务器端代码的情况下,无法通过常规办法解决此 IE 特性问题。更多关于此问题的资料参考官方信息:Internet Explorer 未按预期方式处理“Text/Plain”内容类型。
    合理、正确地设置文档的 content-type 是最佳的解决方案,同时应避免在非 HTML 文件中出现可被 IE6 IE7 IE8 嗅探机制捕获的 HTML、BODY、HEAD、TITLE 标记书写格式。

  • 5、IE6 不支持 RSS,使用浏览器打开响应头为 application/rss+xml 的内容会当做二进制文件而提示下载;Chrome 会将 application/rss+xml 以纯文本处理而显示出源代码。

    解决办法:各浏览器对于 RSS 的支持及渲染方式为浏览器各自实现导致,故无法通过常规办法使各浏览器达到一致的效果,对于暂不支持 RSS 的浏览器应给予提示。Chrome 可通过安装扩展插件实现此功能。

  • 6、IE6 IE7 IE8 始终不在使用 META 元素控制跳转时附加 Referer 字段到请求头中。在普通页面中,当脚本调用 location 对象进行跳转时也不会附加 Referer 字段信息;
    Firefox 始终不在使用 META 元素控制跳转时附加 Referer 字段到请求头中。

    解决办法:若服务端需要获得正确的 Referer 字段信息,则应采用各浏览器均可以附加 Referer 字段信息的方式进行跳转。如,普通超链接、表单提交、HTTP 302 跳转。

  • 7、如果服务器端产生 HTTP 400 错误,并且在服务器端没有配置相应的显示页面,则会由本地客户端使用本地资源文件显示此错误信息。但是各浏览器的本地资源提示不同,更有些浏览器使用空白页代替本体错误提示页,造成用户识别混淆。

    解决办法:HTTP 出错时返回错误代码,如果服务器端没有设置显示该问题的页面,则会由本地浏览器根据本地预置资源文件来显示,这些本地页面的显示风格由各浏览器决定,无法由用户控制。因此最好的解决方案还是在服务器端配置所有的错误代码对应的远程页面。