美文网首页get√资源贴编程基础
快速将网页版简书打造成具有个人特色的简书桌面应用

快速将网页版简书打造成具有个人特色的简书桌面应用

作者: howie6879 | 来源:发表于2016-03-05 08:17 被阅读3220次

    近日对谷歌扩展以及应用很感兴趣,于是研究了下官方文档,特写此文记录一下,若有错误,敬请指教,如需转载,请说明出处。

    1.技术需求

    怎么用html css javascript这些前端技术来编写一个桌面应用,说到这,不得不说谷歌浏览器这款伟大的产品,其自行开发的V8引擎大大提升了javascriptchrome中的执行效率,甚至可以将谷歌浏览器想象成一个操作系统,而chrome app则是运行在其上的应用。

    chrome app开发十分迅速,是一个非常好玩的技术,下面就以网页版的简书为例子,快速将其打造成一个桌面应用,而且还是兼容的呢。

    文档以及书籍参考:
    官方文档:chrome apps about_apps
    参考书籍:Chrome扩展及应用开发

    利用谷歌直接将一个网页打造成桌面应用实现起来可谓十分轻松,开发者只需要掌握html css javascript前端技术,再结合官方文档,基本上都能快速掌握。

    所以,只要你有基本的html css javascript技术,就可以很快的开发出有自己特色的简述桌面应用。反之,请去百度之,很快就可以基本掌握。

    对于本篇文章的目的:快速将网页版简书打造成桌面应用,只需要掌握Webview Tag,便可完成简书的桌面应用。

    在进行代码层次的说明之前,先上一张完成后的效果图:


    2016-02-20 19:22:14 .png

    2.应用说明

    在编写应用之前,请容我先解释一下chrome app应该包含哪些文件,其由以下部分组成。

    • manifest文件将应用的一些信息提供给Chrome:这个应用是?它怎么运行?需要哪些额外的权限?
    • background script用来创建一个事件页面然后可靠地管理软件生命周期
    • 所有代码必须包含在chrome app的包内,其中包含html css js以及Native Client模块。
    • 所有icons和其他有利资源最好也包括在包里面
    • 说明:若想深入了解,可以去看官方文档:chrome apps first_app

    知道了这些后,我们就可以看一下代码的目录结构,进行了解,具体再一一说明:


    2016-03-05 23:05:43.png

    2.代码说明

    可以看到图中分别有css/ images/ js/文件夹以及main.html manifest.json文件,不过最主要的是manifest.json main.html background.js这三个文件,下面的叙述也是围绕这三个文件来做讲解。

    2.1.manifest.json
    manifest.json文件的作用在上面的应用说明中已经解释得很清楚,其实不仅仅是chrome app,谷歌扩展也需要一个json格式的manifest,所以manifest.json文件很重要。
    代码如下所示:

    {
        "app":{
            "background":{
                "scripts":["js/background.js"]
            }
        },
        "manifest_version":2,
        "name":"简书",
        "version":"0.1.0",
        "description":"谷歌应用版的简书,对网页版本作出一些优化#__#,添加到桌面方便启动.",
        "icons": { 
            "16": "images/ico_16.png",
            "48": "images/ico_48.png",
            "128": "images/ico_128.png" 
        },
            //权限
        "permissions":[//这里需要简书网页域名的权限以及webview调用简书页面显示到新窗口
            "http://www.jianshu.com/*",
            "webview"
        ]
    }
    

    上面字段意思表达地很清楚,我们来看看:

    app              //Event Page会监听onLaunched事件,随即创建窗口,应用介绍有说这个作用,这里意思是app下面的background域会通过js/background.js创建窗口。
    manifest_version //整数表示文件自身格式的版本号,按照这个写就好了
    name             //应用名称
    version          //版本号
    其他都是某字段对应的意思,这里不一一解释
    

    如果你想更加详细地了解,我不会说360全部都翻译了谷歌的官方文档,请移步manifest详细说明

    2.2.main.html
    定义好manifest.json文件之后,现在浏览器知道了我们的应用叫什么,怎么运行的,需要哪些额外的权限。

    那么,应用启动后,应用会通过Event Page监听onLaunched事件,然后创建一个窗口,那么窗口显示什么界面呢?这个界面就是main.html文件。

    这个界面主要看开发者的心情,想怎么写就怎么写,但是不要忘了引入background.js文件,其作用下面再说。

    代码如下所示:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>简书桌面版</title>
        <link rel="stylesheet" type="text/css" href="css/main.css">
        <script type="text/javascript" src="js/control.js"></script>
    </head>
    <body>
        <div id="title_bar">简书--找回文字的力量
            <a id="close"></a>
            <a id="minimize"></a>
        </div>
        <webview id="web_content"></webview>
    </body>
    </html>
    

    main.html文件里面的代码结构十分简单,这个界面可以分为三个部分,标题、控制按钮(关闭以及最小化)、webview显示的主体内容部分,当该窗口显示之后,若想对窗口进行样式上的修改,可以加一个 css文件,我这里是这样定义的:

    //添加边框
    body{
        margin: 0;
        padding: 0;
        border: #EEE 1px solid;
    }
    //标题栏部分样式
    #title_bar{
        -webkit-app-region:drag;        //作用是让鼠标可以拖动窗口界面
        height: 26px;
        line-height: 26px;
        font-size: 15px;
        background-color: #EEE;
        padding: 0 10px;
        box-sizing: border-box;
    }
    //控制图标样式
    #title_bar a{
        position: relative;
        -webkit-app-region:no-drag;    //让控制图标可以被点击
        display: inline-block;
        float: right;
        height: 14px;
        width: 14px;
        margin: 6px;
        border: gray 1px solid;
        box-sizing: border-box;
        border-radius: 7px;
    }
    #close:hover{
        background-color: #cf4646;
    }
    #minimize:hover{
        background-color: #46B6CF;
    }
    /**
     * show content
     * 这定义了webview调用简书网页页面后的宽高
     */
    #web_content{
        width: 100%;
        height: 614px;
    }
    

    好了,窗口的样式大概写出来了,下面要做的就是怎么将这个页面作为窗口显示出来,这就要看background.js文件了。

    2.3.background.js
    简单来说,background.js会指定应用启动是创建的窗口,上代码:

    //Event Page监听onLaunched事件
    chrome.app.runtime.onLaunched.addListener(function(){
        var screenWidth = screen.availWidth;
        var screenHeight = screen.availHeight;
        var width = 1200;
        var height = 640;
        var main_window = chrome.app.window.get('main');
        if (main_window) {
            main_window.show();
        }else{
            //这里就创建了一个id是main的新窗口,窗口内容是main.html    
            chrome.app.window.create("main.html",{
                id:'main',
                bounds:{
                    width:width,
                    height:height,
                    left: Math.round((screenWidth-width)/2),
                    top:  Math.round((screenHeight-height)/2)
                },
                minHeight: height,
                minWidth:  width,
                maxHeight: height,
                maxWidth:  width,
                frame: 'none'//不显示标题栏目,因为我们自己有写标题样式,不用使用默认的。
            });
        }
    });
    

    通过注释就会明白这段代码的意思,现在,我们的应用就已经创建完成了,我们可以看看界面是什么样子了。

    不过在这之前,我们先要将应用加载到谷歌浏览器中,请打开谷歌浏览器,地址栏输入chrome://extensions/,打开开发者模式,点击加载已解压的扩展程序...,最后加载你创建的应用包,加载成功后如下所示:

    jianshu.png

    点击启动后,请看:


    2016-03-06 12:07:14.png

    main.html很好地显示出来了,其中标题(简书--找回文字的力量),两个控制按钮,中间一大快空白部分(空白部分是即将显示的主题内容)都是我们刚才定义的。

    现在我们就差最后一步就可以完成这个简书桌面应用了,就是利用Webview Tag调用简书网页页面,将其显示在main.html<webview id="web_content"></webview>中,我将具体代码写在了js/control.js中,如下:

    //webwiew methods
    window.onload = function(){
        var web_content = document.getElementById('web_content');
        web_content.src="http://www.jianshu.com/";//定义获取的网页页面
    //在应用显示之前加载以下文件,但是应用加载出来后,在应用里面某些界面还需要脚本,所以下面又增加了一个方法。
        web_content.addContentScripts([  
        {
            name: 'jianshu',
            matches: ['http://*.jianshu.com/*'],
            css: { files: ['css/jianshu.css'] },
            js: { files: ['js/jquery.1.11.3.min.js','js/jianshu.js'] },
            run_at: 'document_start'
        }]);
    //在每次页面加载后加入以下文件
        web_content.addEventListener('loadcommit',
        function(e) {
            web_content.executeScript({ file: "js/jquery.1.11.3.min.js" });
            web_content.executeScript({ file: "js/jianshu.js" });
        });
    //控制按钮的方法,缩小以及关闭,还多写了一个最大化的方法,不过没有调用
        var current_window = chrome.app.window.current();
    
        document.getElementById('minimize').onclick = function(){
            current_window.minimize();
        }
    
        document.getElementById('close').onclick = function(){
            current_window.close();
        }
    
        document.getElementById('maximize').onclick = function(){
            current_window.isMaximized()?current_window.restore():current_window.maximize();
        }
    }
    

    完成后界面是这样的:

    2016-03-06 12:24:57.png
    2.4.增加自己的特色
    到了这一步,恭喜你,你已经可以自己打造一个桌面应用了,到此,我们的简书桌面应用已经可以运行,我们现在要做的就是收尾工作,既然都已经将网页版本的简书都放进了我们的webview标签之中,那么我们为何不写一些自己想要的样式呢?

    control.js文件中,我们分别引入了js/jquery.1.11.3.min.js js/jianshu.js css/jianshu.css文件,那么它们是干什么的呢,这些文件可以在简书页面加载时候一同加载进去,让我来演示一下就明白了。
    比如说,在上面的图中左侧有个手机按钮来提示下载简书app,但是我已经下载了不想再看到,所以我可以写个js将其隐藏掉,将代码写在js/jianshu.js里,审查元素,知道其class是:ad-selector,所以可以这么写:

    $(document).ready(function(){
        $(".ad-selector").hide();  //将那个图标隐藏
        $(".search-form").removeAttr('target');//不要target属性
        $('a').removeAttr('target');
    })
    

    我们可以来看看效果:

    2016-03-06 12:25:48.png
    怎么样,还不错吧,同样的,如果你对简书布局有什么想改动的地方,可以将css代码写在 css/jianshu.css中,好了,现在简书桌面应用已经打造完成了,只要将这个应用移动到你的桌面,就可以和使用其他应用一样使用了,而且兼容所有平台,当然前提是你得有谷歌浏览器。

    3.总结

    终于,我们将网页版简书打造成了桌面版,是不是非常方便,总结来看就是我们先定义 manifest.json文件,告诉浏览器我们编写的应用是什么,怎么启动什么的,然后再定义启动页面main.html,最后background.js将其作为窗口调用。

    这样一个桌面应用就完成了,如果要进行修改,可以利用webview进行引入css js文件,就如同js/control.js引入的js/jianshu.js css/jianshu.css文件,就是这样。


    4.源码

    github地址 chrome_extension
    谷歌商店 下载地址

    有兴趣的可以试试,谢谢。


    5.更新

    针对简书新版进行了更新,支持全屏,更好的写作体验。

    jianshu.png

    相关文章

      网友评论

      • 小小小小小小小小小小銀:求kali 主题
        howie6879: @_Silvers 截图
        小小小小小小小小小小銀: @Howie6879 我的为何不能呢
        howie6879:@_Silvers 自带
      • 远方393:还有有些文件应该是你的本地文件,我要做该怎么获取?:cry::cry::cry:前端小白,多多包涵
        howie6879:@王小勤miya 那些文件自己新建即可
      • 远方393:你好,里面相关的页面图片怎么获取呢?:scream::scream:
        howie6879:@王小勤miya 自行百度Google
        远方393:@王小勤miya 就是简书的icon,那一些代表是简书的logo啊什么的图片
        howie6879:@王小勤miya 什么图片?
      • 0d601f651140:您好,我用了你的这款Chrome App,界面好小,右上角的两个按钮“关闭”和“最小化”没有标示
        howie6879:@Nick_Cai 你好,今日更新了你所说的问题,可以去谷歌商店更新,当时是练手之作,没想到会有人使用,今后有什么问题可直接同我说,谢谢反馈
        howie6879: @Nick_Cai 是的,很简陋,图标绿色和红色,分别代表缩小和关闭,界面大小是固定的
      • 全栈未遂工程师:参考文章完成,多谢了……
        howie6879: @全栈未遂工程师 客气了
      • 微凉一季:虽然看不懂,但是很厉害的样子,赞,
        howie6879: @微凉一季 谢谢
      • 836ce3f871cc:有时间去试试
        howie6879: @Hideaway 可以有
      • Nodelover:360浏览器好像翻译了这个谷歌文档。
        howie6879: @Yugo 我在文中已经说了
      • Nodelover:Kali Linux。 一眼认出。
        howie6879: @Yugo 已改,谢谢哈
        Nodelover:@Howie6879 这玩意印象最深刻,因为我装到PD上,卡的我不想用,装老的电脑上,死活装不上。于是就没怎么玩了。还有,npm更换淘宝源用nrm, npm i -g nrm;nrm use taobao
        howie6879:@Yugo 666
      • c075e93f8bb8:有用
        howie6879: @莫博桑 谢谢
      • 5e617a504f6d:想用nw写个
        howie6879:@嘿桃玛陶 期待
      • 1b1f242f97e1:作者不介意把包发给我看看吧?想研究研究。yangjichun456@163.com多谢。
        howie6879: @Zandy 我这个吗?没有效果应该是某些地方有问题吧,可以参考文章底部的源代码。
        1b1f242f97e1:@Zandy 谢谢作者回复,今天按照之前的文章来做,没出效果来。
        howie6879: @Zandy 文中添加了源代码下载
      • 在Azkaban写代码:Kail 2.0系统?
        howie6879: @栀子花旁的Mr猫 如你所见
      • 1b90924d10fc:谢楼主,很好的教程。正好试试chrome插件开发
        howie6879: @暴走的面包兽 对的😃
        1b90924d10fc:@Howie6879 我看你最近更新的文章,请问你现在是在学nodejs吗
        howie6879: @暴走的面包兽 插件开发有点不一样,不过差不多😊
      • b914ba0b2506:有空可以尝试一下
        howie6879: @suihanyue 是可以,用起来很不错的
      • 小镇姑娘ruia:真棒👍
        小镇姑娘ruia:@Howie6879 哪里都棒
        howie6879:@我爱你_那么你呢 哪里棒
      • xzonepiece:自己编写一个插件,还不如用已有的插件,Stylish可以改变所有网页的外观,还可以搜索样式使用,也可以自己编写CSS样式
      • 洛书luoshu:哇~不明觉厉诶
        howie6879: @洛书luoshu 我差得远,这个不一样的😳
        洛书luoshu: @Howie6879 说实话我一看满屏代码就被吓到了,不过你这个太厉害了,我一直等着简书技术团队出电脑版客户端呢,要不你给他们开发吧
        howie6879: @洛书luoshu 很好懂吧😳

      本文标题:快速将网页版简书打造成具有个人特色的简书桌面应用

      本文链接:https://www.haomeiwen.com/subject/cymvkttx.html