前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >奇思妙想,动手 DIY 你的浏览器主页

奇思妙想,动手 DIY 你的浏览器主页

作者头像
程序员鱼皮
发布于 2021-02-08 01:31:51
发布于 2021-02-08 01:31:51
83000
代码可运行
举报
文章被收录于专栏:鱼皮客栈鱼皮客栈
运行总次数:0
代码可运行

大家好我是鱼皮,前段时间上线了一个程序员必备的浏览器主页,得到了很多同学的好评。

地址:https://home.code-nav.cn/

编程主页

其实项目本身不需要复杂的技术,相反,仅需要一点点前端基础就可以完成。

下面给大家分享项目的完整制作过程和实现原理,最后教大家 一键上线自己的项目,快来动手 DIY 你的浏览器主页吧!

准备工作

1. 需求分析

在开发一个项目之前,要明确自己的目标。

我要做的很简单,就是一个精简的浏览器主页。虽然火狐、Chrome 的默认标签页和一些插件主页也都不错,但是多少都有一些限制,比如不支持切换壁纸、无法自定义快捷链接等。

之前我是 KIM 主页的铁杆粉丝,但整个主页上的默认链接我几乎都用不到。作为一名创作者,我更希望自己的主页是各种创作平台,比如 CSDN、牛客、GitHub 等。虽然可以登录 KIM 主页来修改快捷链接,但有什么能比自己定制一个主页更灵活呢?况且本身并不需要很大的工作量。

那么要给主页添加哪些功能呢?首先最重要的肯定是 搜索、然后是快捷链接,其他的功能都是锦上添花。

2. 产品设计

确认目标和需求之后,要设计主页的页面布局,由于我是一名审美和设计能力低下的程序员,自己做的页面一直被说丑,因此我的整个设计参考了 KIM 主页,非常喜爱和佩服 KIM 主页的设计。

KIM 主页

其实自己做项目、或者在企业中做项目,也是一样的道理,先参考现有的项目和资源,学习他们优秀的地方,以此为基础进行改进。

3. 技术选型

在确认好需求和产品设计后,我们需要根据项目应有的功能和界面设计稿来进行技术选型,即选择使用哪种编程语言、框架、脚手架、甚至精确到类库。好的技术选型能够极大地提升开发效率。

比如要做一个浏览器主页,本身是一个很小的前端项目,因此不需要重型(文件较大)的框架,可以直接选择原生的 HTML + CSS + JavaScript 三件套,搭配 jQuery 库节省代码量。也可以选择主流的前端框架,比如轻量的 Vue、React,搭配一个好看优雅的组件库,从而可以灵活地实现页面交互、省去自己开发组件的麻烦。

此处我选择主流前端框架 React,因为最近一直在用比较熟练,搭配 React Static 静态站点开发框架。组件库上,我选择了蚂蚁金服的 Ant Design,比较流行,而且组件支持多端自适应,能够让主页在移动端下也能得到不错的浏览效果,提供的导航菜单、抽屉、按钮等组件也能够满足我的要求。

Ant Design 组件库

除了开发技术外,还要明确自己的项目采用何种方式部署上线。由于网站几乎没有动态加载的数据,可以选用一些静态网站托管服务,后面会讲。

4. 搭建 Demo

确认好使用的技术后,需要先在本地成功运行一个最简单的 Demo 项目,可以试着添加一个按钮组件,看看组件库是否引入成功。然后执行一次打包构建,确认环境和依赖没有任何问题,再进行开发。

先跑通 Demo 项目,执行一次构建

万事就绪,投入开发!

开发实现

此处不可能把所有源代码都粘贴到文章中,也没有意义,只会讲解开发浏览器主页的一些关键实现思路。

1. 基础界面

开发任何前端项目,都要先开发一个基础界面,从整体到局部,将页面由上至下进行结构拆解。

页面拆解

除了按钮组使用固定定位放在右下角外,其他的框框从上至下排列,再加上一些间距即可。

2. 万能搜索

万能搜索即用户仅进行一次输入,可以从多个不同的搜索引擎获取信息。

效果如下

