• 关闭VS2010离线MSDN的导航栏


    Visual Studio 2010已经发布有些时日了,其强大便捷的功能让人折服。在VS2010中,微软采用了新的帮助文档阅读系统(Microsoft Help Viewer),Microsoft Help Viewer与IE想集成,可以直接享用HTML、XML、CSS、JavaScript、XSTL等带来的便利,并使离线文档可以与在线文档进行同步或 下载微软新发布的文档。然而,美中不足的是Microsoft Help Viewer的用户体验相对于以前的文档阅读工具还有很大的提高余地。

    Microsoft Help Viewer最让我头疼的一点是它的导航栏不能完全关闭(收拢),如图:

    0003

    不能收拢也便罢了,可是当我等眼神不济的人放大IE视图的时候,它也跟着放大。当把蚂蚁大的字放大到绿豆那么大的时候,它就能占到一半宽了。如图:

    0004

    如果把绿豆大的字放大到黄豆那么大,导航栏差不多就把IE的显示空间吃没了。如图:

    0005

    程序员哪能让程序给难住!让我们一起来hack一把Microsoft Help Viewer :)

    ==========================================

    首先让我们看看Microsoft Help Viewer的启动。如图:

    0001

    启动Microsoft Help Viewer的时候你会发现系统托盘上弹出一个气泡。如图:

    0002

    这个东东相当于在本机开了一个IIS,用一个虚拟网站的形式向你提供MSDN文档(这样,当你把Microsoft Help Viewer指向在线MSDN时就可以阅读最新的内容)。这样做的好处在于开发Microsoft Help Viewer的程序员可以把在线和离线看作相同的服务模型。

    打开Windows的任务管理器,找到这个服务代理。如图:

    0007

    原来它是一个叫“HelpLibAgent.exe”的程序。这个程序很好找,在我机器上的路径是:C:\Program Files\Microsoft Help Viewer\v1.0——这里就是Microsoft Help Viewer的安装目录啦!

    稍微懂点儿Web开发的筒子们就知道,网站的页面格式是使用CSS、JavaScript等东东控制的,而且这些东西事先就已经放在服务器端。既然 模拟服务的程序在这个文件夹下,那用来控制格式的CSS和用来响应客户操作的JavaScript也应该在这里。可是翻遍整个文件夹也看不到有.css 和.js文件。

    Google一下Microsoft Help Viewer,发现这东东在MSDN里竟然有文档(http://msdn.microsoft.com/en-us/library/ms669985(VS.85).aspx)。 稍加阅读后恍然大悟:秘密就在安装目录的.mshc文件里!原来,.mshc文件其实就是一些.zip文件,离线MSDN页面的模板、.css、.js文 件等都在里面。看来微软还真是喜欢.zip格式——Offic文档、Silverlight的.xap文档、mshc文档都是改了后缀名的.zip文档。

    文件夹里有五六个.mshc文档,其中有一个叫dev10.mshc的文档引起了我的注意,因为VS2010的内部开发代号就是dev10。如图:

    0008

    把dev10.mshc做好备份,改后缀名为.zip,解压——还真成功了!如图:

    0009

    哇!东西真不少,到底那个才是控制导航栏的呢?这时候就要祭出IE的debug功能了。在一个打开的离线MSDN页面中点击工具栏上的 Developer Tools图标(或按F12键)就会弹出IE8自带的页面调试工具。在页面调试工具的菜单栏中选取Find->Select Element by Click (Ctrl+B),然后回到离线MSDN页面中点击那个用于控制导航栏的“小三角”图标,调试窗口中就会自动定位到被点击的页面元素上。如图:

    0010

    这回导航栏控制按钮可是现出了原型:原来是一个id为ResizeImageIncrease的img元素,并且在点击后会调用 onIncreaseToc()方法。接下来的问题是:onIncreaseToc()存放在哪里呢?经过腿肚子思考几秒钟后,我决定展开页面文件的 head元素:

    0011

    哈!原来页面的javaScript文件是branding.js。

    剩下的事情就好办了。打开branding.js文件,找到onIncreaseToc()方法,理解一下它的逻辑……原来它以一个计数器控制导航 栏的展开/关闭,计数器只能取1、2、3,到超过3之后回到1,这样导航栏就只能展开两级。onIncreaseToc()会调用resizeToc() 方法,就是这个方法害得导航栏不能完全关闭,因为即使计数器为1,也会有一个280px的宽度。

    于是,我按照自己的想法修改这两个方法:

    01 function onIncreaseToc()
    02 {
    03   tocPosition++;
    04   // if (tocPosition > 3) tocPosition = 1; //原来的代码
    05   if (tocPosition > 2) tocPosition = 1; // 我的代码:只展开一级(要么开、要么闭)
    06   resizeToc();
    07   SetCookie("TocPosition", tocPosition);
    08 }
    09  
    10 function resizeToc()
    11 {
    12   var toc = document.getElementById("LeftNav");
    13   if (toc)
    14   {
    15     // Set TOC width
    16     // Positions: 1 (280px) 2 (380px) 3 (480px)
    17     // var tocWidth = 280 + ((tocPosition - 1) * 100); // 原来的代码
    18     var tocWidth = ((tocPosition - 1) * 365); // 我的代码:去掉了默认的280,设置一级展开宽度是365,代表“好好学习,天天向上”
    19     toc.style.width = tocWidth + "px";
    20  
    21     // Position images
    22     if (document.all) tocWidth -= 1;
    23     document.getElementById("TocResize").style.left = tocWidth + "px";
    24  
    25     // Hide/show increase TOC width image
    26     document.getElementById("ResizeImageIncrease").style.display = (tocPosition == 3) ? "none" : "";
    27  
    28     // Hide/show reset TOC width image
    29     document.getElementById("ResizeImageReset").style.display = (tocPosition != 3) ? "none" : "";
    30   }
    31 }

    最后,把修改好的文件打包回.zip。注意:.zip文件要直接包含这些文件,千万不要去压缩dev10文件夹,不然dev10.mshc文件中的顶级目录就不对了。如图:

    0012

    至于压缩的级别嘛,Default或者Best什么的都可以。

    关闭正在运行的离线MSDN代理、把压缩好的dev10.mshc放回Microsoft Help Viewer的安装目录(覆盖掉原来的),再重新打开离线MSDN。Wow!导航栏已经关闭了,而且只有展开、关闭两个状态。如图:

    0013

    0014

    ============================

    如果你也正在被Microsoft Help Viewer的导航栏所困扰,那就赶快自己动手试一试吧:D

  • 相关阅读:
    Jquery+ajax+bootstrap
    Js+Jquery
    css(2)+JS
    css
    mysql 高级
    Git
    Redis
    Nginx
    python爬虫 | 一条高效的学习路径
    拉勾网爬取全国python职位并数据分析薪资,工作经验,学历等信息
  • 原文地址:https://www.cnblogs.com/yysblog/p/2262187.html
Copyright © 2020-2023  润新知