[크롬 익스텐션 개발하기]
Chrome Extension Sample page 소스분석
https://developer.chrome.com/extensions/samples
Event Page Example
Demonstrates usage and features of the event pageCALLS:
alarms.create
alarms.onAlarm
bookmarks.onRemoved
browserAction.onClicked
browserAction.setBadgeText
commands.onCommand
declarativeWebRequest.RedirectRequest
declarativeWebRequest.RequestMatcher
runtime.onInstalled
runtime.onMessage
runtime.onSuspend
runtime.sendMessage
tabs.create
tabs.executeScript
tabs.query
tabs.sendMessage
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 |