实现原理非常简单,使用 HTML 的 <iframe> 标签,直接将整个百度或其他搜索引擎嵌入到页面中,通过定义 current 变量来决定当前使用哪个搜索引擎、通过 searchText 变量来确定搜索内容,然后拼接 <iframe> 的地址即可,示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  current === "baidu" &&
  <iframe src={`https://www.baidu.com/s?wd=${searchText}`}
          style={{border: 'none', height: '100vh', position: 'fixed', zIndex: 1}}
        />
}
{
  current === "bing" &&
  <iframe src={`https://cn.bing.com/search?q=${searchText}`}
          style={{border: 'none', height: '100vh', position: 'fixed', zIndex: 1}}
        />
}
3. 壁纸切换

完成搜索功能后,我试着美化整个主页,首先是实现切换壁纸功能。针对不同类型的壁纸选择不同的实现方式。

静态壁纸

静态壁纸即一张图片,直接使用 <img/> 标签,设置绝对定位和全屏显示即可。

静态壁纸

动态壁纸

动态壁纸可不是指动态图片(GIF 等),而是使用 HTML5 Canvas 画布等技术实现的交互式网页。每一个动态壁纸都是一个独立小项目,包含 HTML、CSS、JS 等文件,可以直接在浏览器中运行。

动态壁纸

直接采用 <iframe> 标签引入这些动态壁纸页面就行啦!

动态壁纸

随机壁纸

最后,为了满足大家的特殊需求,还做了随机壁纸功能,有几种分类,每点一下,就会随机生成一个新壁纸!

随机壁纸

实现原理依然很简单,使用了免费的搏天 API 随机壁纸接口,完全不用自己爬取图片再去做随机!

搏天 API 接口

为了解决浏览器跨域的限制,还使用了 JsonBird 免费的请求代理,直接将请求随机图片的地址作为参数拼接在 JsonBird 地址后就行了!代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
await axios.get(`https://bird.ioliu.cn/v1/?url=${cover.api}`)
4. 主题切换

最后,为了让大家更好地欣赏壁纸(好像跑题了),支持了白底和透明两种主题,可以动态切换。

切换主题

这里我定义了两个 CSS 文件,分别作为白底和透明主题的样式,切换为透明主题时,只需给最外层的 HTML 标签增加一个类名即可,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 白底 CSS 文件 */
.search-wrapper {
 background: white; /* 白色背景 */
}
  
/* 透明模式 CSS 文件 */
.ghost .search-wrapper {
  background: transparent; /* 透明背景 */
}

最外层标签,根据透明模式是否开启来确定类名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 如果透明模式开启,则添加 ghost 类名 -->
<div className={ghostClose ? '' : ' ghost'}>
</div>

当然,多主题有很多种实现方式和插件,这并不是最优雅的,但比较简单易懂。

部署上线

项目做完后,使用框架自带的命令将所有文件构建成一个目录包。可以直接双击 index.html 文件,或使用 serve 在本地运行网页,浏览效果。

生成的目录包

如果想要发布网站,供其他人输入网址在线访问,也是非常简单的。可以使用 Vercel 工具,用一行命令发布。

而如果想要让网站获得更快的访问速度, 更推荐的方式是使用腾讯云静态网站托管(或者云托管)服务,依然是一行命令,甚至是点击 “一键部署按钮”,就可以将网站上线啦!提供免费空间,完全足够学习和小项目使用!

一键部署

最后

整个编程主页就是这样,以后会支持更多的主题、更多的搜索引擎,同时继续改进页面和交互效果,给大家一个接近完美的主页使用体验。

