<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_小贺的博儿</title><subtitle type="text">xiaoheDare21century Target | Hanker | Dream | Strive | Faith 以马内利i love google虚拟世界男孩学习笔记--&gt;致力与web前端技术而不断学习  2012神马都是浮云，舍弃IE6才是王道！[ungeilivable]{"打个小广告ads":{"有意向回郑州发展的web前端童鞋们":"可以给我发简历,我内部推荐"}},同时还招,java高级工程师,和互联网产品经理.[顺便透露下,只要你通过电话面试,你就可以和我们经理(前google的)直接面对面的交谈哦!!![偷笑]] 可以把简历 发到 hewenli[AT]malangmedia.com,我内部推荐!!!!</subtitle><id>http://feed.cnblogs.com/blog/u/63227/rss</id><updated>2012-04-12T07:19:26Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/63227/rss"/><entry><id>http://www.cnblogs.com/NetSos/archive/2012/04/12/2444041.html</id><title type="text">css3样式的图片小讲解</title><summary type="text"/><published>2012-04-12T07:19:00Z</published><updated>2012-04-12T07:19:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2012/04/12/2444041.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2012/04/12/2444041.html"/><content type="html">&lt;p&gt;&lt;a title="小贺" href="http://netsos.cnblogs.com"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/99750/2012041215182956.png" alt="" data-pinit="registered" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/2444041.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2012/04/12/2444041.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/NetSos/archive/2012/03/30/2425666.html</id><title type="text">愚人节马上就要到了,我教大家一个最强最嗨的整人方法</title><summary type="text">愚人节马上就要到了,我教大家一个最强最嗨的整人方法.神马 鞋带开了,手机没电了,钱掉了,这些简直弱爆了!最新的方案已经出来了,我来教给大家.那就是在你博客或空间里面==========================================================================================================================================================================================================================</summary><published>2012-03-30T09:14:00Z</published><updated>2012-03-30T09:14:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2012/03/30/2425666.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2012/03/30/2425666.html"/><content type="html">&lt;p&gt;愚人节马上就要到了,我教大家一个最强最嗨的整人方法.&lt;/p&gt;&lt;p&gt;神马 鞋带开了,手机没电了,钱掉了,这些简直弱爆了!&lt;/p&gt;&lt;p&gt;最新的方案已经出来了,我来教给大家.那就是在你博客或空间里面&lt;/p&gt;&lt;p&gt;&amp;nbsp;==================================================================&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;==================================================================&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;===================================================================&lt;/p&gt;&lt;p&gt;&amp;nbsp;==================================================================&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;===================================================================&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;写一篇&amp;nbsp;&lt;a title="愚人节 整人" href="http://netsos.cnblogs.com/netsos"&gt;&lt;strong&gt;愚人节马上就要到了,我教大家一个最强最嗨的整人方法&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;不好意思,你上当了.娃哈哈! 纯属娱乐!&lt;/p&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/2425666.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2012/03/30/2425666.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/NetSos/archive/2012/03/26/2418053.html</id><title type="text">[Modernizr]-----HTML5和CSS3开发利器</title><summary type="text">文章为转载,[Modernizr]不解释!什么是Modernizr？Modernizr 是一个用来检测浏览器功能支持情况的 JavaScript 库。 目前，通过检验浏览器对一系列测试的处理情况，Modernizr 可以检测18项 CSS3 功能以及40多项关于HTML5 的功能。 它比传统检测浏览器名称（浏览器嗅探）的方式更为可靠。 一整套测试的执行时间仅需几微秒。 此外，Modernizr 网站通过定制脚本只对你感兴趣的元素进行检测，从而实现效率优化。当使用 Modernizr 检测 CSS3 支持情况时，你无需具备任何 JavaScript 的知识。 你仅需在网页中插入文件，它随即根据浏</summary><published>2012-03-26T08:04:00Z</published><updated>2012-03-26T08:04:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2012/03/26/2418053.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2012/03/26/2418053.html"/><content type="html">&lt;div class="parbase compbase numberedheader section"&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;文章为转载,[&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;Modernizr&lt;/span&gt;&lt;/strong&gt;]不解释!&lt;/strong&gt;&lt;/p&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;什么是Modernizr？&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_0"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;Modernizr 是一个用来检测浏览器功能支持情况的 JavaScript 库。 目前，通过检验浏览器对一系列测试的处理情况，Modernizr 可以检测18项 CSS3 功能以及40多项关于HTML5 的功能。 它比传统检测浏览器名称（浏览器嗅探）的方式更为可靠。 一整套测试的执行时间仅需几微秒。 此外，Modernizr 网站通过定制脚本只对你感兴趣的元素进行检测，从而实现效率优化。&lt;/p&gt;&lt;p&gt;当使用 Modernizr 检测 CSS3 支持情况时，你无需具备任何 JavaScript 的知识。 你仅需在网页中插入文件，它随即根据浏览器的功能情况在页面的&amp;lt;html&amp;gt;标签上添加一组类。 相应类的名称已经符合标准化的要求并浅显易懂。 例如，如果浏览器支持 box-shadow 属性，则需要添加相应的 boxshadow 类；否则，添加一个 no-boxshadow类即可。 你所要做的一切只不过是创建一个使用这些类的式样表，以便为相应浏览器提供合适的式样。&lt;/p&gt;&lt;p&gt;Modernizr 可轻松实现 JavaScript 解决方案，即人们熟知的 polyfills&amp;mdash;&amp;mdash;它模拟HTML5 相关功能和技术，如地理定位。 然而，你的确需要对 JavaScript 有基本了解以便使用这些功能和技术。 术语&lt;em&gt;polyfill&amp;nbsp;&lt;/em&gt;来源于一种填补裂缝的黏土的英国品牌Polyfilla（即美国人熟知的填泥料）。 这里，polyfill 用来填补浏览器功能上的漏洞。 有时，Modernizr 可无缝地执行这项任务。 但本质上，这只是一种修补工作，所以，不能依赖它产生无漏洞浏览器所实现的完全相同结果。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;下载 Modernizr&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;与其它 JavaScript 库相同的是，Modernizr 可提供 development 和 production 版本。 与大多数库相比，唯一的不同之处是，空格和注释已经从 production 版本中删除了，这样可以减少下载量的大小。 Modernizr 采取了不同的方法。 development 版本在某种意义上可称为是&amp;ldquo;厨房中的水槽&amp;rdquo;&amp;mdash;它几乎包含了一切。 production 版本只包含了你选择的那些元素，这样能够显著降低下载量。 在很多情况下，production 版本可以缩小为development版本大小的二十分之一。&lt;/p&gt;&lt;p&gt;当使用 Modernizr 进行测试时，我建议你下载 development 版本。 一旦你掌握了它是如何运作的以及它的能力，你就可以下载一个自定义 production 版本以便在你的网站进行部署。&lt;/p&gt;&lt;p&gt;本教程的示例文件包含的是 Modernizr的development 2.0.6 版本，但是我建议你从 Modernizr 站点上用最新更新的版本替代它。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;下载本文附带的示例文件（&lt;a href="http://download.macromedia.com/pub/developer/dreamweaver/using_modernizr.zip" target="_blank"&gt;使用modernizr.zip&lt;/a&gt;）并且在 Dreamweaver 站点内将它们解压到一个方便的位置，或者是为本教程创建一个新站点。&lt;/li&gt;&lt;li&gt;访问 Moderniz 网站，其地址为&amp;nbsp;&lt;a href="http://www.modernizr.com/" target="_blank"&gt;http://www.modernizr.com/&amp;nbsp;&lt;/a&gt;。&lt;/li&gt;&lt;li&gt;在 Download Modernizr 2 部分中，单击 Development 按钮（参见图1）。Modernizr 的 development 版本就会直接在你的浏览器窗口上打开。&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_image"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase image section"&gt;&lt;img class="cq-dd-image LayoutRow LayoutImage LayoutCellSides" title="选中development版本以便进行Modernizr测试 " src="http://www.adobe.com/content/dotcom/cn/devnet/dreamweaver/articles/using-modernizr/_jcr_content/articlecontentAdobe/image.adimg.mw.650.jpg/1316745418574.jpg" alt="选中development版本以便进行Modernizr测试 " data-pinit="registered" /&gt;&lt;div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom"&gt;图1. 选中development版本以便进行Modernizr测试&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_1"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p class="note"&gt;&lt;strong&gt;注：&lt;/strong&gt;&amp;nbsp;如果你错误地单击了主导航菜单中的 Download 链接，那么你将看到大量的复选框出现，要求你去选择你想要的工具。 这是为定制的 production 版本所设置。 单击面板顶部的 Development 版本的链接，或者单击浏览器的 Back 按钮返回主页并选中图1所示的 Development 按钮。&lt;/p&gt;&lt;ol start="4"&gt;&lt;li&gt;在浏览器的主菜单上，选中 Save Page As，并在示例文件的js文件夹里将它另存为 modernizr.js。如果有必要的话可以替换已有的文件。&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_numberedheader_0"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase compbase numberedheader section"&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;使用 Modernizr 检测 CSS 功能&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_2"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;如前所述，Modernizr 并没有尝试在旧版本的浏览器中添加新的功能，但是它允许你按照你的风格去弥补那些缺失的功能。 为了展示这是如何运作的，示例文件中包含了一个叫做 css_support_begin.html 的页面。如果你在新式浏览器中加载这个页面，它应该看起来如图2所示。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_image_0"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase image section"&gt;&lt;img class="cq-dd-image LayoutRow LayoutImage LayoutCellSides" title="Firefox 5以多栏的格式显示了页面并且在图像中添加阴影 " src="http://www.adobe.com/content/dotcom/cn/devnet/dreamweaver/articles/using-modernizr/_jcr_content/articlecontentAdobe/image_0.adimg.mw.650.jpg/1316745722664.jpg" alt="Firefox 5以多栏的格式显示了页面并且在图像中添加阴影 " data-pinit="registered" /&gt;&lt;div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom"&gt;图2. Firefox 5以多栏的格式显示了页面并且在图像中添加阴影&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_3"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;该页面的风格是使用了CSS3的&amp;nbsp;&lt;code&gt;column-count&lt;/code&gt;&amp;nbsp;和&amp;nbsp;&lt;code&gt;box-shadow&lt;/code&gt;&amp;nbsp;属性，以便以多栏的格式显示文本并在图像中添加阴影。 旧版本的浏览器不支持这些属性中任何一项，因此在 Internet Explorer (IE) 7 中同一页面看起来如图3所示。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_image_1"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase image section"&gt;&lt;img class="cq-dd-image LayoutRow LayoutImage LayoutCellSides" title="IE7忽略了column-count 和 box-shadow属性 " src="http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/dreamweaver/articles/using-modernizr/fig03.jpg" alt="IE7忽略了column-count 和 box-shadow属性 " data-pinit="registered" /&gt;&lt;div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom"&gt;图3. IE7忽略了column-count 和 box-shadow属性&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_4"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;在IE9中，同一页面显示了图像阴影，但是文本和图3中所示的布局是一样的。&lt;/p&gt;&lt;p&gt;你在尝试弥补缺失的功能上采取什么方式取决于你的设计大纲的要求。 要尝试使页面在所有的浏览器中看起来完全一样将要涉及大量工作，但是你可以做一些简单的改进，比如在图像周围环绕文字，调整图像与文本的左边距，以及在图像底部和右边缘添加隐约的边界，以便使它更具三维立体的感觉。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;检测对 CSS3 功能的支持&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Modernizr 使用 JavaScript 检测浏览器所支持的功能，但是，它并不是使用 JavaScript 动态地加载不同的样式表，而是使用非常简单的技术将类添加到页面的&amp;lt;html&amp;gt;标签。然后作为设计者由你决定使用 CSS 层叠为目标元素提供合适的样式。例如，如果页面支持&amp;nbsp;&lt;code&gt;box-shadow&lt;/code&gt;&amp;nbsp;属性，那么 Modernizr 会添加&amp;nbsp;&lt;code&gt;boxshadow&lt;/code&gt;&amp;nbsp;类。如果不支持，那么它用&amp;nbsp;&lt;code&gt;no-boxshadow&lt;/code&gt;&amp;nbsp;类作为替代进行添加。&lt;/p&gt;&lt;p&gt;由于浏览器忽略它们无法识别的 CSS 属性，因此你可以放心地按照你的基本样式规则使用&amp;nbsp;&lt;code&gt;box-shadow&lt;/code&gt;&amp;nbsp;属性，然而需要按照下面的格式为旧版本的浏览器添加单独的&amp;nbsp;&lt;a href="http://www.adobe.com/devnet/dreamweaver/articles/css-selectors-pt1.html#articlecontentAdobe_numberedheader_0" target="_blank"&gt;descendant selector&amp;nbsp;&lt;/a&gt;：&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;.no-boxshadow img { /* styles for browsers that don't support box-shadow */ } &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_5"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;只有不支持&amp;nbsp;&lt;code&gt;box-shadow&lt;/code&gt;&amp;nbsp;的浏览器才会有&amp;nbsp;&lt;code&gt;no-boxshadow&lt;/code&gt;&amp;nbsp;类，因此其它的浏览器不会应用这个样式规则。&lt;/p&gt;&lt;p&gt;让我们将 Modernizr 添加到示例页面并检查它添加到&amp;lt;html&amp;gt; 标签中的类。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;复制 css_support_begin.html 并将它另存为 css_support.html。&lt;/li&gt;&lt;li&gt;打开你刚创建的复制文件，并切换到 Code 视图或者Split视图。&lt;/li&gt;&lt;li&gt;HTML markup 的前两行应该如下所示：&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_0"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;&amp;lt;!DOCTYPE HTML&amp;gt; &amp;lt;html&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_6"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;ol start="4"&gt;&lt;li&gt;将&lt;strong&gt;class="no-js"&lt;/strong&gt;添加到&amp;lt;html&amp;gt;标签中，如下所示：&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_1"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;&amp;lt;!DOCTYPE HTML&amp;gt; &amp;lt;html class="no-js"&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_7"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;Modernizr 依赖于在浏览器中启用的 JavaScrip。 当它启用时，这种类会被动态地删除。 但是，在极少数情况下，当 JavaScrip 没有启用时，它依然存在于 HTML makup 中，如果必要，它允许你为这样的访问者创建特殊的样式规则。&lt;/p&gt;&lt;ol start="5"&gt;&lt;li&gt;css_support.html 中的样式是嵌入在 &amp;lt;style&amp;gt; 块中。Modernizr 库需要被添加到样式加载之后的页面的 &amp;lt;head&amp;gt; 部分。在结束的 &amp;lt;/style&amp;gt; 和 &amp;lt;/head&amp;gt; 标签之间添加一条新的线，并且使用 &amp;lt;script&amp;gt;标签附加上 moderizr.js。最简单的方式是键入你自己的代码，但是你也可以在Insert面板中使用 Script 按钮或者选中 Insert &amp;ndash; HTML&amp;ndash;Script Objects&amp;ndash;Script。&amp;lt;head&amp;gt; 的最后三行应该如下所示：&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_2"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;&amp;lt;/style&amp;gt; &amp;lt;script src="js/modernizr.js"&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;/head&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_8"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p class="note"&gt;&lt;strong&gt;注：&lt;/strong&gt;&amp;nbsp;如果你使用 Insert 面板或者Insert菜单，则 Dreamweaver 会添加&amp;nbsp;&lt;code&gt;type="text/javascript"&lt;/code&gt;&amp;nbsp;到开始的 &amp;lt;script&amp;gt; 标签中。 这在 HTML5 中不再要求，但是留着它并不会造成危害。&lt;/p&gt;&lt;ol start="6"&gt;&lt;li&gt;保存 support_css.html 并在 Document 工具栏中单击 Live Code 按钮。 目前 &amp;lt;html&amp;gt; 标签已经加入了超过40个类的名称，这些名称能够表明 WebKit 浏览器引擎中 Dreamweaver 的内置版本的功能（参见图4）。&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_image_2"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase image section"&gt;&lt;img class="cq-dd-image LayoutRow LayoutImage LayoutCellSides" title="Modernizr添加了大量的表明浏览器功能的类 " src="http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/dreamweaver/articles/using-modernizr/fig04.jpg" alt="Modernizr添加了大量的表明浏览器功能的类 " data-pinit="registered" /&gt;&lt;div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom"&gt;图4. Modernizr添加了大量的表明浏览器功能的类&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_9"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p class="note"&gt;&lt;strong&gt;注：&lt;/strong&gt;如果你的 Dreamweaver 版本没有 Live Code（或者你正使用不同的 HTML 编辑器），那么你可以使用大多数新式浏览器提供的开发工具或者 Firefox 浏览器提供的 Firebug 检查生成的代码。&lt;/p&gt;&lt;p&gt;如图4所示，&amp;nbsp;&lt;code&gt;no-js&lt;/code&gt;&amp;nbsp;类已经被&lt;code&gt;js&lt;/code&gt;类替代，这表明 JavaScript 已经启用。&lt;/p&gt;&lt;p&gt;表1列举了 Modernizr 使用的类名称以表明对 CSS3 的支持。 如果某个功能不支持，那么相应类的名称用&lt;code&gt;no-&lt;/code&gt;作前缀。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;表1.&amp;nbsp;&lt;/strong&gt;Modernizr 检测的 CSS3 功能&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;strong&gt;CSS 功能&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;strong&gt;Modernizr 类（属性）&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;@font-face&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;fontface&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;::before&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;::after&lt;/code&gt;&amp;nbsp;pseudo-elements&lt;/td&gt;&lt;td&gt;&lt;code&gt;generatedcontent&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;background-size&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;backgroundsize&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;border-image&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;borderimage&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;border-radius&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;borderradius&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;box-shadow&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;boxshadow&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;CSS animations&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;cssanimations&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;CSS 2D transformations&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;csstransforms&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;CSS 3D transformations&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;csstransforms3d&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;CSS transitions&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;csstransitions&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;flexible box layout&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;flexbox&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;gradients&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;cssgradients&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;hsla()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;hsla&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;multi-column layout&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;csscolumns&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;multiple backgrounds&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;multiplebgs&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;opacity&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;opacity&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;reflection&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;cssreflections&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;rgba()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;rgba&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;text-shadow&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;textshadow&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;无论在哪对特定的CSS属性进行测试，类的名称和属性名称都是一样的，然而这要求去除任何连字号或是括号。 其它类是按照它们参考的CSS3模块而命名。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;创建旧版本浏览器样式规则&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;参见表1，你可以看到Modernizr使用&lt;code&gt;boxshadow&lt;/code&gt;&amp;nbsp;和&amp;nbsp;&lt;code&gt;csscolumns&amp;nbsp;&lt;/code&gt;分别表明了对&lt;code&gt;box-shadow&amp;nbsp;&lt;/code&gt;属性和多栏布局的支持。 因此，你可以使用&lt;code&gt;no-boxshadow&lt;/code&gt;&amp;nbsp;和&amp;nbsp;&lt;code&gt;no-csscolumns&amp;nbsp;&lt;/code&gt;类为不支持这些功能的浏览器创建特殊的样式规则。&lt;/p&gt;&lt;p&gt;为了保证指令简单，我将演示只有CSS 声明的范例。 你可以直接地将它们键入到Code视图中或者使用New CSS Rule对话框。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;为&lt;code&gt;.no-boxshadow img&lt;/code&gt;创建一个新的descendant (compound) selector。&lt;/li&gt;&lt;li&gt;设置2像素灰色实心的右边界和底边（我选择&lt;code&gt;#8A8A8A&lt;/code&gt;）。 由此产生的样式规则应该如下所示：&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_3"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;.no-boxshadow img { border-right: #8A8A8A 2px solid; border-bottom: #8A8A8A 2px solid; } &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_10"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;这不像半透明的阴影那样有吸引力，但是尽管如此，它仍然使得图像能够从背景中略微地突起。&lt;/p&gt;&lt;ol start="3"&gt;&lt;li&gt;在不支持多栏布局的浏览器中，你需要浮动图像并且调整它的页边距。为&lt;code&gt;.no-csscolumns img&lt;/code&gt;创建一个新的descendant selector。&lt;/li&gt;&lt;li&gt;设置图像向左浮动，并且将顶部和底部页边距设置为3px，右边距为8px，以及左边距为0。 样式声明如下所示：&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_4"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;.no-csscolumns img { margin: 3px 8px 3px 0; float: left; } &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_11"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;ol start="5"&gt;&lt;li&gt;确保这个样式规则是遵循&lt;code&gt;.columns img&lt;/code&gt;规则。两个规则有着相同的特殊性，因此，如果它们顺序颠倒，则&lt;code&gt;.columns img&amp;nbsp;&lt;/code&gt;的10像素的左边距可能会覆盖你刚刚创建的新规则。你可以将&lt;code&gt;.no-csscolumns img&lt;/code&gt;重命名为&lt;code&gt;.no-csscolumns .columns img&lt;/code&gt;以便于给它更高的特殊性，但是最好是保证selector越简单越好。（顺便说一下，如果你不确定什么是&lt;em&gt;特殊性&lt;/em&gt;，查阅Adrian Senior的文章，&lt;a href="http://www.adobe.com/devnet/dreamweaver/articles/css_specificity.html" target="_blank"&gt;Understanding Specificity&lt;/a&gt;。它虽然发表时间很长，但是很有价值。）&lt;/li&gt;&lt;li&gt;保存css_support.html，并在新式浏览器中对它进行测试。它应该和以前看起来完全一模一样。&lt;/li&gt;&lt;li&gt;你应该在你的本地系统上或通过链接到BrowserLab，在旧版本的浏览器上对这个页面进行测试。虽然没有阴影或者栏目，但是现在页面的式样是可接受的，如图5所示。&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_image_3"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase image section"&gt;&lt;img class="cq-dd-image LayoutRow LayoutImage LayoutCellSides" title="旧版本浏览器使用的是可选的样式，例如IE6。" src="http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/dreamweaver/articles/using-modernizr/fig05.jpg" alt="旧版本浏览器使用的是可选的样式，例如IE6。" data-pinit="registered" /&gt;&lt;div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom"&gt;图5. 旧版本浏览器使用的是可选的样式，例如IE6。&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_12"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;在这个的简单范例中，我只用了前缀为&lt;code&gt;no-&lt;/code&gt;的类就为旧版本的浏览器创建了特殊的样式。 但是，按照它们的能力,你不同时使用这两个类（带或不带前缀）为浏览器创建不同的样式是绝对没有道理的。 例如：&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_5"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;.csscolumns { /* rules for browsers that support multi-column layout */ } .no-csscolumns { /* rules for browsers that don't support multi-column layout */ } &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_13"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;有时这种方法是合理的，例如，如果你想为每一级支持都创建一个完全不同的布局。 但是如果它仅仅是一个为旧版本浏览器提供可选择的样式的问题，不要忘记，浏览器会忽略它们无法识别的属性。 如果你对所有的样式都使用 Modernizr 类，那么在 JavaScript 禁用的浏览器中你的页面将完全非样式化。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_numberedheader_1"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase compbase numberedheader section"&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;使用Modernizr检测HTML5的支持功能&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_14"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;Modernizr 为开始的&amp;lt;html&amp;gt;标签添加的类名称起着双重目的作用。当页面加载时，它们也是 Modernizr 对象创建的 JavaScript 属性的名称。表1列举了与 CSS 有关的类和属性的名称。表2列举了剩下的与 HTML5 和相关技术有关的类和属性，例如地理位置。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;表2.&amp;nbsp;&lt;/strong&gt;Modernizr 检测的与 HTML5 有关的功能&lt;/p&gt;&lt;table class="data"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;strong&gt;HTML5 有关功能&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;strong&gt;Modernizr 类（属性）&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Application cache&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;applicationcache&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Audio&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;audio.&lt;em&gt;type&lt;/em&gt;&amp;nbsp;(ogg, mp3, wav, m4a)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Canvas&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;canvas&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Canvas text&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;canvastext&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Drag and drop&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;draganddrop&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Form input attributes&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;input.&lt;em&gt;attributeName&lt;/em&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Form input elements&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;inputtypes.&lt;em&gt;elementName&lt;/em&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Geolocation&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;geolocation&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;hashchange event&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;hashchange&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;History management&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;history&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;IndexedDB&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;indexeddb&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Inline SVG&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;inlinesvg&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Local storage&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;localstorage&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Messaging&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;postmessage&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Session storage&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;sessionstorage&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;SMIL&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;smil&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;SVG&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;svg&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;SVG clip paths&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;svgclippaths&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Touch events&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;touch&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Video&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;video.&lt;em&gt;type&lt;/em&gt;&amp;nbsp;(ogg, webm, h264)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;WebGL&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;webgl&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Web sockets&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;websockets&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Web SQL database&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;websqldatabase&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Web workers&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;webworkers&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;在大多数情况下，表1和表2列举的所有属性返回的都是&amp;nbsp;&lt;code&gt;true&lt;/code&gt;&amp;nbsp;或者&amp;nbsp;&lt;code&gt;false&lt;/code&gt;&amp;nbsp;。所以，你可以按照如下所示使用 JavaScript 对本地存储进行测试：&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_6"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;if (Modernizr.localstorage) { // script to run if local storage is supported } else { // script to run if local storage is not supported } &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_15"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;然而,就&amp;nbsp;&lt;code&gt;audio&lt;/code&gt;&amp;nbsp;和&amp;nbsp;&lt;code&gt;video&lt;/code&gt;&amp;nbsp;而言，返回值是一个字符串，它表明着浏览器能够处理特定类型的置信水平。 根据 HTML5 规范，空的字符串表示该类型不支持。 如果支持该类型，那么返回值是&amp;ldquo;maybe&amp;rdquo;或是&amp;ldquo;probably&amp;rdquo;。 例如：&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_7"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;if (Modernizr.video.h264 == "") { // h264 is not supported } &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_16"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;&lt;strong&gt;使用 Modernizr 验证 HTML5 必需的表单字段&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;HTML5 添加了许多新的表单属性，例如&amp;nbsp;&lt;code&gt;autofocus&lt;/code&gt;，当页面第一次加载时它会自动地将光标放在某个指定的字段。 另一个有用的属性是&amp;nbsp;&lt;code&gt;required&lt;/code&gt;, 如果某个必需的字段留有空白，那么它将阻止HTML5兼容的浏览器提交表单（参见图6）。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_image_4"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase image section"&gt;&lt;img class="cq-dd-image LayoutRow LayoutImage LayoutCellSides" title="提交表单前，HTML5 兼容的浏览器会检查必需字段是否填写 " src="http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/dreamweaver/articles/using-modernizr/fig06.jpg" alt="提交表单前，HTML5 兼容的浏览器会检查必需字段是否填写 " data-pinit="registered" /&gt;&lt;div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom"&gt;图6. 提交表单前，HTML5 兼容的浏览器会检查必需字段是否填写&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_17"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;这很好，但是它会给你留下一个问题：旧版本的浏览器该怎么办？&lt;/p&gt;&lt;p&gt;一个解决方法是忽略它们，并留给服务器侧的验证功能进行最终的检查。 如果浏览器无法识别&amp;nbsp;&lt;code&gt;required&lt;/code&gt;&amp;nbsp;属性，那么另外一个处理这种情况的用户界面更为友好的方法是创建一个小小的脚本对必需字段进行检查。 如下的指令显示了在Modernizr帮助下如何进行相应的操作。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;在范例文件夹中复制 required_start.html并保存为 required.html。&lt;/li&gt;&lt;li&gt;在结束的&amp;lt;/head&amp;gt; 标签前用 &amp;lt;script&amp;gt;块按照如下所示将 modernizr.js 粘贴到页面中：&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_8"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;&amp;lt;/style&amp;gt; &amp;lt;script src="js/modernizr.js"&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;/head&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_18"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;ol start="3"&gt;&lt;li&gt;紧接在 Modernizr 库与页面连接的标签之后，创建一个单独的&lt;code&gt;&amp;nbsp;&amp;lt;script&amp;gt;&amp;nbsp;&lt;/code&gt;块，并且在页面一加载完就创建一个事件处理程序以便于执行代码：&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_9"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;&amp;lt;script src="js/modernizr.js"&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script&amp;gt; window.onload = function() { // code to execute when page loads }; &amp;lt;/script&amp;gt; &amp;lt;/head &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_19"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;ol start="4"&gt;&lt;li&gt;事件处理程序需要获得一个与表单元素有关的参考并在无法识别&amp;nbsp;&lt;code&gt;autofocus&lt;/code&gt;&amp;nbsp;和&amp;nbsp;&lt;code&gt;required&lt;/code&gt;&amp;nbsp;属性的浏览器中模拟它们。处理&lt;code&gt;autofocus&amp;nbsp;&lt;/code&gt;的方式很简单：&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_10"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;window.onload = function() { // get the form and its input elements var form = document.forms[0], inputs = form.elements; // if no autofocus, put the focus in the first field if (!Modernizr.input.autofocus) { inputs[0].focus(); } // if required not supported, emulate it } &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_20"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;该条件测试了&amp;nbsp;&lt;code&gt;Modernizr.input.autofocus&lt;/code&gt;，如果不支持&amp;nbsp;&lt;code&gt;autofocus&lt;/code&gt;，那么返回的值是&amp;nbsp;&lt;code&gt;false&lt;/code&gt;。 然而，逻辑运算符NOT（一个感叹号）却能使意思颠倒，因此如果不支持&amp;nbsp;&lt;code&gt;autofocus&lt;/code&gt;，那么该条件的求值结果为&amp;nbsp;&lt;code&gt;true&lt;/code&gt;，并且&amp;nbsp;&lt;code&gt;inputs[0].focus()&amp;nbsp;&lt;/code&gt;将光标放在第一个输入字段。&lt;/p&gt;&lt;ol start="5"&gt;&lt;li&gt;如果不支持&amp;nbsp;&lt;code&gt;required&lt;/code&gt;，那么现在添加代码以便于检查必需字段。 事件处理程序的完整代码如下所示：&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_11"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;window.onload = function() { // get the form and its input elements var form = document.forms[0], inputs = form.elements; // if no autofocus, put the focus in the first field if (!Modernizr.input.autofocus) { inputs[0].focus(); } // if required not supported, emulate it if (!Modernizr.input.required) { form.onsubmit = function() { var required = [], att, val; // loop through input elements looking for required for (var i = 0; i &amp;lt; inputs.length; i++) { att = inputs[i].getAttribute('required'); // if required, get the value and trim whitespace if (att != null) { val = inputs[i].value; // if the value is empty, add to required array if (val.replace(/^\s+|\s+$/g, '') == '') { required.push(inputs[i].name); } } } // show alert if required array contains any elements if (required.length &amp;gt; 0) { alert('The following fields are required: ' + required.join(', ')); // prevent the form from being submitted return false; } }; } } &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_21"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;新代码产生了一个函数，当提交表单时它能够遍历所有的输入元素，以便于找到具有&amp;nbsp;&lt;code&gt;required&lt;/code&gt;&amp;nbsp;属性的字段。 当它找到某个字段时，它会从值中除去开头和结尾的空白，并且如果结果是一个空的字符串，那么它会把结果添加到&amp;nbsp;&lt;code&gt;required&amp;nbsp;&lt;/code&gt;数组中。 在所有的字段都已经得到检查后，如果数组中包含某些元素，那么浏览器会显示一个与缺失字段名称有关的警告，并阻止提交表单。&lt;/p&gt;&lt;ol start="6"&gt;&lt;li&gt;保存 required.html 并加载到某个浏览器中，例如尚不支持 HTML5 表单的 IE 6-9。 注意一下光标是如何自动地填入第一个字段的。&lt;/li&gt;&lt;li&gt;单击提交按钮而无需填写任何其它字段。 你应该能看到一个警告提示你名称和邮箱字段需要填写（参见图7）。&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_image_5"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase image section"&gt;&lt;img class="cq-dd-image LayoutRow LayoutImage LayoutCellSides" title="脚本检测到不支持新属性的浏览器中的必需字段 " src="http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/dreamweaver/articles/using-modernizr/fig07.jpg" alt="脚本检测到不支持新属性的浏览器中的必需字段 " data-pinit="registered" /&gt;&lt;div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom"&gt;图7. 脚本检测到不支持新属性的浏览器中的必需字段&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_22"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;ol start="8"&gt;&lt;li&gt;只填写其中一个必需字段，再进行一次页面测试。 当你单击 OK 关闭警告时，你填写的字段仍然有它的内容，这表明表单尚未提交。&lt;/li&gt;&lt;li&gt;同时填写两个必需表单，并单击 submit 按钮。 这一次，所有表单字段被清空，并且你应该能够看到隶属于 URL 的数据作为查询字符串出现在浏览器的地址栏。 这就证实了表单数据已被提交。&lt;/li&gt;&lt;li&gt;在 HTML5 兼容的浏览器中，例如最新版本的 Firefox、Chrome 或者 Opera，对这个页面进行测试。 浏览器显示了它自己的类似于图6所示的错误信息，而不是显示警告信息。&lt;/li&gt;&lt;/ol&gt;&lt;p class="note"&gt;&lt;strong&gt;注意：&lt;/strong&gt;&amp;nbsp;Safari 5.1 错误地报告了它支持&amp;nbsp;&lt;code&gt;required&amp;nbsp;&lt;/code&gt;属性，所以它在没有验证必需字段的情况下就提交了表单。 这是 Safari 的缺陷，然而在 Modernizr 里它是不存在的。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_numberedheader_2"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase compbase numberedheader section"&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;创建版本&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_23"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;当你准备好对你的网站进行部署时，推荐创建一个 Modernizr 的自定义 production 版本，它只包含那些你实际需要的元素。 这可以按照你所选的功能将 Modernizr 库的大小从 44KB 缩小到 2KB。当前选项的范围如图8所示。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_image_6"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase image section"&gt;&lt;img class="cq-dd-image LayoutRow LayoutImage LayoutCellSides" title="Modernizr 下载页面允许你仅选择那些你需要的功能 " src="http://www.adobe.com/content/dotcom/cn/devnet/dreamweaver/articles/using-modernizr/_jcr_content/articlecontentAdobe/image_6.adimg.mw.650.jpg/1316757506635.jpg" alt="Modernizr 下载页面允许你仅选择那些你需要的功能 " data-pinit="registered" /&gt;&lt;div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom"&gt;图8. Modernizr 下载页面允许你仅选择那些你需要的功能&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_24"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;选项可以便捷地按照如下类别进行分组：CSS3、HTML5、Misc(ellaneous) 和 Extra。 单击前三个标题旁边的 Toggle 按钮可任意地选择或者放弃选择分类中的所有复选框。&lt;/p&gt;&lt;p&gt;在默认情形下，Extra 分类将会选中如下三个条目：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;HTML5 Shim/IEPP：&lt;/strong&gt;它添加了两个脚本&amp;mdash; HTML5 shim 和 IE Print Protector&amp;mdash;它们迫使 IE6-8 正确地设计并打印 HTML5 元素。如果你打算使用新的 HTML5 语义标签，例如 &amp;lt;header&amp;gt; 、&amp;lt;footer&amp;gt;、&amp;lt;nav&amp;gt; 、 &amp;lt;section&amp;gt; 、&amp;lt;article&amp;gt; 等等时，那么你&lt;em&gt;才&lt;/em&gt;需要这个选项。&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Modernizr.load(yepnope.js)：&lt;/strong&gt;它添加了一个不包含在 development 版本中的可选择的脚本加载器。它增加了3KB 的下载量，所以如果你不需要它，你可以放弃选择它。稍后我将描述如何使用该加载器。&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Add CSS Classes：&lt;/strong&gt;&amp;nbsp;它将 Modernizr 类添加到开始的&amp;lt;html&amp;gt;标签。如果你想检测对 CSS3 功能支持，那么你必须选择这个选项。&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;如果你在 CSS3 分类中选中任何选项，那么如下 Extra 分类中的选项也会被选中：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;Modernizr.testProp()&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Modernizr.testAllProps()&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Modernizr._domPrefixes()&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;不要&lt;/em&gt;取消选择这些选项。 这样做将会自动地取消你在 CSS3 分类中已经选择的任何选项。&lt;/p&gt;&lt;p&gt;Extra 分类中的MQ Polyfill (respond.js) 添加了一个脚本，它可以使IE 6-8中的 media queries 获得有限的支持。当你选中这个选项时，它会自动地选中Media Queries 和 Modernizr.testStyles()。如需知道更多关于media queries polyfill (respond.js)的信息，请访问&lt;a href="https://github.com/scottjehl/Respond" target="_blank"&gt;https://github.com/scottjehl/Respond&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;只有高级用户才会对 Extra 分类中的其它选项感兴趣。关于它们是什么和如何使用它们的更多细节，参见&lt;a href="http://www.modernizr.com/docs/#s3" target="_blank"&gt;Modernizr 文档的扩展性部分&lt;/a&gt;（&lt;a href="http://www.modernizr.com/docs/#s3" target="_blank"&gt;Extensibility section of the Modernizr documentation&lt;/a&gt;）。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;下载 Modernizr 自定义版本&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下面的说明描述了如何为范例文件创建一个 Modernizr 的自定义production版本。 后续的练习需要使用这一自定义版本，它将展示如何使用&amp;nbsp;&lt;code&gt;Modernizr.load()&lt;/code&gt;&amp;nbsp;加载外部 JavaScript 文件。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;单击&lt;a href="http://www.modernizr.com/download/" target="_blank"&gt;http://www.modernizr.com/download/&lt;/a&gt;. 这将会打开如图8所示的界面。&lt;/li&gt;&lt;li&gt;在 CSS3 分类中，选中&lt;strong&gt;box-shadow&lt;/strong&gt;&amp;nbsp;和&amp;nbsp;&lt;strong&gt;CSS columns&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;在 HTML5 分类中，选中&amp;nbsp;&lt;strong&gt;Input Attributes&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;在 Extra 分类中，取消选择&amp;nbsp;&lt;strong&gt;HTML5 Shim/IEPP&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;确保 Extra 分类中如下的选项被选中（它们应该已经自动地被选中）。&lt;ul&gt;&lt;li&gt;Modernizr.load(yepnope.js)&lt;/li&gt;&lt;li&gt;Add CSS Classes&lt;/li&gt;&lt;li&gt;Modernizr.testProp()&lt;/li&gt;&lt;li&gt;Modernizr.testAllProps()&lt;/li&gt;&lt;li&gt;Modernizr._domPrefixes&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol start="6"&gt;&lt;li&gt;单击Generate按钮。&lt;/li&gt;&lt;li&gt;当自定义脚本准备好（一般在一到两秒内）时，在 Generate 按钮旁边会出现一个 Download 按钮。 单击 Download 按钮并在范例网站的js文件夹中保存该文件。 下载页面会给 production 脚本提供一个文件名，例如 modernizr.custom.79475.js，但是你或许会希望给它一个更加有意义的名称。 在范例文件中，我使用的名称是 modernizr.adc.js。&lt;/li&gt;&lt;li&gt;用自定义 production 脚本的链接替换 modernizr.js in css_support.html 和 required.html 的链接。 注意 production 脚本只有 5KB，而不是 development 版本的44KB。&lt;/li&gt;&lt;li&gt;单击 css_support.html 中的 Live Code（或者使用你的浏览器中的 development 工具）。 现在，如图9所示，开始的&amp;lt;html&amp;gt;标签只有三个类。&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_image_7"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase image section"&gt;&lt;img class="cq-dd-image LayoutRow LayoutImage LayoutCellSides" title="现在&amp;lt;html&amp;gt;标签中的类只涉及必要的 CSS3 功能 " src="http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/dreamweaver/articles/using-modernizr/fig09.jpg" alt="现在&amp;lt;html&amp;gt;标签中的类只涉及必要的 CSS3 功能 " data-pinit="registered" /&gt;&lt;div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom"&gt;图9. 现在&amp;lt;html&amp;gt;标签中的类只涉及必要的 CSS3 功能&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_numberedheader_3"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase compbase numberedheader section"&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;使用 Moder 年 izr 加载外部脚本&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_26"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;当创建Modernizr的自定义production版本时，在默认情形下，必须选中包含&amp;nbsp;&lt;code&gt;Modernizr.load()&amp;nbsp;&lt;/code&gt;的选项。&lt;code&gt;Modernizr.load()&lt;/code&gt;&amp;nbsp;是&amp;nbsp;&lt;code&gt;yepnope()&amp;nbsp;&lt;/code&gt;的别名，它是与 Modernizr 同步开发的独立脚本加载器。 为了说明如何使用它，我给出一个简单范例。我已经将相应的脚本从 required.html 移到了 check_required.js，并且做了三个微小的改动以便于去除 Modernizr 测试以及将它赋值到一个名为&amp;nbsp;&lt;code&gt;init&amp;nbsp;&lt;/code&gt;的变量中。 修订的脚本如下所示：&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_12"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;var init = function() { // get the form and its input elements var form = document.forms[0], inputs = form.elements; // put the focus in the first input field inputs[0].focus(); // check required fields when the form is submitted form.onsubmit = function() { var required = [], att, val; // loop through input elements looking for required for (var i = 0; i &amp;lt; inputs.length; i++) { att = inputs[i].getAttribute('required'); // if required, get the value and trim whitespace if (att != null) { val = inputs[i].value; // if the value is empty, add to required array if (val.replace(/^\s+|\s+$/g, '') == '') { required.push(inputs[i].name); } } } // show alert if required array contains any elements if (required.length &amp;gt; 0) { alert('The following fields are required: ' + required.join(', ')); // prevent the form from being submitted return false; } }; }; &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_27"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;&lt;code&gt;Modernizr.load()&amp;nbsp;&lt;/code&gt;的一个很大的优点是，根据测试浏览器能力的结果，它可以有条件地加载脚本&amp;mdash;这就是为什么起初叫它&amp;nbsp;&lt;code&gt;yepnope()&amp;nbsp;&lt;/code&gt;的原因。 它可以异步地加载外部脚本&amp;mdash;换句话说，就是能够在浏览器已加载 Document Object Model (DOM) 之后加载外部脚本&amp;mdash;因此它可以有助于提升你的网站性能。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Modernizr.load()&amp;nbsp;&lt;/code&gt;的基本语法是将一个具有如下属性的对象传递给它：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;test&lt;/code&gt;: 你希望检测的 Modernizr 属性。&lt;/li&gt;&lt;li&gt;&lt;code&gt;yep&lt;/code&gt;: 如果测试成功，你希望加载的脚本的位置。 使用一个多脚本数组。&lt;/li&gt;&lt;li&gt;&lt;code&gt;nope&lt;/code&gt;: 如果测试失败，你希望加载的脚本的位置。 使用一个多脚本数组。&lt;/li&gt;&lt;li&gt;&lt;code&gt;complete&lt;/code&gt;: 外部脚本一经加载就运行的函数（可选）。&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;code&gt;yep&lt;/code&gt;&amp;nbsp;和&amp;nbsp;&lt;code&gt;nope&lt;/code&gt;&amp;nbsp;两者都是可选的，只要你提供了其中一个即可。&lt;/p&gt;&lt;p&gt;为了在 check_required.js 中加载和执行脚本，需要在 modernizr.adc.js 已附着到页面之后添加如下&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;块（代码位于required_load.html 中）：&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_13"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;&amp;lt;script&amp;gt; Modernizr.load({ test: Modernizr.input.required, nope: 'js/check_required.js', complete: function() { init(); } }); &amp;lt;/script&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_28"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;这样就与之前运行的完全一致，但是却可以降低已支持&amp;nbsp;&lt;code&gt;required&lt;/code&gt;&amp;nbsp;属性的浏览器的下载负荷。&lt;/p&gt;&lt;p&gt;为了测试多种条件，你可以给&amp;nbsp;&lt;code&gt;Modernizr.load()&lt;/code&gt;传递一组对象。如需获得更多细节信息，参见 Modernizr 文档上的&lt;a href="http://www.modernizr.com/docs/#load" target="_blank"&gt;Modernizr.load() 教程&lt;/a&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_numberedheader_4"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase compbase numberedheader section"&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;一句忠告&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_29"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;Modernizr 是一个强大而有用的工具，但是这并不意味着你就应该使用它。 并不是在所有情形下均必须使用 Modernizr 给浏览器提供多种样式。 如果你主要关注的对象是 Internet Explorer，那么考虑使用IE conditional comments。 你也可以使用CSS层叠覆盖一些样式。 例如，先使用hexadecimal color，然后使用&amp;nbsp;&lt;code&gt;rgba()&lt;/code&gt;&amp;nbsp;或&lt;code&gt;hsla()&amp;nbsp;&lt;/code&gt;覆盖它。 旧版本的浏览器会使用第一个值并且忽略第二个值。&lt;/p&gt;&lt;p&gt;Modernizr 真正地变成现实是当它与 polyfills 和其它 JavaScript 相结合的时候。但是记住，通常很容易创建属于你自己的适合支持功能的测试。例如，下面就是你测试某个浏览器是否支持&amp;nbsp;&lt;code&gt;required&lt;/code&gt;&amp;nbsp;属性的全部代码（代码位于required_nomodernizr.html 中）：&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_codeblock_14"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase codeblock compbase section"&gt;&lt;div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"&gt;&lt;code class="CodeBlock"&gt;var elem = document.createElement('input'); if (typeof elem.required != 'boolean') { // required is not supported } &lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_numberedheader_5"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="parbase compbase numberedheader section"&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;下一步阅读方向&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;h3 class="TextH3 LayoutCellSides LayoutRow"&gt;&lt;a name="articlecontentAdobe_text_31"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="text parbase section"&gt;&lt;div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium"&gt;&lt;p&gt;本教程已经涵盖了 Modernizr 的所有主要功能 如需了解关于这些功能的更多信息，请查阅相应的官方文档，其网站地址为&amp;nbsp;&lt;a href="http://www.modernizr.com/docs/" target="_blank"&gt;http://www.modernizr.com/docs/&lt;/a&gt;。 此外，你还可以找到下列有用资源：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://yepnopejs.com/" target="_blank"&gt;yepnopejs.com&lt;/a&gt;&amp;nbsp;提供关于&amp;nbsp;&lt;code&gt;yepnope()&lt;/code&gt;的深入讨论，它已经在 Modernizr 中被合并为&lt;code&gt;Modernizr.load()&lt;/code&gt;。&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.alistapart.com/articles/taking-advantage-of-html5-and-css3-with-modernizr/" target="_blank"&gt;充分利用HTML5和CSS3的Modernizr功能&lt;/a&gt;（&lt;a href="http://www.alistapart.com/articles/taking-advantage-of-html5-and-css3-with-modernizr/" target="_blank"&gt;Taking Advantage of HTML5 and CSS3 with Modernizr&lt;/a&gt;），作者：Faruk Ateş（Modernizr 项目负责人）尽管基于Modernizr 的较早版本，但该文章包含了一个关于通过 Modernizr 和 CSS3 获取的逐步性能改善的详细范例。&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/2418053.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2012/03/26/2418053.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/NetSos/archive/2012/02/08/2343058.html</id><title type="text">360为何在app store下架</title><summary type="text">今天下午听朋友说这个帖子火了，上威锋来看看，发现另外一个兄弟的分析，大家可以做参考。 360的全部APP都被苹果ban掉的消息是这几天圈子里最爆炸的新闻。不过，让我最感兴趣的是，到底是因为神马苹果要诛360的九族。 看看360的官方声明，它的原话是：系苹果方面发现部分产品刷票。 （声明原文在这里：weibo.com/1645903643/y4m3Zgdtl） 我来给大家翻译一下：因为作弊，被苹果ban了。 尽管遮遮掩掩，用了一个“被刷票”，这货好歹也算是承认作弊了，但是，事实真的这么简单么？之前网络上已经有很多大神做了各种分析猜测，我觉得都挺靠谱，但没一个拿出牛逼的证据来。 我来点干货，我昨天</summary><published>2012-02-08T10:20:00Z</published><updated>2012-02-08T10:20:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2012/02/08/2343058.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2012/02/08/2343058.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;今天下午听朋友说这个帖子火了，上威锋来看看，发现另外一个兄弟的分析，大家可以做参考。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp; 360的全部APP都被苹果ban掉的消息是这几天圈子里最爆炸的新闻。不过，让我最感兴趣的是，到底是因为神马苹果要诛360的九族。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 看看360的官方声明，它的原话是：&lt;span style="font-size: small;"&gt;&lt;span&gt;&lt;span&gt;系苹果方面发现部分产品刷票。 （声明原文在这里：weibo.com/1645903643/y4m3Zgdtl）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp; 我来给大家翻译一下：&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span&gt;&lt;span&gt;因为作弊，被苹果ban了。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; 尽管遮遮掩掩，用了一个&amp;ldquo;被刷票&amp;rdquo;，这货好歹也算是承认作弊了，但是，事实真的这么简单么？之前网络上已经有很多大神做了各种分析猜测，我觉得都挺靠谱，但没一个拿出牛逼的证据来。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 我来点干货，我昨天花了大半天时间研究了一下360的东西，逆向了360的几个APP的代码，有惊人的发现！！&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 先来看一张截图吧。这个是来自&amp;ldquo;360浏览器HD&amp;rdquo;这个APP的逆向结果。&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span&gt;&lt;span&gt;从代码可以看出，360调用了苹果未公开的接口。【注意，这是苹果非常厌恶，并明令禁止的！！！！！】&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;img class="weipic_pic" src="http://images.weiphone.com/attachments/photo/Day_120208/107704_5f981328672290e7b4b05c5115105.png" alt="" border="0" data-pinit="registered" /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;有多处引用，所列出的位置都调用了非公开接口，利用加密逃避苹果APP STORE的官方审查。&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&lt;img class="weipic_pic" src="http://images.weiphone.com/attachments/photo/Day_120208/107704_34301328672331e4d10ea14fa117f.png" alt="" border="0" data-pinit="registered" /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;span&gt;&amp;nbsp;看吧，下面的字符串都被加密过了：&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;img class="weipic_pic" src="http://images.weiphone.com/attachments/photo/Day_120208/107704_688a13286723854da032342af2f70.png" alt="" border="0" data-pinit="registered" /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;再利用下面的代码将加密的字符串进行解密：&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;img class="weipic_pic" src="http://images.weiphone.com/attachments/photo/Day_120208/107704_998e1328672426fe2a0c4c74ea7f0.png" alt="" height="700" border="0" data-pinit="registered" /&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&lt;img class="weipic_pic" src="http://images.weiphone.com/attachments/photo/Day_120208/107704_330b1328672463c85cbc2ebb61857.png" alt="" height="700" border="0" data-pinit="registered" /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;span&gt;然后获得的内容：&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;img class="weipic_pic" src="http://images.weiphone.com/attachments/photo/Day_120208/107704_21ca1328672496bab28edcee8b722.png" alt="" border="0" data-pinit="registered" /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 看明白了么？我白话总结一下：&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;span&gt;1、360这个APP的方法和对象调用了大量Webkit的私有方法，而不是公开调用的。这是苹果APP Store不允许调用的。&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; 2、为什么360上架的时候没被发现呢？因为360用了加密的办法来逃脱审查，保证自己的成功上架。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; 3、可以肯定，苹果在大清洗运动开始后，加大了审查力度，必然发现360的违规行为。以360这种违规、欺骗的手段，杀100次头都不为过。被集体下架，实在是太小儿科了。&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; 4.其实不管苹果最后给360说的到底是什么原因，总之就是苹果的行动已经表明了360的产品不受欢迎，在苹果一贯坚持的王者气质面前，在中国环境下靠打杀生长起来的土匪360显得相当囧，不仅要打落牙齿和血吞的笑脸相迎，还把血口伸向国内迁怒他人。&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 5.我做的的这些分析都有现成的APP可以下载，欢迎有能力的诸位自行验证。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;给大家提个醒：到海外市场去混，不要还改不掉国内那点匪气，360这次把中国公司的脸丢到国外了，以后大家更要小心谨慎了，可以想见苹果的审核人员从此以后对中国公司的APP会有存在多么的偏见，会更加严格反复的审核了！360真是国内开发者的集体悲哀。&amp;nbsp;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp; 回过头来说360的声明，可以盖棺定论的是：&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;span&gt;1、360撒谎了。导致360APP下架的原因之一是作弊，除此之外，至少还有一个原因：违反苹果开发准则。但360对此避而不谈。&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; 2、我敢打赌，360不敢公布苹果回复邮件的全文。因为其中必然提到360欺骗违规。就学韩寒吧，赌2000万。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 上面就是我的研究结论，欢迎各位大神继续吐槽。&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;下面是另外一个兄弟的分析，大家可以做参考。&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;国内这几天真热闹，上周刚回到硅谷这边，这周陆续跟同事聊360的事，发现大家集中有两个话题，一个是360的隐私问题，另一个是如何对苹果APP的审核更加小心谨慎。&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;这边有几个高手这几天业余时间看了看360 APP的代码，大家开会时讨论用，结果就发现尴尬的地方了，360手机卫士和电池医生至少这两款APP存在各种各样侵犯用户隐私的行为，但是代码做得很巧妙，不得不佩服360在这方面挖空心思。&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我把同事的一些研究成果集中在这里，一些图片稍微处理了下。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;1、非法读取用户的iPhone上安装了哪些APP&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;请注意，这里的代码取自APP Store版的360手机卫士和360电池医生。从代码可以看出，它在非法访问获取用户这台iPhone中已经安装了的APP信息。360你读这个信息干嘛？我装了什么APP，管你什么事？&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我想问问360：一台iPhone，用户到底装了哪些APP，这算不算隐私？&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;img class="weipic_pic" src="http://images.weiphone.com/attachments/photo/Day_120208/107704_64901328691349eaaadd85e109450.jpg" alt="" width="700" border="0" data-pinit="registered" /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; 2、非法阅览用户的照片和音乐文件夹&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;如果说你读取我装的APP信息算是隐私还有点矫情，那你到底为什么读取用户iPhone的照片和音乐文件夹？你是不是有嫌疑把用户的艳照拿走？&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;img class="weipic_pic" src="http://images.weiphone.com/attachments/photo/Day_120208/107704_15111328691404415c6a8f2f5e8ba.jpg" alt="" width="700" border="0" data-pinit="registered" /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;3、非法获取系统进程资源信息&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;以下是另一位同事拿到的APP Store版360手机卫士部分代码，代码显示360正在获取系统进程资源信息。这个基本上说得过去，但这是苹果APP Store严禁的行为。&amp;nbsp;&lt;br /&gt;&lt;img class="weipic_pic" src="http://images.weiphone.com/attachments/photo/Day_120208/107704_2006132869146230bdf7dde28ad49.jpg" alt="" width="700" border="0" data-pinit="registered" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;下面来总结一下，我试图用最严密的逻辑来推导一下：&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A、360读取上述所有信息，都是苹果不允许的，属于开发者的违规行为，苹果见一次踢一次，见两次踢全家。这在所有的APP中，极其罕见。&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;B、360读取这些不必要的信息的动机是什么？恐怕只有360自己知道。这家公司在隐私窃取和泄露方面是有前科的。前年连Google快照里都有360的上传的隐私信息，用户的账号密码都有。那次事件触动了Google员工，这次事件触动了苹果员工，360真牛。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C、抛开动机和阴谋论。360读取这些不必要的信息，是完全具备窃取隐私的能力的。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;这就好比一个惯偷，他以前偷过东西，现在他跑到你家里去了，你觉得，你是不是有理由怀疑他又一次在作案？所以，我强烈质疑，360在其APP中有窥探、窃取用户隐私的嫌疑。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我想说的是，这次360事件肯定在苹果乃至整个硅谷APP开发圈都造成了影响，今后中国的开发兄弟们一定要多小心谨慎，偏见的产生在所难免，尤其是看了以下的代码后，你会觉得中国人的那点小聪明基本都集中在360身上了。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;另外我坚决不会向身边的亲朋好友推荐360任何东西，这家公司从PC到手机的记录，从3721到360的记录完全不值得任何信任，就像希特勒能力是很强，但是你能信任他能给你任何福祉吗？&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;最后补充下，这些APP如360手机卫士在APP Store的最后一次更新是1.81版本，而360又明确在公告中说了&amp;ldquo;360产品无需做任何修改，将在未来48小时到72小时内重新上架苹果APP商店&amp;rdquo;，等360上架的时候，可以分析一下，360到底有没有改动过，呵呵，很简单，看看ipa就知道了。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;当然，如果是这个结果，我又会对苹果的APP审核机制产生新的忧虑。&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/2343058.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2012/02/08/2343058.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/NetSos/archive/2012/01/17/2324337.html</id><title type="text">Google 的 芝麻开门 功能。</title><summary type="text">Google 现在提供「芝麻开门」功能。这个功能的使用情境是这样的：你想要使用公共电脑登入Google 的各项服务（例如Google+ 或GMail），但是不知道那个公共电脑是否安全，所以你不会想要在上面直接输入你的Google 帐号密码；另一方面，虽然你手上有手机可以登入Google 服务，但是要在手机上面输入跟操作其实还是比较不方便。所以「芝麻开门」提供的功能是：用你的手机来让那台公共电脑登入你的Google 服务！步骤如下：1. 在可能不安全的公共电脑上，连到这个网页： http://accounts.google.com/sesame2. 浏览器上会冒出一个QR Code 二维条码3.</summary><published>2012-01-17T01:57:00Z</published><updated>2012-01-17T01:57:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2012/01/17/2324337.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2012/01/17/2324337.html"/><content type="html">&lt;div id="gt-res-wrap"&gt;&lt;div id="gt-res-content" class="almost_half_cell"&gt;&lt;div dir="ltr"&gt;&lt;span id="result_box" lang="zh-CN"&gt;&lt;span title="Google 現在提供「芝麻開門」功能。"&gt;&lt;a title="小贺" href="http://netsos.cnblogs.com"&gt;&lt;strong&gt;Google 现在提供「芝麻开门」功能。&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span title="這個功能的使用情境是這樣的：你想要使用公共電腦登入Google 的各項服務（例如Google+ 或GMail），但是不知道那個公共電腦是否安全，所以你不會想要在上面直接輸入你的"&gt;这个功能的使用情境是这样的：你想要使用公共电脑登入Google 的各项服务（例如Google+ 或GMail），&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span id="result_box" lang="zh-CN"&gt;&lt;span title="這個功能的使用情境是這樣的：你想要使用公共電腦登入Google 的各項服務（例如Google+ 或GMail），但是不知道那個公共電腦是否安全，所以你不會想要在上面直接輸入你的"&gt;但是不知道那个公共电脑是否安全，所以你不会想要在上面直接输入你的&lt;/span&gt;&lt;span title="Google 帳號密碼；另一方面，雖然你手上有手機可以登入Google 服務，但是要在手機上面輸入跟操作其實還是比較不方便。"&gt;Google 帐号密码；&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span id="result_box" lang="zh-CN"&gt;&lt;span title="Google 帳號密碼；另一方面，雖然你手上有手機可以登入Google 服務，但是要在手機上面輸入跟操作其實還是比較不方便。"&gt;另一方面，虽然你手上有手机可以登入Google 服务，但是要在手机上面输入跟操作其实还是比较不方便。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span id="result_box" lang="zh-CN"&gt;&lt;span title="所以「芝麻開門」提供的功能是：用你的手機來讓那台公共電腦登入你的Google 服務！"&gt;所以「芝麻开门」提供的功能是：用你的手机来让那台公共电脑登入你的Google 服务！&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span title="步驟如下："&gt;步骤如下：&lt;br /&gt;&lt;/span&gt;&lt;span title="1. 在可能不安全的公共電腦上，連到這個網頁： http://accounts.google.com/sesame"&gt;1. 在可能不安全的公共电脑上，连到这个网页： http://accounts.google.com/sesame&lt;br /&gt;&lt;/span&gt;&lt;span title="2. 瀏覽器上會冒出一個QR Code 二維條碼"&gt;2. 浏览器上会冒出一个QR Code 二维条码&lt;br /&gt;&lt;/span&gt;&lt;span title="3. 用你的手機，拍下那個二維條碼並連到解出來的網址"&gt;3. 用你的手机，拍下那个二维条码并连到解出来的网址&lt;br /&gt;&lt;/span&gt;&lt;span title="4. 在手機上登入你的 Google 帳號"&gt;4. 在手机上登入你的 Google 帐号(然后再选择你要 芝麻开门,就是 下面的2个按钮 start gmail &amp;nbsp;or &amp;nbsp;start igoogle)&lt;br /&gt;&lt;/span&gt;&lt;span title="5. 如此，那台可能不安全的公共電腦就會自動登入你的Google 帳號，讓你能夠使用各項Google 服務"&gt;5. 如此，那台可能不安全的公共电脑就会自动登入你的Google 帐号，让你能够使用各项Google 服务&lt;br /&gt;&lt;/span&gt;&lt;span title="6. 最後別忘了要登出！"&gt;6. 最后别忘了要登出！&amp;nbsp;&lt;/span&gt;&lt;span style="text-decoration: underline; color: #ff0000;"&gt;&lt;span title="（登出就不用輸入密碼了，當然。）"&gt;（登出就不用输入密码了，当然。）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="gt-res-tools"&gt;&lt;div id="gt-src-tools-l"&gt;&amp;nbsp;&lt;/div&gt;&lt;div id="gt-res-tools-r"&gt;&lt;div id="gt-res-roman" class="trans-roman-button goog-toolbar-button" data-tooltip="Read phonetically" data-tooltip-align="t,c"&gt;&amp;nbsp;&lt;/div&gt;&lt;div id="gt-res-rate" data-tooltip="Rate translation" data-tooltip-align="t,c"&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/2324337.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2012/01/17/2324337.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/NetSos/archive/2011/11/08/2240838.html</id><title type="text">[转]滤镜渐变使用 IE浏览器</title><summary type="text">1. IE浏览器下的渐变背景使用渐变滤镜filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=red,endcolorstr=blue,gradientType=1);相关说明：上面的滤镜代码主要有三个参数，依次是：startcolorstr, endcolorstr, 以及gradientType。其中gradientType=1代表横向渐变，gradientType=0代表纵向淅变。startcolorstr=”色彩” 代表渐变渐变起始的色彩，endcolorstr=”色彩” 代表渐变结尾的色彩。上面代码实现的是红</summary><published>2011-11-08T03:07:00Z</published><updated>2011-11-08T03:07:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2011/11/08/2240838.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2011/11/08/2240838.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span&gt;1. IE浏览器下的渐变背景使用渐变滤镜&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=red,endcolorstr=blue,gradientType=1);&lt;/p&gt;&lt;p&gt;相关说明：&lt;br /&gt;上面的滤镜代码主要有三个参数，依次是：startcolorstr, endcolorstr, 以及gradientType。&lt;br /&gt;其中gradientType=1代表横向渐变，gradientType=0代表纵向淅变。startcolorstr=&amp;rdquo;色彩&amp;rdquo; 代表渐变渐变起始的色彩，endcolorstr=&amp;rdquo;色彩&amp;rdquo; 代表渐变结尾的色彩。&lt;/p&gt;&lt;p&gt;上面代码实现的是红色至蓝色的渐变，但是不含透明度变化，这是由于IE目前尚未支持opacity属性以及RGBA颜色，要实现IE下的透明度变化，还是需要使用IE滤镜，IE的透明度滤镜功能比较强大，这种强大反而与Firefox或是Safari浏览器下的css-gradient背景渐变的用法类似。例如下面的使用：&lt;/p&gt;&lt;p&gt;filter:alpha(opacity=100 finishopacity=0 style=1 startx=0,starty=5,finishx=90,finishy=60)&lt;br /&gt;opacity表示透明度，默认的范围是从0 到 100，他们其实是百分比的形式。也就是说，0代表完全透明，100代表完全不透明。&lt;br /&gt;finishopacity 是一个可选参数，如果想要设置渐变的透明效果，就可以使用他们来指定结束时的透明度。范围也是0 到 100。&lt;br /&gt;style用来指定透明区域的形状特征：&lt;br /&gt;0 代表统一形状&lt;br /&gt;1 代表线形&lt;br /&gt;2 代表放射状&lt;br /&gt;3 代表矩形。&lt;br /&gt;startx 渐变透明效果开始处的 X坐标。&lt;br /&gt;starty 渐变透明效果开始处的 Y坐标。&lt;br /&gt;finishx 渐变透明效果结束处的 X坐标。&lt;br /&gt;finishy 渐变透明效果结束处的 Y坐标。&lt;/p&gt;&lt;p&gt;实现IE下含透明度变化红蓝垂直渐变的代码如下：&lt;br /&gt;&lt;span&gt;.gradient{&lt;br /&gt;width:300px;&lt;br /&gt;height:150px;&lt;br /&gt;filter:alpha(opacity=100 finishopacity=50 style=1 startx=0,starty=0,finishx=0,finishy=150) progid:DXImageTransform.Microsoft.gradient(startcolorstr=red,endcolorstr=blue,gradientType=1);&lt;br /&gt;-ms-filter:alpha(opacity=100 finishopacity=50 style=1 startx=0,starty=0,finishx=0,finishy=150) progid:DXImageTransform.Microsoft.gradient(startcolorstr=red,endcolorstr=blue,gradientType=1);&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;div class="gradient"&amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;2、Firefox浏览器下的渐变背景&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对于Firefox浏览器下(Firefox 3.6+)渐变背景的实现需使用CSS3渐变属性，-moz-linear-gradient属性&lt;/p&gt;&lt;p&gt;&lt;span&gt;.gradient{&lt;br /&gt;width:300px;&lt;br /&gt;height:150px;&lt;br /&gt;background:-moz-linear-gradient(top, red, rgba(0, 0, 255, 0.5));&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;div class="gradient"&amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;3.chrome/Safari浏览器下的渐变背景实现&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对于webkit核心的浏览器，如Chrome/Safari浏览器下渐变背景的实现也是使用CSS3 渐变方法，css-gradient，具体为-webkit-gradient，使用语Firefox浏览器是有一些差异的。&lt;/p&gt;&lt;p&gt;&lt;span&gt;.gradient{&lt;br /&gt;width:300px;&lt;br /&gt;height:150px;&lt;br /&gt;background:-webkit-gradient(linear, 0 0, 0 bottom, from(#ff0000), to(rgba(0, 0, 255, 0.5)));&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;div class="gradient"&amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;4.兼容性的渐变背景效果&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;.gradient{&lt;br /&gt;width:300px;&lt;br /&gt;height:150px;&lt;br /&gt;filter:alpha(opacity=100 finishopacity=50 style=1 startx=0,starty=0,finishx=0,finishy=150) progid:DXImageTransform.Microsoft.gradient(startcolorstr=red,endcolorstr=blue,gradientType=0);&lt;br /&gt;-ms-filter:alpha(opacity=100 finishopacity=50 style=1 startx=0,starty=0,finishx=0,finishy=150) progid:DXImageTransform.Microsoft.gradient(startcolorstr=red,endcolorstr=blue,gradientType=0);/*IE8*/&lt;br /&gt;background:red; /* 一些不支持背景渐变的浏览器 */&lt;br /&gt;background:-moz-linear-gradient(top, red, rgba(0, 0, 255, 0.5));&lt;br /&gt;background:-webkit-gradient(linear, 0 0, 0 bottom, from(#ff0000), to(rgba(0, 0, 255, 0.5)));&lt;br /&gt;background:-o-linear-gradient(top, red, rgba(0, 0, 255, 0.5));&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;div class="gradient"&amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;&lt;p&gt;CSS3的潜力非常的大，就渐变这一块可以创建很多精湛的UI效果，而以往这些效果都只能使用图片实现。CSS渐变背景的实现可以有效降低网页的图片数，也就是降低了HTTP请求，是非常受用的。但是IE浏览器一直蹲在茅厕边啃鸡腿&amp;mdash;&amp;mdash;自以为美味，得使用资源消耗很高的滤镜才能实现渐变效果。所以，目前而言，渐变背景的的应用与否还是有待于利弊权衡的。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/2240838.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2011/11/08/2240838.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/NetSos/archive/2011/11/04/2235750.html</id><title type="text">ie9 scrollbar中hover 高度增高的bug</title><summary type="text">[摘]当我们制作表格的时候，有时候会遇到数据过长，列数过多，需要横向or纵向的滚动条的需求，我们一般的做法是 给这个表格的外层加一个 scroll_auto 的 div 并设置:/*css document*/.scroll_auto{ width:100%; overflow:auto;}套在table的外层&lt;!-- html element --&gt;&lt;div class="scroll_auto"&gt;&lt;table&gt; &lt;tr&gt; &lt;td&gt;.........&lt;/td&gt; &lt;/tr&gt; &lt;tr&amp;</summary><published>2011-11-04T02:31:00Z</published><updated>2011-11-04T02:31:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2011/11/04/2235750.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2011/11/04/2235750.html"/><content type="html">&lt;p&gt;[摘]&lt;/p&gt;&lt;p&gt;当我们制作表格的时候，有时候会遇到数据过长，列数过多，需要横向or纵向的滚动条的需求，我们一般的做法是 给这个表格的外层加一个 scroll_auto 的 div 并设置:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;/*css document*/&lt;br/&gt;.scroll_auto{ width:100%; overflow:auto;}&lt;br/&gt;&lt;/div&gt;&lt;p&gt;套在table的外层&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;!-- html element --&amp;gt;&lt;br/&gt;&amp;lt;div class="scroll_auto"&amp;gt;&lt;br/&gt;&amp;lt;table&amp;gt;&lt;br/&gt;&amp;lt;tr&amp;gt;&lt;br/&gt;&amp;lt;td&amp;gt;.........&amp;lt;/td&amp;gt;&lt;br/&gt;&amp;lt;/tr&amp;gt;&lt;br/&gt;                  &amp;lt;tr&amp;gt;&lt;br/&gt;&amp;lt;td&amp;gt;........&amp;lt;/td&amp;gt;&lt;br/&gt;&amp;lt;/tr&amp;gt;&lt;br/&gt;&amp;lt;/table&amp;gt;&lt;br/&gt;&amp;lt;/div&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;如果碰巧 你给这个 table 或者table里面的元素 设置了 :hover 的伪类(最常见的是鼠标移到table中对应的行数，该行高亮) 并在里面写有属性，那恭喜 专属于 ie9 的 bug出现了(经测试，直到ie10预览版第二版，这个bug都还没修复)。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a title="ie9中bug" href="http://bit.ly/rDa16L" target="_blank"&gt;bug 重现地址:ie9 bug　&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;img title="ie9中bug" src="http://www.jackness.org/wp-content/uploads/2011/10/ie9-scrollbar-bug_img01.png" alt="ie9中bug" width="486" height="525" /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;静看是好的，可是，当我们鼠标移动到 table里面的时候，悲剧出现了。&lt;br /&gt;在 ie9 中 ,我们可以看到每当我们在table内部促发hover伪类的时候， 黑色的块级元素 就会往下掉,直到掉到浏览器窗口的底部又跳回原来的位置，周而复始&amp;hellip;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;bug 触发条件：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;经测试发现，这个bug的出现 有2个条件：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;父级设置 overflow:auto(准确来说 应该是 overflow-x:auto),并且里面的元素宽度超出父级导致横向滚动条出现&lt;/li&gt;&lt;li&gt;父级元素的任意子元素设有:hover伪类并且里面有属性设置(与原有的属性不一样即可)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;满足这2个条件，当你触发父级里面的 :hover 伪类的时候，bug就会出现。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;解决方案：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;知道了触发条件，自然解决方案就能得知。&lt;/p&gt;&lt;p&gt;根据触发条件得到的解决方案是：&lt;/p&gt;&lt;p&gt;1.给父级别设置 overflow-x:scroll,即：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;/*css document*/&lt;br/&gt;.scroll_auto{ width:100%; overflow-x:scroll;(or overflow-y:scroll )}&lt;br/&gt;&lt;/div&gt;&lt;p&gt;2.保证这个父级里面的元素不超出 父级的宽度。&lt;/p&gt;&lt;p&gt;3.保证这个父级里面的元素没有:hover 伪类(这个貌似不怎么可能)。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="color: #ff0000; text-decoration: underline;"&gt;对症下药&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;1.首先，给 .scroll_auto 外层包一个 空 tag(行内元素 or 块级元素均可){如外面套一个空的dv}&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;!-- html document --&amp;gt;&lt;br/&gt;&amp;lt;div&amp;gt;&lt;br/&gt;&amp;lt;div class="scroll_auto"&amp;gt;&lt;br/&gt;&amp;lt;table class="gen_tb" width="110%"&amp;gt;&lt;br/&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;文字&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br/&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;文字&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br/&gt;&amp;lt;/table&amp;gt;&lt;br/&gt;&amp;lt;/div&amp;gt;&lt;br/&gt;&amp;lt;/div&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;2.给 这个元凶 .scroll_auto 设置一个:hover伪类&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;/*css document*/&lt;br/&gt;.scroll_auto:hover{ height:100%;}&lt;br/&gt;&lt;/div&gt;&lt;p&gt;刷新页面, bug修复。这种方法主要是针对&lt;span style="color: #ff0000;"&gt; height&lt;/span&gt; 来的，八格!&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/2235750.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2011/11/04/2235750.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/NetSos/archive/2011/03/24/1994093.html</id><title type="text">严格模式下 W3C Strict 验证的几个注意事项</title><summary type="text">首先说下，这篇文章是从 jsmix 文章。对jsmix的标题现在搞的还是云里雾里的。”不会做蛋炒饭的小提琴手不是个好程序员“，这个侬晓得的吗？我是真不知道；好了正文开始了.现在有很多网站已经不太注重 W3C 的验证了，不过这终究不是一件太好的事情，他们有的为了省事不验证，有的在开发过程中一些问题没注意，导致后来要想再修改来通过验证需要付出代价太大而放弃，有的为了节省代码减少流量加快加载速度而放弃繁文缛节。但不管怎么说，至少通过严格遵守一个行业通用的标准来规范自己的代码，也是一件值得推崇的事情。本站声明了 W3C Strict 型文档的规则，并且所有页面都经过零错误、零警告的验证。下面是一些可能</summary><published>2011-03-24T08:56:00Z</published><updated>2011-03-24T08:56:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2011/03/24/1994093.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2011/03/24/1994093.html"/><content type="html">&lt;p&gt;首先说下，这篇文章是从 &lt;a target="_blank" href="http://www.jsmix.com"&gt;jsmi&lt;/a&gt;&lt;a target="_blank" href="http://www.jsmix.com/"&gt;x&lt;/a&gt; 文章。&lt;/p&gt;&lt;p&gt;对jsmix的标题现在搞的还是云里雾里的。&lt;span style="color: #ff0000;"&gt;&amp;rdquo;不会做蛋炒饭的小提琴手不是个好程序员&amp;ldquo;&lt;span style="color: #000000;"&gt;，这个侬晓得的吗？我是真不知道；&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;span style="color: #000000;"&gt;好了正文开始了.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;现在有很多网站已经不太注重 W3C 的验证了，不过这终究不是一件太好的事情，他们有的为了省事不验证，有的在开发过程中一些问题没注意，导致后来要想再修改来通过验证需要付出代价太大而放弃，有的为了节省代码减少流量加快加载速度而放弃繁文缛节。但不管怎么说，至少通过严格遵守一个行业通用的标准来规范自己的代码，也是一件值得推崇的事情。本站声明了 W3C Strict 型文档的规则，并且所有页面都经过零错误、零警告的验证。下面是一些可能较少被人注意的验证中容易导致错误的问题，如果想要通过验证，这些问题应该值得看一看。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. &lt;a href="http://www.cnblogs.com/NetSos/archive/2011/03/24/1994093.html"&gt;正确地嵌入 Flash&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;很多人依然使用 embed 标签来嵌入 Flash，甚至包括在优酷提供的视频分享代码中，这个标签已经被废置，正确地嵌入 Flash，需要像下面一样使用 &lt;b&gt;object&lt;/b&gt; 标签，并配合 param 标签为 &lt;b&gt;object&lt;/b&gt; 设置参数。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;object type="application/x-shockwave-flash" width="480" height="400"&amp;gt;&lt;br/&gt;    &amp;lt;param name="movie" value="flash 地址"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;&amp;lt;/object&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2011/03/24/1994093.html"&gt;2. 文档内的 JavaScript&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;有的时候可能不可避免的要通过后台来输出一些 JavaScript 代码，这样的代码只能直接书写在 x(html) 文档中，这并没有问题，但如果这些 JavaScript 代码中包含了有 HTML 字符的代码，那么除了使用正确的 script 标签包裹代码之外，还需要添加 character data，即 &lt;b&gt;CDATA&lt;/b&gt; 标记，这个标记下的所有实体字符都会被 HTML 当做字符数据看待。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;//正确的写法&lt;br/&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br/&gt;    //&amp;lt;![CDATA[&lt;br/&gt;        var div = '&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;';&lt;br/&gt;    //]]&amp;gt;&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&lt;br/&gt;//错误的写法&lt;br/&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br/&gt;    var div = '&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;';&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2011/03/24/1994093.html"&gt;3. 贴代码的问题&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;开发人员的博客，一般都会有一些实例代码，但是在这些代码中，往往包含了一些对于 HTML 来说有特殊含义的字符，比如 &lt;b&gt;&amp;lt;&lt;/b&gt; 和 &lt;b&gt;&amp;gt;&lt;/b&gt; 分别是一个 HTML 标签开始和结束的标志。这时需要使用该字符的实体名称或者实体编号。例如，对于小于符号&lt;strong&gt; &amp;lt;&lt;/strong&gt; 来说，&lt;span style="color: #ff0000;"&gt;他的实体名称为 &lt;b&gt;&amp;amp;lt;&lt;/b&gt;，实体编码为 &lt;b&gt;&amp;amp;#60;&lt;/b&gt;。&lt;/span&gt;如果需要了解更多关于 HTML 字符实体(HTML entities)的内容，请移步到&lt;a href="http://www.w3school.com.cn/html/html_entities.asp" class="link_external"&gt;W3school&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2011/03/24/1994093.html"&gt;4. target = "_blank"&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;不用再在 a 标签上使用这个属性来让用户在新窗口打开页面，让用户自由地选择把，他们可以通过鼠标中间点击，或者按住 ctrl 键点击链接来轻松地达到同样的目的。如果实在需要强制用户在新窗口打开链接，那么给 a 标签加上&lt;span style="color: #ff0000;"&gt; rel="external" &lt;/span&gt;属性，然后使用下面的 JavaScript 代码进行处理：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    var anchors = document.getElementsByTagName("a");    &lt;br/&gt;    for ( var i = 0 ; i &amp;lt; anchors.length ; i++ ) {    &lt;br/&gt;            if ( anchor[i].getAttribute("rel") === "external"){&lt;br/&gt;                    anchor[i].target = "_blank";&lt;br/&gt;            }&lt;br/&gt;    }&lt;br/&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/1994093.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2011/03/24/1994093.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/NetSos/archive/2011/03/23/1992098.html</id><title type="text">中国正在消失的老行当</title><summary type="text">民族的才是世界的，这些民俗文化，有许多是童年难以泯灭的美好的记忆，希望能传承下去...向还在从事这些活动的普通劳动者致敬...你们才是最伟大的艺术家！虽然老行当真的是越来越少见了，但看到那么多真的是很怀念啊！是什么埋没了他们呢，是现在科技发达了吗？是社会进步了吗？希望小编能在图片下添加一些评论就好了，鄙人才疏学浅，不知道用什么词语来描述这些中国的老艺术家们，实在感到惋惜！希望小编能注解！在此感激不尽。（小编：通过上面的文字完全可以感同身受你的拳拳之心。有相对专业的评论当然更好，但既然我们的学识无法描述这些老艺术家们，那就让我们仔细阅读这篇文章，了解这些行业，以此表达自己真诚的敬意；另外，一起期</summary><published>2011-03-23T01:21:00Z</published><updated>2011-03-23T01:21:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2011/03/23/1992098.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2011/03/23/1992098.html"/><content type="html">&lt;div class="content"&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/2.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;民族的才是世界的，这些民俗文化，有许多是童年难以泯灭的美好的记忆，希望能传承下去...向还在从事这些活动的普通劳动者致敬...你们才是最伟大的艺术家！&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/1.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/3.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/4.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/5.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/6.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/7.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/8.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/9.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/10.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/11.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/12.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/13.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/14.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/15.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/16.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/17.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/18.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/19.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/20.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/21.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/22.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/23.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/25.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/26.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/27.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/28.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/29.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.u148.net/article/34479.html" target="_blank" class="img"&gt;&lt;img src="http://file3.u148.net/2011/3/images/Old_Trades/30.jpg" title="中国正在消失的老行当，怀念！" alt="小贺的博儿|http://netsos.cnblogs.com" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;虽然老行当真的是越来越少见了，但看到那么多真的是很怀念啊！是什么埋没了他们呢，是现在科技发达了吗？是社会进步了吗？&lt;/p&gt;&lt;p&gt;希望小编能在图片下添加一些评论就好了，鄙人才疏学浅，不知道用什么词语来描述这些中国的老艺术家们，实在感到惋惜！希望小编能注解！在此感激不尽。&lt;span style="color: #666666;"&gt;（小编：通过上面的文字完全可以感同身受你的拳拳之心。有相对专业的评论当然更好，但既然我们的学识无法描述这些老艺术家们，那就让我们仔细阅读这篇文章，了解这些行业，以此表达自己真诚的敬意；另外，一起期待同学们的评论吧！）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #666666;"&gt;&amp;nbsp;&lt;/span&gt;来源：&lt;a href="http://www.u148.net/u/36648"&gt;有意思吧&lt;/a&gt; &lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/1992098.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2011/03/23/1992098.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/NetSos/archive/2011/03/22/1991407.html</id><title type="text">（替月光博客备份）百度百科：游荡在中国的窃贼</title><summary type="text">来自:月光博客发表:月光 (recommend) 在一年一度“消费者权益保护日”，贾平凹、韩寒、郭敬明、李承鹏等50名作家联合一起声讨百度文库，称百度文库收录了上述作家几乎全部的作品，但却没有取得任何人的授权，指责百度已经彻底堕落成了一个窃贼公司，把百度文库变成了一个贼赃市场。 对此，百度官方回复到：“对于50作家的声讨，百度向本报记者如此回应：百度高度重视互联网领域的知识产权保护，从文库诞生之日起就郑重承诺，如果作家及版权方发现文库用户在上传内容时有侵权问题，只要通过文库投诉中心反馈情况，百度会在48小时以内迅速核实并依法进行相应的处理”。 百度对于知名作家的盗窃主要使用百度文库，而百度对于</summary><published>2011-03-22T06:33:00Z</published><updated>2011-03-22T06:33:00Z</updated><author><name>.小贺</name><uri>http://www.cnblogs.com/NetSos/</uri></author><link rel="alternate" href="http://www.cnblogs.com/NetSos/archive/2011/03/22/1991407.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/NetSos/archive/2011/03/22/1991407.html"/><content type="html">&lt;span&gt;来自:&lt;/span&gt;&lt;span title="文章所属频道,点击进入"&gt;&lt;a class="channel_link"&gt;月光博客&lt;/a&gt;&lt;/span&gt;&lt;span&gt;发表:&lt;/span&gt;&lt;span class="author" title="文章作者"&gt;月光 (recommend)&lt;/span&gt;&lt;p&gt;在一年一度&amp;ldquo;消费者权益保护日&amp;rdquo;，贾平凹、韩寒、郭敬明、李承鹏等50名作家联合一起&lt;a target="_blank" href="http://blog.sina.com.cn/s/blog_467a3a7f0100pqvs.html"&gt;声讨百度文库&lt;/a&gt;，称百度文库收录了上述作家几乎全部的作品，但却没有取得任何人的授权，指责百度已经彻底堕落成了一个窃贼公司，把百度文库变成了一个贼赃市场。&lt;/p&gt;&lt;p&gt;　　对此，百度官方回复到：&amp;ldquo;对于50作家的声讨，百度向本报记者如此回应：百度高度重视互联网领域的知识产权保护，从文库诞生之日起就郑重承诺，如果作家及版权方发现文库用户在上传内容时有侵权问题，只要通过文库投诉中心反馈情况，百度会在48小时以内迅速核实并依法进行相应的处理&amp;rdquo;。&lt;/p&gt;&lt;p&gt;百度对于知名作家的盗窃主要使用&lt;a target="_blank" href="http://www.williamlong.info/archives/2428.html"&gt;百度文库&lt;/a&gt;，而百度对于普通网友、博客的盗窃更多地使用&lt;a target="_blank" href="http://www.williamlong.info/archives/478.html"&gt;百度百科&lt;/a&gt;，是否真像百度所说的那样，百度能做到&amp;ldquo;迅速核实并依法进行相应的处理&amp;rdquo;呢？我这里做了一个简单的测试。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;百度百科的侵权&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;百度百科存在着大量偷窃月光博客的文章，例如这篇&amp;ldquo;Dropbox&amp;rdquo;条目，从第二大段&amp;ldquo;Dropbox技巧&amp;rdquo;开始，整整一大段总共1548个字的内容均是全文偷窃月光博客的文章&amp;ldquo;&lt;a target="_blank" href="http://www.williamlong.info/archives/2044.html"&gt;Dropbox免费网盘高级使用技巧&lt;/a&gt;&amp;rdquo;，属于侵权行为。&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.williamlong.info/upload/2587_2.jpg"&gt;&lt;img alt="百度百科侵权" src="http://download.williamlong.info/upload/2587_1.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;月光博客使用的是&amp;ldquo;&lt;a target="_blank" href="http://www.williamlong.info/archives/480.html"&gt;创作共用&lt;/a&gt;&amp;rdquo;的授权协议，要求&amp;ldquo;署名&amp;middot;非商业用途&amp;middot;保持一致&amp;rdquo;，其含义是：署名-必须明确标明原始作者的名字；非商业用途-不得用于商业目的；保持一致-需使用相同协议。&lt;/p&gt;&lt;p&gt;显然，百度百科并非使用&amp;ldquo;创作共用&amp;rdquo;协议，偷窃我的内容里也没有署名原始作者，百度百科肯定是商业网站，这毋庸置疑，其运作完全是商业网站的运作，和个人网站不能相提并论。因此，百度百科并没有转载我博客内容的权利。&lt;/p&gt;&lt;p&gt;　　本来，知识共享是一件好事，即使让百度这个小偷去分享知识，同样也可惠及网友，我早先也不太关注百度百科对我博客的疯狂偷窃，直到有一天，某个用户到我博客的一篇关于Dropbox的文章上留言，指责我那篇文章抄袭自百度百科，我才发现，放任百度百科对我的偷窃会给我的博客带来什么样的负面影响，对于小偷的容忍就是对人民的犯罪，这种容忍不会让百度收敛，只会让其更加变本加厉地侵权。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;维权的艰难过程&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;　　鉴于百度百科属于开放性系统，用户可以注册修改条目，并且百度也声称会对侵权信息&amp;ldquo;迅速核实并依法进行相应的处理&amp;rdquo;，因此我就登录百度百科系统，编辑该&amp;ldquo;Dropbox&amp;rdquo;条目，将涉及侵权的内容进行删除并提交，同时注明该条目的侵权原因以及原始来源，和维基百科不同的是，百度百科里所有用户修改的信息并不能即时显示，而需要百度百科的管理人员进行审核，那么这个审查机构是如何看待原始作者的维权行动呢？&lt;/p&gt;&lt;p&gt;百度百科的审核人员很快就给出了答案，他们拒绝了原始作者对于删除侵权内容的要求，给出的理由是：&amp;ldquo;词条编辑前后无变化或编辑后词条质量降低&amp;rdquo;。在百度的眼里，偷到手的财产就属于百度了，失主想要索回都会被拒绝，因为索回后百度这个小偷的财产就会降低了，百度这新潮的观念实在太颠覆我们这些&amp;ldquo;传统人士&amp;rdquo;的道德观了。&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.williamlong.info/upload/2587_4.jpg"&gt;&lt;img alt="百度百科侵权" src="http://download.williamlong.info/upload/2587_3.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;　　在该界面中，百度百科还建议有疑问的用户到&amp;ldquo;百度百科投诉吧&amp;rdquo;中询问，于是我就按照这个指引来到了&amp;ldquo;百度百科投诉吧&amp;rdquo;，在百度百科投诉中心对于百度百科词条的侵权行为做出投诉，百度的审核人员经过一天的处理，投诉的结果出来了，说百度百科属于开放性百科全书，让我继续去百度百科上修改该侵权词条，百度的这两个部门相互踢皮球踢的水平可真棒啊，你们没有入选中国国家足球队真是我国体育界的一大遗憾啊。&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.williamlong.info/upload/2587_6.jpg"&gt;&lt;img alt="百度百科侵权" src="http://download.williamlong.info/upload/2587_5.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;百度百科的危害&lt;/p&gt;&lt;p&gt;　　虽然百度百科、百度文库充斥着盗版侵权信息，散发着阵阵令人厌恶的恶臭，然而百度却通过自己搜索引擎的强势而力推这些盗版平台，还是以Dropbx这个词条为例，Dropbox这家知名的云计算公司在国内和国外都颇有名气，使用Google搜索&amp;ldquo;Dropbox&amp;rdquo;，人们可以方便而迅速的找到这家公司的官方网站，而使用百度搜索&amp;ldquo;Dropbox&amp;rdquo;，排在第一位的是百度百科关于&amp;ldquo;Dropbox&amp;rdquo;的条目，百度人为将自己做的盗版信息凌驾于Dropbox官方网站，并美其名曰&amp;ldquo;提升用户体验&amp;rdquo;，百度盗版侵权的疯狂程度可见一斑。&lt;/p&gt;&lt;p&gt;&lt;img alt="百度" src="http://download.williamlong.info/upload/2587_7.jpg" /&gt;&lt;/p&gt;&lt;p&gt;百度百科自从成立以来，内含有大量来源不明的文章及图片，很多内容都是抄袭字维基百科，维基百科也专门设立了&lt;a target="_blank" href="http://zh.wikipedia.org/wiki/Wikipedia%3A%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91%E5%B0%8D%E7%B6%AD%E5%9F%BA%E7%99%BE%E7%A7%91%E7%9A%84%E4%BE%B5%E6%AC%8A"&gt;一个页面&lt;/a&gt;揭发百度百科的抄袭行为，但百度百科甚至连于其投诉中心接获投诉但不作任何处理，只表示百科属开放性之网站，并建议更改条目不当之地方。&lt;/p&gt;&lt;p&gt;&lt;img alt="百度偷窃" src="http://download.williamlong.info/upload/2409_1.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;百度嚣张的原因&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;从上面这段经历可以看出，知识产权所有者想要百度停止侵权，如同在铁公鸡身上拔毛那样困难，事实也证明，和百度这个流氓讲道理是没有用的。那么到底是什么原因，可以让百度这个流氓如此嚣张地侵犯公众知识产权呢？&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1、&amp;ldquo;避风港&amp;rdquo;原则&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;　　避风港条款不是中国的发明，最早来自美国1998年制定的《数字千年版权法案》（DMCA法案）。后来避风港条款也被应用在搜索引擎、网络存储、在线图书馆等方面。避风港原则包括两部分，&amp;ldquo;通知+移除&amp;rdquo;。由于网络中介服务商没有能力进行事先内容审查，一般事先对侵权信息的存在不知情。所以，采取&amp;ldquo;通知+移除&amp;rdquo;规则，是对网络中介服务商间接侵权责任的限制。&lt;/p&gt;&lt;p&gt;所谓&amp;ldquo;避风港&amp;rdquo;原则的基本含义是：搜索引擎对所链侵权内容原则上不负责任，但是在例外的情形下仍然承担责任。也就是说，只有在搜索引擎知道或应当知道所链内容侵权的情形下承担责任。这样，搜索引擎就得到一定程度的保护。&lt;/p&gt;&lt;p&gt;之后，一些用户产生内容的网站也开始使用避风港原则规避风险，也就是说，只要是用网友发布的作品，服务商对他没有进行处理的情况下，受到避风港原则的保护。同理，内容版权方需要告知给服务方，通知要求服务商删除，则服务商应义不容辞地给予配合。&lt;/p&gt;&lt;p&gt;　　然而根据上面的案例，百度百科并不太使用执行&amp;ldquo;避风港&amp;rdquo;原则，版权方已经通知百度侵权作品，证明百度对自己的侵权是知情的，而且百度还通过相关侵权页面上的广告等形式获利，也并非仅仅是无偿提供信息，而百度拒不移除侵权信息，因此不能以&amp;ldquo;避风港&amp;rdquo;原则为由，不承担任何责任。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2、网络侵权的法律漏洞&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;　　以往的侵犯著作权犯罪案件，&amp;ldquo;未经著作权人许可&amp;rdquo;的认定，基本原理是谁主张，谁作证。但是在互联网数字网络环境下，作为个人想证明，自己具有著作版权是非常难，一个人很难证明自己对于某个电子文档享有版权，因此就要提供很多繁琐的东西。而一般作者来讲，可能就很难做到，因此很多作品权益人面对网络盗版侵权行为&amp;ldquo;望而却步&amp;rdquo;。百度百科正是利用网络侵权的这个法律漏洞，肆意大规模进行侵权行为。&lt;/p&gt;&lt;p&gt;&lt;img alt="侵权" src="http://download.williamlong.info/upload/2428_1.jpg" /&gt;&lt;/p&gt;&lt;p&gt;要想彻底防范百度钻法律这个漏洞，有关部门需要明确相关版权范畴，减轻了著作权人的举证责任，要求发布者必须证明自己拥有该作品的版权才能发布作品。&lt;/p&gt;&lt;p&gt;对此，维基百科的做法是，网友每发布一项新词条，百度管理员会人工对这个词条进行分析判断，甄别其是否为原创，如果不是原创作品则禁止发布，这种重视版权的做法才使得维基百科几乎不存在版权方面的问题。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3、惩罚力度小&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;不仅仅网络盗版取证困难，而且即使成功对侵权方进行处罚，目前惩罚力度还不到位，轻微的惩罚根本无法对百度的侵权形成任何威慑力，和百度的巨额盈利相比简直是九牛一毛，百度赔款一次，还可以继续侵权十次百次，从而使用网络著作权保护越来越难。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4、网友的无知&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;很多网友都纯粹被百度所利用，为了那点可怜的积分而成为百度侵权的帮凶，实际上，网友在侵权的过程中，除了虚拟的积分之外，得不到任何东西，一旦网友发布的信息存在问题，百度可以撇开所有责任，一切责任都是网友的，早先的&lt;a target="_blank" href="http://www.williamlong.info/archives/2428.html"&gt;一个案例&lt;/a&gt;是，一个网友往百度文库上传了一篇包含&amp;ldquo;有害信息&amp;rdquo;的文章，而且通过了百度管理员的审核，二档追究责任的时候，百度不但不负任何责任，还将该网友的个人信息告密，导致该网友入狱六个月。&lt;/p&gt;&lt;p&gt;&lt;img alt="百度送用户入监狱" src="http://download.williamlong.info/upload/2587_8.jpg" /&gt;&lt;/p&gt;&lt;p&gt;　　网友天真的以为百度做一切事情都是为了网友的利益，而百度文库将自己的用户送入监狱的这个案例，则让众多网友认清了百度的真面目，百度文库、百度百科及其他盗版网站，他们的最终目标绝对不是为了方便网友，而是为了自身的盈利，一旦除了法律方面的问题，一切责任就都是网友的。因此，只有彻底关闭这些盗版侵权网站，才能彻底扭转中国网络盗版满天飞的现状，而大多数网友的实际利益才能得到保障。&lt;/p&gt;&lt;p&gt;两个善于偷窃的幽灵，在中国网络上游荡，一个叫百度百科，一个叫百度文库。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/NetSos/aggbug/1991407.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/NetSos/archive/2011/03/22/1991407.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
