当前位置:首页 > 文章中心 > 行业新闻

Linux下的离线浏览器

发布时间: 2023-12-30 22:59:36 |   作者: 华体会官方网站app

  本报2001年第4期C13版曾发表过一篇名为《Linux平台的下载程序》的文章,其中介绍了如何在Linux环境下开发一个具有断点续传功能的多线程网站下载程序。本文将介绍如何在此基础上实现一个离线浏览器,以下载并浏览网上资源。

  离线浏览下载到本地的网页时,要解决的一个关键性问题是“如何通过某一网页中的超级链接正确地定位其他网页”。比较简便的方法是在用户指定的本地目录下建立一个目标网站的完整或部分镜像。也就是按照文件在服务器端的目录结构保存下载的文件(参见下图)。这样一来,如果网页中的超级链接是以相对路径形式给出的,那么浏览程序就可以直接通过此相对路径访问到本地文件系统中的网页;如果网页中的超级链接是以绝对的URL形式给出的,那么必须在保存网页之前将这些URL转换为本地绝对路径。

  在网络中,一个有效的URL应该只有唯一的网络文件与之对应。因此,只要将网络上由URL所确定的层次关系,转化为本地文件系统中由目录路径所确定的层次关系,就可以建立网站在本地的完全或部分镜像。下面讨论建立镜像的具体方法。

  首先,将下载网页时生成的URL拆分成协议类名(protocol)、IP地址(ipaddr)、目录名(directory)和文件名(file)。

  KDE环境提供了一个用于解析URL的类KURL,只需要定义一个对象KURL u((const char*)URL),就可通过该类提供的成员函数将URL拆解为所需的部分。但是,此类未提供对ASP定位语句的支持,所以读者可以在KURL的基础上编写自己的拆解函数,以完善程序功能。

  需要注意的是,在同一网络文件的URL中,网址部分可能是以域名地址形式给出的,也可能是以IP 地址形式给出的。为了尽最大可能避免将同一文件镜像到不同目录下,如果网址是域名形式的,应该使用socket函数gethostbyname ()将其转换为IP地址。

  其次,确定网络文件在本地的镜像路径。假设用户指定的本地目录存放在字符数组LDir中,则代码如下:

  ● 如果是网页文件,必须扫描文件,并将其中以绝对URL形式给出的超级链接替换成用镜像路径生成算法产生的本地绝对路径,而那些以相对路径形式给出的超级链接则保持不变;

  在建立目录时,由于Linux提供的目录创建函数int mkdir(char * dir, int mode)只能在已存在的目录下建立一级子目录,所以要用“递归”方式构造一个目录创建函数:

  Linux操作系统的桌面环境KDE提供了一个文件管理器KFM,它和IE一样既可以浏览本地目录和文件,也可以浏览网页,并且KFM还提供了C++编程接口: KHTMLView类。我们大家可以创建一个KHTMLView类的子类CHtmlView来浏览下载的网页文件。

  定义鼠标事件处理函数mousePressedHook()覆盖KHTMLView类中的同型虚拟函数。当用户用鼠标点击网页中的超级链接时,该函数将被调用。被点击的超级链接的地址会作为参数自动传入该函数。由于网页文件中的所有超级链接已做过本地镜像处理,所以,只要该链接所指向的文件已经被下载程序正确地下载到本地,那么使用showPage函数就能调入并显示此页。

  在生成Kdevelop的窗口应用程序框架的View类中定义一个ChtmlView对象,将View类作为其父窗口:

  此外,我们还可以在此基础上加入更多的功能,依靠KDevelop所提供的丰富的图形用户接口类将浏览器设计得更美观易用。

  本站系本网编辑转载,会尽可能标注明确出处,但不排除无法标注明确来源的情况,转载目的是传递更加多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系, 来信: 我们将在收到邮件后第一时间删除内容!

  [声明]本站文章版权属于原本的作者所有,内容为作者本人观点,不代表本网站的观点和对其真实性负责,本站拥有对此声明的最终解释权。

  4月2日:工信部规模以上电子信息制造业增长48.5%;中芯国际宣布全线日:互联网公司完成业务收入1990亿元;华为去年营收增长3.8%

  3月29日:华为小米等手机应用商店暂停下载耐克、阿迪达斯等App;鸿蒙系统即将出世

  3月26日:过去4年中苹果收购的AI公司数量最多;亚马逊发布三驾马车中国业务战略

  3月25日:华为将投入超2亿美元建设生态;密斯不看好金融科技公司发行数字币

  3月24日:1-2月电信业务收入2373亿元;百度汽车最迟2024年量产

  3月23日:2020四季度融合系统同比微弱增长0.2%;银行推广数字人民币货币钱包

  /g,); str = str.replace(/[ ]/g, ); return str; } var title = Linux下的离线浏览器; var description = clearBr( ● 建立相应的目录,并保存文件到绝对路径所指定的位置。在建立目录时,由于Linux提供的目录创建函数int mkdir(char * dir, int mode)只能在已存在的目录下建立一级子目录,所以要用“递归”方式构造一个目录创建函数: ); var thumb = ; var url =