Chrome Extension 검색 결과

6개 발견
  1. 미리보기
    2015.05.02 - mr.november11

    Event Page Example

  2. 미리보기
    2015.05.02 - mr.november11

    A browser action with a popup that changes the page color

  3. 미리보기
    2015.05.02 - mr.november11

    A browser action which changes its icon when clicked

  4. 미리보기
    2015.04.29 - mr.november11

    Print this page

  5. 미리보기
    2015.04.21 - mr.november11

    Page Redder

  6. 미리보기
    2015.04.20 - mr.november11

    My Bookmarks

Event Page Example

2015. 5. 2. 16:55 - mr.november11

[크롬 익스텐션 개발하기]

Chrome Extension Sample page 소스분석

https://developer.chrome.com/extensions/samples


manifest.json

해당 프로그램의 permission을 알람, 탭, 북마크, web requset 로 선언

Ctrl+Shift+K가 눌렸을 시 browser action을 실행하도록 설정한다.

MAX OS의 경우 Ctrl 대신 Command 버튼을 선택하면 된다.

{
  "name": "Event Page Example",
  "description": "Demonstrates usage and features of the event page",
  "version": "1.0",
  "manifest_version": 2,
  "permissions": ["alarms", "tabs", "bookmarks", "declarativeWebRequest", "*://*/*"],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "browser_action": {
    "default_icon" : "icon.png",
    "default_title": "Start Event Page"
  },
  "commands": {
    "open-google": {
      "description": "Open a tab to google.com",
      "suggested_key": { "default": "Ctrl+Shift+L" }
    },
    "_execute_browser_action": {
      "suggested_key": { "default": "Ctrl+Shift+K" }
    }
  }
}

background.js


// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Global variables only exist for the life of the page, so they get reset
// each time the page is unloaded.
var counter = 1;

var lastTabId = -1;
function sendMessage() {
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    lastTabId = tabs[0].id;
    chrome.tabs.sendMessage(lastTabId, "Background page started.");
  });
}

sendMessage();
chrome.browserAction.setBadgeText({text: "ON"});
console.log("Loaded.");

chrome.runtime.onInstalled.addListener(function() {
  console.log("Installed.");

  // localStorage is persisted, so it's a good place to keep state that you
  // need to persist across page reloads.
  localStorage.counter = 1;

  // Register a webRequest rule to redirect bing to google.
  var wr = chrome.declarativeWebRequest;
  chrome.declarativeWebRequest.onRequest.addRules([{
    id: "0",
    conditions: [new wr.RequestMatcher({url: {hostSuffix: "bing.com"}})],
    actions: [new wr.RedirectRequest({redirectUrl: "http://google.com"})]
  }]);
});

chrome.bookmarks.onRemoved.addListener(function(id, info) {
  alert("I never liked that site anyway.");
});

chrome.browserAction.onClicked.addListener(function() {
  // The event page will unload after handling this event (assuming nothing
  // else is keeping it awake). The content script will become the main way to
  // interact with us.
  chrome.tabs.create({url: "http://google.com"}, function(tab) {
    chrome.tabs.executeScript(tab.id, {file: "content.js"}, function() {
      // Note: we also sent a message above, upon loading the event page,
      // but the content script will not be loaded at that point, so we send
      // another here.
      sendMessage();
    });
  });
});

chrome.commands.onCommand.addListener(function(command) {
  chrome.tabs.create({url: "http://www.google.com/"});
});

chrome.runtime.onMessage.addListener(function(msg, _, sendResponse) {
  if (msg.setAlarm) {
    // For testing only.  delayInMinutes will be rounded up to at least 1 in a
    // packed or released extension.
    chrome.alarms.create({delayInMinutes: 0.1});
  } else if (msg.delayedResponse) {
    // Note: setTimeout itself does NOT keep the page awake. We return true
    // from the onMessage event handler, which keeps the message channel open -
    // in turn keeping the event page awake - until we call sendResponse.
    setTimeout(function() {
      sendResponse("Got your message.");
    }, 5000);
    return true;
  } else if (msg.getCounters) {
    sendResponse({counter: counter++,
                  persistentCounter: localStorage.counter++});
  }
  // If we don't return anything, the message channel will close, regardless
  // of whether we called sendResponse.
});