所有的代码均已开源,已获得近 200 star,登上今日 GitHub 趋势榜!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员鱼皮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
爆肝 200 小时,我做了个编程导航!
最近一个月,上班之余,我几乎将全部时间投入到自己的新项目『 编程导航 』中,熬了30 多个大夜,终于将它上线!
程序员鱼皮
2021/01/23
1.8K0
爆肝 200 小时,我做了个编程导航!
前端开发中不可忽视的知识点汇总(一)
本文结合自己前端日常开发中,经常用到的且非常重要的一些知识点,进行了汇总,这是本系列第一篇。
徐小夕
2019/09/25
7510
Wetab新标签页:内置实用小组件的浏览器扩展,重新定义浏览器主页
除了社交媒体,浏览器可能是我们日常工作、学习和生活中最常用的平台之一。然而,在使用浏览器的过程中,我们经常被书签管理、标签管理等问题所困扰。例如,书签栏混乱不堪,无法快速查找到所需书签。
数字花园
2023/08/01
1.8K0
Wetab新标签页:内置实用小组件的浏览器扩展,重新定义浏览器主页
桌面浏览器前端优化策略
在前端项目开发完成,我们肯定是需要对前端的项目进行测试优化。我们可以先用一些第三方工具对网站进行分析。工具例如
踏浪
2019/07/31
1.1K0
桌面浏览器前端优化策略
面向未来与浏览器规范的前端DDD架构设计
Hello 大家好,我是来自字节跳动的郑仁杰,目前是公司微前端开源项目 Magic(https://github.com/bytedance/magic-microservices)的负责人及核心贡献者,今天我带来的分享主题是《面向未来与浏览器规范的前端 DDD 架构设计》,这次我们站在了一个与行业传统微前端解决方案完全不同的全新的视角去思考如何设计和实践前端微服务,如何更优雅的借助浏览器原生能力将微前端的粒度做到组件级别,期待能给大家带来不一样的收获和体验。
ConardLi
2021/12/13
2K0
面向未来与浏览器规范的前端DDD架构设计
Web前端面试宝典(最新)
html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
半指温柔乐
2018/09/11
3.3K0
浏览器缓存知识小结及应用
阅读目录 1. 浏览器缓存基本认识 2. 强缓存的原理 3. 强缓存的管理 4. 强缓存的应用 5. 协商缓存的原理 6. 协商缓存的管理 7. 浏览器行为对缓存的影响
wangxl
2018/07/27
7250
浏览器缓存知识小结及应用
前端硬核面试专题之 HTML 24 问
确保用户在不同地区能用最快的速度打开网站,其中某个域名崩溃用户也能通过其他域名访问网站。
夜尽天明
2019/08/08
1.2K0
前端硬核面试专题之 HTML 24 问
爆肝!朋友做了个编程导航网站!
前段时间,我的一位在鹅厂做全栈开发的朋友鱼皮,利用工作之余的时间,独自爆肝了 200 多个小时,开发了一个编程导航网站!
程序员鱼皮
2021/04/08
1K0
2020 年「我与技术面试那些事儿」
2020年,是个不平凡的一年,因为疫情的蔓延打乱了我的全盘计划。但在工作中,完成了目标项目、攻克了技术难关、学习了新的技术,也感谢平台!
达达前端
2022/04/13
1.3K0
2020 年「我与技术面试那些事儿」
【云+社区年度征文】全年的技术盘点与总结(含小程序开发)
2020年,是个不平凡的一年,因为疫情的蔓延打乱了我的全盘计划。但是这也让我和云+社区一起共同努力,在工作中,完成了目标项目、攻克了技术难关、学习了新的技术,也感谢腾讯云+社区的平台!
达达前端
2020/12/04
1.8K0
【云+社区年度征文】全年的技术盘点与总结(含小程序开发)
不是吧,浏览器主页可以这么酷炫吗?
不知道大家每天打开浏览器时,首页都是什么样子的呢?有些人喜欢直接使用搜索引擎的主页,有些人喜欢使用导航网站。而小妹喜欢搞一些自己定制的花里胡哨的主页,比如这样:
永恒君
2023/02/20
5340
不是吧,浏览器主页可以这么酷炫吗?
第136天:Web前端面试题总结(理论)
  a. 请求数量:合并脚本和样式表,CSS Sprites,拆分初始化负载,划分主域
半指温柔乐
2018/09/11
2.2K0
前端HTML+CSS面试题汇总一[通俗易懂]
Quirks模式和Standards模式的区别: 首先,严格模式(又称标准模式,Standards模式)和混杂模式(Quirk模式)都是指浏览器的呈现模式,要与Doctype的两种风格区别开来(严格( strict )和过渡( transitional ),过渡 DOCTYPE 的目的是帮助开发人员从老版本迁移到新版本)。
全栈程序员站长
2022/09/02
6570
知识整理之HTML篇
HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们该有的方式来运行) 而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
Clearlove
2019/08/29
1.3K0
关于浏览器安全,你需要知道的那些知识点!
HTTP首部用来规定封装的包应该转往何处,接收方应该如何处理此包。首部内容决定了接受方如何处理被发送的内容,有些首部字段是必需的,有些首部字段是可选的,而有些首部字段是为了提供额外信息而用的
网络安全自修室
2022/12/06
5300
关于浏览器安全,你需要知道的那些知识点!
浅谈移动端页面无刷新跳转问题的解决方案
浅谈移动端页面无刷新跳转问题的解决方案 2017-12-22  祈澈姑娘 最近开发微信公众号,用的框架是 一般的 UI,但是涉及到多页面之间的相互跳转的问题,降低了浏览器的性能,用户体验特别不好,卡顿,不流畅,因此不采用传统的页面跳转方式,看到不少手机网页开发的框架都都是在一个html文档中包涵多个页面的内容,每页放到不同的 里面。 于是采用当下流行的单页面模,在做pc网页的时候一般都直接给链接的。比起用链接来跳转页面,这样做也是有很多好处的(比如appjs,jquery Mobile) 这种web形式在如
王小婷
2018/06/01
3.7K0
用python操作浏览器的三种方式
第一种:selenium导入浏览器驱动,用get方法打开浏览器,例如: import time from selenium import webdriver def mac():     driver = webdriver.Firefox()     driver.implicitly_wait(5)     driver.get("http://huazhu.gag.com/mis/main.do") 第二种:通过导入python的标准库webbrowser打开浏览器,例如: >>> import webbrowser >>> webbrowser.open("C:\\Program Files\\Internet Explorer\\iexplore.exe") True >>> webbrowser.open("C:\\Program Files\\Internet Explorer\\iexplore.exe") True  第三种:使用Splinter模块模块 一、Splinter的安装 Splinter的使用必修依靠Cython、lxml、selenium这三个软件。所以,安装前请提前安装 Cython、lxml、selenium。以下给出链接地址: 1)http://download.csdn.net/detail/feisan/4301293 2)http://code.google.com/p/pythonxy/wiki/AdditionalPlugins#Installation_no 3)http://pypi.python.org/pypi/selenium/2.25.0#downloads 4)http://splinter.cobrateam.info/ 二、Splinter的使用   这里,我给出自动登录126邮箱的案例。难点是要找到页面的账户、密码、登录的页面元素,这里需要查看126邮箱登录页面的源码,才能找到相关控件的id.   例如:输入密码,密码的文本控件id是pwdInput.可以使用browser.find_by_id()方法定位到密码的文本框, 接着使用fill()方法,填写密码。至于模拟点击按钮,也是要先找到按钮控件的id,然后使用click()方法。 #coding=utf-8   import time   from splinter import Browser  def splinter(url):   browser = Browser()      #login 126 email websize    browser.visit(url)       #wait web element loading   time.sleep(5)      #fill in account and password   browser.find_by_id('idInput').fill('xxxxxx')  browser.find_by_id('pwdInput').fill('xxxxx')      #click the button of login    browser.find_by_id('loginBtn').click()       time.sleep(8)       #close the window of brower       browser.quit()   if __name__ == '__main__':       websize3 ='http://www.126.com'       splinter(websize3)  WebDriver简介 selenium从2.0开始集成了webdriver的API,提供了更简单,更简洁的编程接口。selenium webdriver的目标是提供一个设计良好的面向对象的API,提供了更好的支持进行web-app测试。从这篇博客开始,将学习使用如何使用python调用webdriver框架对浏览器进行一系列的操作 打开浏览器 在selenium+python自动化测试(一)–环境搭建中,运行了一个测试脚本,脚本内容如下: from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") print(driver.title) driver.find_element_by_id("kw").send_keys("s
py3study
2020/01/06
8.4K0
用python操作浏览器的三种方式
那些超好用的浏览器扩展
作为前端开发人员,每天都会有很多不同的任务。幸运的是,我们有很多免费的工具和资源可以使用。这些免费的资源和工具,可以让我们轻松处理各种任务。
程序那些事儿
2023/03/07
1.1K0
那些超好用的浏览器扩展
前端原生开发解决方案
从 2012 年开始,H5 成为 html 最后一个稳定版本,不再兼容之前的 API,从此诞生的每一个新 API,一旦结束试验期将永远存在,2015 年 ES6 的出现又淘汰掉一堆 JavaScript 框架,再结合 CSS3,前端原生 API 已经可以替代任何脚手架和打包工具,本文介绍使用原生代码替代前端流行框架的解决方案:分析框架提供的每一个特性以及相对应的原生替代品。
Jean
2022/03/15
1.6K0
前端原生开发解决方案
推荐阅读
相关推荐
爆肝 200 小时,我做了个编程导航!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档