Electron에서 Chatwork를 데스크탑 앱화 (Webview + badge)

electron이 유행하고 있는 것 같아서, 만지고 싶었다.
테스트 기간이 힘들고 코드를 쓰고 싶어졌기 때문에 간단한 앱을 써 보았다.

만드는 것



electron으로 데스크톱 앱 스타일의 Chatwork를 만듭니다.
  • webview에서 Chatwork보기
  • 자신에게 붙은 읽지 않은 멘션 수를 배지로 표시

  • 이 2점을 채우는 것이 이번 골.

    환경



    MacOS X 10.10.4
    Node.js v.0.12.4
    electron v.0.30.0

    해보자



    electron 설정 및 HelloWorld



    아래의 기사를 참고로 electron으로 hello world합니다.
    30분 안에 자바스크립트(Electron)로 데스크톱 앱을 만들고 배포할 때까지
    $ mkdir chatwork-electon
    $ cd chatwork-electon
    $ npm init -y
    

    package.json
    {
      "name": "sample",
      "version": "0.0.0",
      "description": "",
      "main": "main.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "mottox2",
      "license": "MIT"
    }
    

    main.js
    'use strict';
    
    var app = require('app');
    var BrowserWindow = require('browser-window');
    
    require('crash-reporter').start();
    
    var mainWindow = null;
    
    app.on('window-all-closed', function() {
      if (process.platform != 'darwin') {
        app.quit();
      }
    });
    
    app.on('ready', function() {
      mainWindow = new BrowserWindow({width: 1000, height: 600});
      mainWindow.loadUrl('file://' + __dirname + '/index.html');
      mainWindow.openDevTools(true);
    
      mainWindow.on('closed', function() {
        mainWindow = null;
      });
    });
    

    Webview 포함 및 표시



    index.html에 webview 포함
    chatwork.js도 작성하고 로드해 둡시다.

    index.html
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>Chatwork</title>
    </head>
    <body>
      <webview id="mainWebview" src="https://www.chatwork.com/" autosize="on"></webview>
      <style>
      webview {
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
      }
      </style>
      <script src="./chatwork.js"></script>
    </body>
    </html>
    

    이 시점에서는 이런 느낌이 되고 있습니다.



    읽지 않은 멘션 수 얻기



    Chatwork의 읽지 않은 멘션 수는 제목에서 얻을 수 있습니다.
    예를 들면 읽지 않은 것이 3, 멘션 첨부의 읽지 않은 것이 1인 경우는 이하와 같은 타이틀이 됩니다.
    [3(1)]チャットワーク
    

    이 타이틀을 electron측에서 사용해 갑니다.

    Webview 설명 을 읽으면 타이틀을 취득하는 getTitle이라는 메소드가 있으므로 사용합니다.
    읽지 않은 수(unreadCount)를 다음의 용으로 취득하기로 합니다.

    chatwork.js
    var webview = document.getElementById('mainWebview');
    var title = "";
    var unreadCount = 0;
    
    // 一秒ごとにタイトルをチェック
    var timer = setInterval(function() {
      title = webview.getTitle();
      var result = title.match(/\((\d+)\)/);
      // 正規表現でタイトルをチェックし、未読があれば変数に代入
      if(result) {
        unreadCount = result[1];
      }
    }, 1000);
    

    잡잡한 구현이지만, 이번 목적은 시험하는 것이므로 무시합니다.

    배지를 붙이다



    방금 얻은 unreadCount를 배지로 표시합니다.
    배지를 붙이는 방법은 여기 에서 확인할 수 있습니다.
    app.dock.setBadge(text)
    

    를 사용하면 배지를 붙일 수 있으므로 chatwork.js를 다시 씁니다.

    chatwork.js
    var remote = require('remote');
    var app = remote.require('app');
    
    var webview = document.getElementById('mainWebview');
    var title = "";
    var unreadCount = "";
    var timer = setInterval(function() {
      title = webview.getTitle();
      var result = title.match(/\((\d+)\)/);
      if(result) {
        unreadCount = result[1];
      } else {
        unreadCount = "";
      }
      // unreadCountに基づいてバッジを更新
      app.dock.setBadge(unreadCount);
    }, 1000);
    

    위의 두 줄은 조금 엉망입니다.

    참고 링크
    Electron의 remote로 프로세스간 통신을 고레벨로 취급

    시도에 자신에게 메시지를 보내면 배지 표시가 변경됩니다.


    Electron에 입문해 본 소감



    HTML, CSS, JavaScript 걸면 간단히 쓸 수 있어서 기쁘네요.
    편리 도구를 Electron을 만들어 배포하는 것이 쉽게 할 수있어 좋을 것 같습니다.
    coffee로 쓰고 싶기 때문에 빌드 환경 정돈하고 싶었습니다.

    github에 코드를 올리고 있습니다.
    htps : // 기주 b. 이 m / 더 x2 / ect ct - t rk / t ree / 05 아 f344 아 90955004 9 아 c7c908 c7d6db4824f
    실용 단계에는 그리 먼 느낌입니다.

    좋은 웹페이지 즐겨찾기