chrome.alarms.onAlarm.addListener(function() {
  alert("Time's up!");
});

chrome.runtime.onSuspend.addListener(function() {
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    // After the unload event listener runs, the page will unload, so any
    // asynchronous callbacks will not fire.
    alert("This does not show up.");
  });
  console.log("Unloading.");
  chrome.browserAction.setBadgeText({text: ""});
  chrome.tabs.sendMessage(lastTabId, "Background page unloaded.");
});


'Chrome Extension' 카테고리의 다른 글

A browser action with a popup that changes the page color  (0) 2015.05.02
A browser action which changes its icon when clicked  (0) 2015.05.02
Print this page  (0) 2015.04.29
Page Redder  (0) 2015.04.21
My Bookmarks  (1) 2015.04.20

다른 카테고리의 글 목록

Chrome Extension 카테고리의 포스트를 톺아봅니다

[크롬 익스텐션 개발하기]

Chrome Extension Sample page 소스분석

https://developer.chrome.com/extensions/samples


A browser action with a popup that changes the page color

Change the current page color
SOURCE FILES:
1. 프로그램 설명 
이번 코드는 page redder의 응용 버전이다.
browser action 클릭 후 popup에서 색상을 입력받아 현재 활성화된 페이지의 background color로 설정한다.


2. 소스코드 설명

manifest에서는 현재 활성화된 tab에 대한 수정이 이루어 지기 때문에 tab에 대한 permission을 추가해야한다. 

추가로 popup.html 을 browser action 에 대한 이벤트로 추가한다.

관련 javascript가 저장된 js 파일은 popup.html에서 로드한다. 

manifest.json

{

  "name": "A browser action with a popup that changes the page color",

  "description": "Change the current page color",

  "version": "1.0",

  "permissions": [

    "tabs", "http://*/*", "https://*/*"

  ],

  "browser_action": {

      "default_title": "Set this page's color.",

      "default_icon": "icon.png",

      "default_popup": "popup.html"

  },

  "manifest_version": 2

}

popup.html

popup.html 은 코드가 긴 듯 하지만 실제 ui 코드는 div 로 버튼의 이름이 적힌 사각형 네 줄이 전부다.

이외에는 css설정이 직접 들어가 있다.

popup.js.를 호출한다.

<!doctype html>

<html>

  <head>

    <title>Set Page Color Popup</title>

    <style>

    body {

      overflow: hidden;

      margin: 0px;

      padding: 0px;

      background: white;

    }


    div:first-child {

      margin-top: 0px;

    }


    div {

      cursor: pointer;

      text-align: center;

      padding: 1px 3px;

      font-family: sans-serif;

      font-size: 0.8em;

      width: 100px;

      margin-top: 1px;

      background: #cccccc;

    }

    div:hover {

      background: #aaaaaa;

    }

    #red {

      border: 1px solid red;

      color: red;

    }

    #blue {

      border: 1px solid blue;

      color: blue;

    }

    #green {

      border: 1px solid green;

      color: green;

    }

    #yellow {

      border: 1px solid yellow;

      color: yellow;

    }

    </style>

    <script src="popup.js"></script>

  </head>

  <body>

    <div id="red">red</div>

    <div id="blue">blue</div>

    <div id="green">green</div>

    <div id="yellow">yellow</div>

  </body>

</html>


popup.js

document.addEventListener에서 버튼 색상 div들에 대해서 array화 한 후 각 div에 대한 event listener를 등록한다.
이후 div를 클릭할때마다 각자 등록된 click함후가 호출된다.
tab의 background 색상 변경은 page redder와 마찬가지도 executeScript 함수를 사용한다.
변경될 색상은 이전 popup.html 의 div의 id로 지정해놓은 값을 참조한다.


// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
function click(e) {
  chrome.tabs.executeScript(null,
      {code:"document.body.style.backgroundColor='" + e.target.id + "'"});
  window.close();
}

document.addEventListener('DOMContentLoaded', function () {
  var divs = document.querySelectorAll('div');
  for (var i = 0; i < divs.length; i++) {
    divs[i].addEventListener('click', click);
  }
});









'Chrome Extension' 카테고리의 다른 글

Event Page Example  (0) 2015.05.02
A browser action which changes its icon when clicked  (0) 2015.05.02
Print this page  (0) 2015.04.29
Page Redder  (0) 2015.04.21
My Bookmarks  (1) 2015.04.20

다른 카테고리의 글 목록

Chrome Extension 카테고리의 포스트를 톺아봅니다

A browser action which changes its icon when clicked

2015. 5. 2. 15:04 - mr.november11

[크롬 익스텐션 개발하기]

Chrome Extension Sample page 소스분석

https://developer.chrome.com/extensions/samples


A browser action which changes its icon when clicked

Change browser action color when its icon is clicked

SOURCE FILES:
1. 프로그램 설명 
오른쪽 상단의 extension 버튼을 클릭하면 아이콘의 색상이 변경된다. 
extension의  현재 동작 상태를 표현하고자 할떄 응용하면 된다.


2. 소스코드 설명

manifest.json
background.js 설정 이외에는 없다.
browser action 아이콘만 변경 되기 때문에 별도의 권한 설정이 필요 없다.
{
  "name": "A browser action which changes its icon when clicked",
  "description": "Change browser action color when its icon is clicked",
  "version": "1.2",
  "background": { "scripts": ["background.js"] },
  "browser_action": {
      "name": "Click to change the icon's color"
  },
  "manifest_version": 2
}
background.js
chrome.browserAction.setIcon 함수를 사용하여 아이콘의 path를 변경한다.
별도의 icon refresh 함수를 사용하지 않아도 자동으로 화면에서 변경된다.

// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var min = 1;
var max = 5;
var current = min;

function updateIcon() {
  chrome.browserAction.setIcon({path:"icon" + current + ".png"});
  current++;

  if (current > max)
    current = min;
}

chrome.browserAction.onClicked.addListener(updateIcon);
updateIcon();





'Chrome Extension' 카테고리의 다른 글

Event Page Example  (0) 2015.05.02
A browser action with a popup that changes the page color  (0) 2015.05.02
Print this page  (0) 2015.04.29
Page Redder  (0) 2015.04.21
My Bookmarks  (1) 2015.04.20

다른 카테고리의 글 목록

Chrome Extension 카테고리의 포스트를 톺아봅니다

Print this page

2015. 4. 29. 21:45 - mr.november11

[크롬 익스텐션 개발하기]

Chrome Extension Sample page 소스분석

https://developer.chrome.com/extensions/samples


Adds a print button to the browser.

SOURCE FILES:
1. 프로그램 설명 
프린트 모양의 아이콘 클릭 시 현재 Active 상태인 탭의 print 화면이 생성된다.
프린트 화면에서 '인쇄' 버튼을 누르면 출력되는 간단한 소스
현재로서는 큰 활용 용도가 없어 보인다.
응용적 측면에서는 Active Tab 전체 페이지 인쇄가 아닌 일부 영역 선택 후 그 부분만 출력할 수 있는 기능이 있다면 좋을 것 같다.
Extension을 활용하여 프로그램 실행 시 웹 페이지 일부를 추출하고 print 함수를 사용하면 될 것 같다.


2. 소스설명

manifest.json
해당 소스는 특별한 manifest 설정이 없다.
background 소스로 background.js 파일을 링크했으며, 실행 권한을 tag과 특정 웹사이트로 한정했다.
{
  "name": "Print this page",
  "description": "Adds a print button to the browser.",
  "version": "1.1",
  "background": {
    "scripts": ["background.js"]
  },
  "permissions": [
    "tabs", "http://*/*", "https://*/*"
  ],
  "browser_action": {
      "default_title": "Print this page",
      "default_icon": "print_16x16.png"
  },
  "manifest_version": 2
}

background.js
오른쪽 상단의 프린트 버튼을 클릭했을 시 실행되야할 함수를 Listener에 추가했다.
함수 실행 시 javascript의 print 함수를 호출한다.
chrome.tabs.update함수를 사용하여 현재 active 상태인 tab 윈도우에 url로 print() 자바스크립트 함수를 실행한다.
실제 웹 주소창에 javascript:window.print(); 를 입력하면 print 페이지로 이동한다.

// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function(tab) {
  var action_url = "javascript:window.print();";
  chrome.tabs.update(tab.id, {url: action_url});
});

해당 소스 코드를 응용하여 아래와 같이 url을 변경하면
프린트 버튼을 클릭할 시 현재 active 탭에서 google.com으로 이동가능하다.
chrome.browserAction.onClicked.addListener(function(tab) {
  var action_url = "http://google.com";
  chrome.tabs.update(tab.id, {url: action_url});
});


'Chrome Extension' 카테고리의 다른 글

Event Page Example  (0) 2015.05.02
A browser action with a popup that changes the page color  (0) 2015.05.02
A browser action which changes its icon when clicked  (0) 2015.05.02
Page Redder  (0) 2015.04.21
My Bookmarks  (1) 2015.04.20

다른 카테고리의 글 목록

Chrome Extension 카테고리의 포스트를 톺아봅니다

Page Redder

2015. 4. 21. 23:39 - mr.november11

[크롬 익스텐션 개발하기]

Chrome Extension Sample page 소스분석

https://developer.chrome.com/extensions/samples




1. 프로그램 설명
크롬 익스텐션 개발에 가장 처음 관심을 갖게 한 Sample이다.
해당 프로그램을 실행시키면 현재 활성화 된 웹페이지의 body 스타일에 background를 빨강으로 세팅한다.
내부 코드는 간단하지만 웹페이지에 대한 접근 권한을 얻을 수 있기 때문에 이후 활용도 및 확장성면에서 가장 유용한 코드이다.

[프로그램 실행 전 웹페이지]

[프로그램 실행 후 웹페이지]
body style 설정으로 배경 색상이 지정되었다.

2. 소스설명
manifest.json
이 프로그램의 권한 설정은 현재 active 상태인 Tab에서만 유효하도록 되어있다.
background에 대한 persistent 설정은 false로 사용자가 browser action (아이콘을 클릭)한 상태에서만 해당 js가 로딩 되도록 설정되어 있다.
모든 상황에 대해서 js를 삽입하고 싶다면 backgroud 옵션을 변경해야 한다. 
{
  "name": "Page Redder",
  "description": "Make the current page red",
  "version": "2.0",
  "permissions": [
    "activeTab"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "browser_action": {
    "default_title": "Make this page red"
  },
  "manifest_version": 2
}
background.js
user가 browser action(아이콘 클릭)을 발생시켰을 경우 에 대한 이벤트 리스너를 추가한다.
해당 조건 발생 시 chrome.tabs.executeScript 함수를 실행한다.

// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function(tab) {
  // No tabs or host permissions needed!
  console.log('Turning ' + tab.url + ' red!');
  chrome.tabs.executeScript({
    code: 'document.body.style.backgroundColor="red"'
  });
});

chrome.browserAction.onClicked.addListener(function callback)
-> browser action 아이콘이 클릭되었을 시 호출되며, browser action이 popup을 가지고 있을 경우에는 호출되지 않는다.
-> callback 내부는 function( tabs.Tab tab) 가 호출되며 tab 매개변수를 통해 현재 active 상태인 tab의 정보를 얻어올 수 있다.
-> tab 을 통해 얻어올 수 있는 정보는 url, title, width, height 등이 있다. (https://developer.chrome.com/extensions/tabs#type-Tab)


chrome.tabs.executeScript(integer tabId, object details, function callback
-> 해당 함수는 programmatic injection 타입으로 page 안에 javascript 코드를 삽입한다. 
-> detail 파라미터에는 javascript 또는 css 코드나 파일 삽입이 가능하다. 
-> callback 파라미터는 javascript 함수가 실행 완료된 후 호출될 함수이다.
-> https://developer.chrome.com/extensions/tabs#method-executeScript


'Chrome Extension' 카테고리의 다른 글

Event Page Example  (0) 2015.05.02
A browser action with a popup that changes the page color  (0) 2015.05.02
A browser action which changes its icon when clicked  (0) 2015.05.02
Print this page  (0) 2015.04.29
My Bookmarks  (1) 2015.04.20

다른 카테고리의 글 목록

Chrome Extension 카테고리의 포스트를 톺아봅니다

My Bookmarks

2015. 4. 20. 23:08 - mr.november11

[크롬 익스텐션 개발하기]

Chrome Extension Sample page 소스분석

https://developer.chrome.com/extensions/samples


My Bookmarks

1. 프로그램 설명

해당 샘플은 크롬 함수를 통해 북마크 현황조회, 북마크 추가, 새 탭 생성으로 북마크 이동 기능을 지원한다.
북마크에 관련된 함수 위주의 샘플이기 때문에 크게 사용할일은 없을 것 같다.

2. 소스 설명

manifest.json

bookmark 접근 권한 설정, browser_action으로 버튼 선택 시 실행될 popup.html이 설정되어 있다.

{

  "name": "My Bookmarks",

  "version": "1.1",

  "description": "A browser action with a popup dump of all bookmarks, including search, add, edit and delete.",

  "permissions": [

    "bookmarks"

  ],

  "browser_action": {

      "default_title": "My Bookmarks",

      "default_icon": "icon.png",

      "default_popup": "popup.html"

  },

  "manifest_version": 2,

  "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'"

}


popup.html
div를 통해 각 영역의 이름만 선언되어있다.
실제 내부 코드는 코드는 popup.js에서 호출된다.
manifest.json은 popup.html을 호출하고, popup.html은 popup.js를 호출하는 방식
<html>
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="popup.js"></script>
</head>
<body style="width: 400px">
  <div>Search Bookmarks: <input id="search"></div>
  <div id="bookmarks"></div>
  <div id="editdialog"></div>
  <div id="deletedialog"></div>
  <div id="adddialog"></div>
</body>
</html>

popup.js

popup.js 로그 시 document.addEventListener 'DOMContentLoaded' 가 등록된다.
DOMContentLoaded는 웹페이지의 DOM 로딩 완료 후 호출된다. 
웹페이지에서 이미지 다운로드를 기다리기 전에 호출 되기 때문에 전체 페이지가 다 로딩되기 전에 실행된다.
DOM로딩이 완료될 시 dumpBookmarks 함수가 실행된다. 
dumpBookmarks 함수는 chrome.bookmarks.getTree 를 실행하여 현재 Chrome 브라우저에 설정된 Bookmark Tree를 받아온다.

이후 받아온 Bookmark 정보는 anchor 객체를 설정한 후 코드에 추가한다. 

var anchor = $('<a>');
    anchor.attr('href', bookmarkNode.url);
    anchor.text(bookmarkNode.title);
    /*
     * When clicking on a bookmark in the extension, a new tab is fired with
     * the bookmark url.
     */
    anchor.click(function() {
      chrome.tabs.create({url: bookmarkNode.url});
    });

// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Search the bookmarks when entering the search keyword.
$(function() {
  $('#search').change(function() {
     $('#bookmarks').empty();
     dumpBookmarks($('#search').val());
  });
});
// Traverse the bookmark tree, and print the folder and nodes.
function dumpBookmarks(query) {
  var bookmarkTreeNodes = chrome.bookmarks.getTree(
    function(bookmarkTreeNodes) {
      $('#bookmarks').append(dumpTreeNodes(bookmarkTreeNodes, query));
    });
}
function dumpTreeNodes(bookmarkNodes, query) {
  var list = $('<ul>');
  var i;
  for (i = 0; i < bookmarkNodes.length; i++) {
    list.append(dumpNode(bookmarkNodes[i], query));
  }
  return list;
}
function dumpNode(bookmarkNode, query) {
  if (bookmarkNode.title) {
    if (query && !bookmarkNode.children) {
      if (String(bookmarkNode.title).indexOf(query) == -1) {
        return $('<span></span>');
      }
    }
    var anchor = $('<a>');
    anchor.attr('href', bookmarkNode.url);
    anchor.text(bookmarkNode.title);
    /*
     * When clicking on a bookmark in the extension, a new tab is fired with
     * the bookmark url.
     */
    anchor.click(function() {
      chrome.tabs.create({url: bookmarkNode.url});
    });
    var span = $('<span>');
    var options = bookmarkNode.children ?
      $('<span>[<a href="#" id="addlink">Add</a>]</span>') :
      $('<span>[<a id="editlink" href="#">Edit</a> <a id="deletelink" ' +
        'href="#">Delete</a>]</span>');
    var edit = bookmarkNode.children ? $('<table><tr><td>Name</td><td>' +
      '<input id="title"></td></tr><tr><td>URL</td><td><input id="url">' +
      '</td></tr></table>') : $('<input>');
    // Show add and edit links when hover over.
        span.hover(function() {
        span.append(options);
        $('#deletelink').click(function() {
          $('#deletedialog').empty().dialog({
                 autoOpen: false,
                 title: 'Confirm Deletion',
                 resizable: false,
                 height: 140,
                 modal: true,
                 overlay: {
                   backgroundColor: '#000',
                   opacity: 0.5
                 },
                 buttons: {
                   'Yes, Delete It!': function() {
                      chrome.bookmarks.remove(String(bookmarkNode.id));
                      span.parent().remove();
                      $(this).dialog('destroy');
                    },
                    Cancel: function() {
                      $(this).dialog('destroy');
                    }
                 }
               }).dialog('open');
         });
        $('#addlink').click(function() {
          $('#adddialog').empty().append(edit).dialog({autoOpen: false,
            closeOnEscape: true, title: 'Add New Bookmark', modal: true,
            buttons: {
            'Add' : function() {
               chrome.bookmarks.create({parentId: bookmarkNode.id,
                 title: $('#title').val(), url: $('#url').val()});
               $('#bookmarks').empty();
               $(this).dialog('destroy');
               window.dumpBookmarks();
             },
            'Cancel': function() {
               $(this).dialog('destroy');
            }
          }}).dialog('open');
        });
        $('#editlink').click(function() {
         edit.val(anchor.text());
         $('#editdialog').empty().append(edit).dialog({autoOpen: false,
           closeOnEscape: true, title: 'Edit Title', modal: true,
           show: 'slide', buttons: {
              'Save': function() {
                 chrome.bookmarks.update(String(bookmarkNode.id), {
                   title: edit.val()
                 });
                 anchor.text(edit.val());
                 options.show();
                 $(this).dialog('destroy');
              },
             'Cancel': function() {
                 $(this).dialog('destroy');
             }
         }}).dialog('open');
        });
        options.fadeIn();
      },
      // unhover
      function() {
        options.remove();
      }).append(anchor);
  }
  var li = $(bookmarkNode.title ? '<li>' : '<div>').append(span);
  if (bookmarkNode.children && bookmarkNode.children.length > 0) {
    li.append(dumpTreeNodes(bookmarkNode.children, query));
  }
  return li;
}

document.addEventListener('DOMContentLoaded', function () {
  dumpBookmarks();
});

'Chrome Extension' 카테고리의 다른 글

Event Page Example  (0) 2015.05.02
A browser action with a popup that changes the page color  (0) 2015.05.02
A browser action which changes its icon when clicked  (0) 2015.05.02
Print this page  (0) 2015.04.29
Page Redder  (0) 2015.04.21

다른 카테고리의 글 목록

Chrome Extension 카테고리의 포스트를 톺아봅니다