Adding types for Naver Whale Extension (#34250)

* add new package: naver-whale

* change ts version

* add relation to chrome

* add whale.topSites.delete
This commit is contained in:
서상희
2019-03-27 10:17:30 -07:00
committed by Ron Buckton
parent dd162faacc
commit b2f87aa2bb
4 changed files with 991 additions and 0 deletions
+636
View File
@@ -0,0 +1,636 @@
// Type definitions for Naver Whale extension development
// Project: https://developers.whale.naver.com/getting_started/
// Definitions by: tbvjaos510 <https://github.com/tbvjaos510>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.7
/// <reference types="chrome" />
declare interface Window {
whale: typeof whale;
}
declare namespace chrome.downloads {
export interface StateType {
readonly COMPLETE: string;
readonly IN_PROGRESS: string;
readonly INTERRUPTED: string;
}
export const State: StateType;
}
declare namespace whale {
/**
* 지정한 주기 혹은 시간에 코드가 실행되도록 예약합니다
* 권한: "alarms"
* @since Chrome 22.
*/
export import alarms = chrome.alarms;
/**
* 북마크의 생성, 삭제, 수정 및 폴더 변경 등 북마크에 관한 기능을 제공합니다. 이 API를 이용해 북마크 관리자를 만들 수 있습니다.
* 권한: "bookmarks"
* @since Chrome 5.
*/
export import bookmarks = chrome.bookmarks;
/**
* 주소창 오른쪽 툴바 영역에 나타나는 버튼을 제어 할 수 있습니다. 아이콘을 변경하거나 뱃지를 표시할 수도 있고, 팝업이 나타나게 할 수도 있습니다.
* Manifest: "browser_action": {...}
* @since Chrome 5.
*/
export import browserAction = chrome.browserAction;
/**
* 인터넷 사용 기록을 삭제할 수 있습니다. 설정 > 개인정보 보호 > 인터넷 사용 기록 삭제 영역의 각 항목별 삭제를 수행할 수 있습니다.
* 권한: "browsingData"
* @since Chrome 19.
*/
export import browsingData = chrome.browsingData;
/**
* 확장앱에 단축키를 부여할 수 있습니다.
* Manifest: "commands": {...}
* @since Chrome 16.
*/
export import commands = chrome.commands;
/**
* 쿠키, 자바스크립트, 마이크 등 웹 사이트에서 요청한 정보를 제공할 것인지 설정할 수 있습니다. 설정 > 개인정보 보호 > 콘텐츠 설정에서 확인할 수 있는 항목을 제어할 수 있습니다.
* 권한: "contentSettings"
* @since Chrome 16.
*/
export import contentSettings = chrome.contentSettings;
/**
* 마우스 오른쪽 버튼을 클릭하면 나타나는 콘텍스트 메뉴를 만들 수 있습니다. 페이지, 링크, 이미지 등 클릭한 위치에 따라 서로 다른 메뉴를 표시할 수 있습니다
* 권한: "contextMenus"
* @since Chrome 6.
*/
export import contextMenus = chrome.contextMenus;
/**
* 쿠키를 제어하거나 변경시 이벤트를 수신할 수 있습니다
* 권한: "cookies", host 권한
* @since Chrome 6.
*/
export import cookies = chrome.cookies;
/**
* 특정 탭의 네트워크 통신, JavaScript 디버깅, DOM · CSS 변형 등 디버그를 위한 [원격 디버깅 프로토콜](https://chromedevtools.github.io/devtools-protocol/tot/Network)을 사용할 수 있습니다.
* `sendCommand()` 메소드와 `onEvent` 핸들러 함수를 이용해 개발자도구에서 제공하는 개별 기능을 명령 단위로 수행할 수 있습니다.
* 권한: "debugger"
* @since Chrome 18.
*/
const _debugger: typeof chrome.debugger;
export { _debugger as debugger };
/**
* 웹 페이지에 대한 접근 권한 요청없이 특정 페이지의 콘텐트 혹은 상태에 의존적인 동작을 수행할 수 있습니다.
* 권한: "declarativeContent"
* @since Chrome 33.
*/
export import declarativeContent = chrome.declarativeContent;
/**
* 화면, 윈도우 또는 탭의 콘텐츠를 캡쳐할 수 있습니다.
* 권한: "desktopCapture"
* @since Chrome 34.
*/
export import desktopCapture = chrome.desktopCapture;
export namespace devtools {
/**
* 개발자도구를 이용한 검사(Inspect)가 진행중인 윈도우에서 코드를 실행하거나 페이지를 새로고침 하는 등의 작업을 수행할 수 있습니다.
* @since Chrome 18.
*/
export import inspectedWindow = chrome.devtools.inspectedWindow;
/**
* 개발자도구 > 네트워크 패널에서 수신하는 정보들을 수신할 수 있습니다.
* @since Chrome 18.
*/
export import network = chrome.devtools.network;
/**
* 개발자도구에 새로운 패널을 추가하거나 기존의 패널에 접근할 수 있습니다.
* @since Chrome 18.
*/
export import panels = chrome.devtools.panels;
}
/**
* 지정한 URL의 파일 다운로드, 진행중인 다운로드의 제어 및 검색 등 파일 다운로드에 관련된 기능을 사용할 수 있습니다.
* 권한: "downloads"
* @since Chrome 31
*/
export import downloads = chrome.downloads;
/**
* 웨일 브라우저 API에서 사용되는 공통 이벤트 자료형을 포함하는 네임스페이스입니다.
* @since Chrome 21.
*/
export import events = chrome.events;
/**
* 서로 다른 확장앱 사이에 메시지를 교환하거나, 현재 확장앱에 관한 정보를 얻을 수 있습니다.
* @since Chrome 5.
*/
export import extension = chrome.extension;
/**
* 글꼴 관련 설정을 제어할 수 있습니다.
* 권한: "fontSettings"
* @since Chrome 22.
*/
export import fontSettings = chrome.fontSettings;
/**
* Google Cloud Messaging 서비스와 메시지를 주고받습니다.
* 권한: "gcm"
* @since Chrome 35.
*/
export import gcm = chrome.gcm;
/**
* 방문 기록의 생성, 삭제 및 검색 등 방문 기록에 관한 기능을 제공합니다. 이 API를 이용해 방문 기록 페이지를 만들 수 있습니다.
* 권한: "history"
* @since Chrome 5.
*/
export import history = chrome.history;
/**
* 다국어 지원을 위한 기능을 제공합니다.
* @since Chrome 5.
*/
export import i18n = chrome.i18n;
/**
* 시스템의 유휴 상태(Idle) 여부를 확인하거나 변화를 감지할 수 있습니다.
* 권한: "idle"
* @since Chrome 6.
*/
export import idle = chrome.idle;
/**
* 설치되어 있는 확장앱 정보를 얻어 제어할 수 있습니다.
* 권한: "management"
* @since Chrome 8.
*/
export import management = chrome.management;
/**
* 시스템 트레이에 알림창을 표시할 수 있습니다.
* 권한: "notifications"
* @since Chrome 28.
*/
export import notifications = chrome.notifications;
/**
* 주소창에서 특정 키워드를 입력하면 확장앱이 주소창 영역에 관여하게 할 수 있습니다.
* Manifest: "omnibox": {...}
* @since Chrome 9.
*/
export import omnibox = chrome.omnibox;
/**
* 주소창 오른쪽 툴바 영역에 나타나는 버튼을 제어 할 수 있습니다.
* `browserAction`과 거의 동일하지만 현재 페이지에 대해서만 기능을 수행하기 위해 제공된다는 점이 다릅니다. 비활성 상태에서는 버튼이 회색으로 표시됩니다.
* Manifest: "page_action": {...}
* @since Chrome 5.
*/
export import pageAction = chrome.pageAction;
/**
* 지정한 탭의 웹 페이지를 MHTML 형식으로 저장할 수 있습니다.
* 권한: "pageCapture"
* @since Chrome 18.
*/
export import pageCapture = chrome.pageCapture;
/**
* 매니페스트에 optional_permissions로 정의한 추가 권한을 사용자에게 요청할 수 있습니다
* @since Chrome 16.
*/
export import permissions = chrome.permissions;
/**
* 전원 관리 기능을 제어할 수 있습니다.
* 권한: "power"
*/
export import power = chrome.power;
/**
* The chrome.printerProvider API exposes events used by print manager to query printers controlled by extensions, to query their capabilities and to submit print jobs to these printers.
* 권한: "printerProvider"
*/
export import printerProvider = chrome.printerProvider;
/**
* 개인정보 보호 관련 설정을 제어할 수 있습니다.
* 권한: "privacy"
*/
export import privacy = chrome.privacy;
/**
* 프록시 관련 설정을 제어할 수 있습니다.
* 권한: "proxy"
*/
export import proxy = chrome.proxy;
/**
* 백그라운드 페이지 검색, 매니페스트 확인 및 확장앱 수명주기에 관한 이벤트 수신, 메시지 교환 등의 기능을 제공합니다.
*/
export import runtime = chrome.runtime;
/**
* 웨일 사이드바 API.
* Manifest: "sidebar_action": {...}
* @since whale
*/
export namespace sidebarAction {
export interface SidebarShowDetail {
/** Optional. 사이드바 영역에 표시할 페이지 URL. 지정하지 않으면 매니페스트에 정의한 default_page. */
url?: string;
/**
* Optional. url 인자와 현재 URL이 같을 때에도 페이지를 새로고침 할 것인지 여부.
* @default false
*/
reload?: boolean;
}
export interface SidebarTitleDetail {
title: string;
}
export interface SidebarIconDetail {
/**
* 아이콘 이미지 데이터입니다. @see https://developer.chrome.com/extensions/pageAction#type-ImageDataType
* */
icon: ImageData;
}
export interface SidebarPageDetail {
/** html 파일의 리소스 경로. 빈 문자열(‘’)로 설정하면 사이드바에 빈화면이 보입니다. */
page: string;
}
export interface SidebarBadgeDetail {
/** 설정할 badge 문자열 */
text: string;
}
export interface SidebarDockDetail {
/** 부모 윈도우의 ID. 지정하지 않으면 마지막 사용된 윈도우에 도킹합니다. */
targetWindowId?: number;
}
export interface BadgeBackgroundColorDetails {
/** 색상값 배열([255, 0, 0, 255]) 혹은 HEX 색상 표현 문자열(#FF0000). */
color: string | ColorArray;
}
export type ColorArray = [number, number, number, number];
export interface BrowserClickedEvent
extends chrome.events.Event<(tab: chrome.tabs.Tab) => void> {}
/**
* 지정한 윈도우에 사이드바 영역을 열고 포커스를 주는 메소드입니다. 이미 사이드바가 열려있다면 포커스만 옮겨줍니다.
*
* @param windowId Optional. 대상 윈도우의 ID.
* @param details Optional. url 설정
* @param callback Optional. 콜백 함수. 인자값으로 windowId가 넘어감
*/
export function show(
windowId: number,
details?: SidebarShowDetail,
callback?: (windowId: number) => void
): void;
/**
* 현재 윈도우에 사이드바 영역을 열고 포커스를 주는 메소드입니다. 이미 사이드바가 열려있다면 포커스만 옮겨줍니다.
*
* @param details Optional. url 설정
* @param callback Optional. 콜백 함수. 인자값으로 windowId가 넘어감
*/
export function show(
details: SidebarShowDetail,
callback?: (windowId: number) => void
): void;
/**
* 현재 윈도우에 사이드바 영역을 열고 포커스를 주는 메소드입니다. 이미 사이드바가 열려있다면 포커스만 옮겨줍니다.
*
* @param callback Optional. 콜백 함수. 인자값으로 windowId가 넘어감
*/
export function show(callback: (windowId: number) => void): void;
/**
* 현재 윈도우에 사이드바 영역을 열고 포커스를 주는 메소드입니다. 이미 사이드바가 열려있다면 포커스만 옮겨줍니다.
*
*/
export function show(): void;
/**
* 지정된 윈도우의 사이드바를 닫습니다. 현재 확장앱에 포커스가 있는 상황에만 동작합니다.
* @param windowId Optional. 대상 윈도우의 ID. 지정하지 않으면 현재 윈도우.
* @param callback Optional. 콜백 함수. 인자값으로 windowId가 넘어감
*/
export function hide(
windowId: number,
callback?: (windowId: number) => void
): void;
/**
* 현재 윈도우의 사이드바를 닫습니다. 현재 확장앱에 포커스가 있는 상황에만 동작합니다.
* @param callback Optional. 콜백 함수. 인자값으로 windowId가 넘어감
*/
export function hide(callback: (windowId: number) => void): void;
/**
* 현재 윈도우의 사이드바를 닫습니다. 현재 확장앱에 포커스가 있는 상황에만 동작합니다.
*/
export function hide(): void;
/**
* 확장앱 아이콘에 마우스를 올렸을 때 나타나는 툴팁 문자열을 변경합니다.
* sidebar_action 에서 default_title 속성으로 지정하는 영역입니다.
* 열려 있는 모든 윈도우에 동시 적용됩니다.
* @param details 설정 할 데이터
*/
export function setTitle(details: SidebarTitleDetail): void;
/**
* 확장앱 아이콘에 마우스를 올렸을 때 나타나는 툴팁 문자열을 반환합니다.
* sidebar_action 에서 default_title 속성으로 지정한 영역입니다.
* @param callback title을 담은 결과를 인자값으로 넣은 콜백 함수
*/
export function getTitle(callback: (result: string) => void): void;
/**
* 확장앱 아이콘을 동적으로 변경합니다. 열려 있는 모든 윈도우에 동시 적용됩니다.
* @param details 아이콘 데이터
*/
export function setIcon(details: SidebarIconDetail): void;
/**
* 확장앱 아이콘이 클릭되었을 때, 로딩되는 페이지 리소스의 경로를 변경합니다.
* @param details 페이지 상세 정보
*/
export function setPage(details: SidebarPageDetail): void;
/**
* 사이드바 확장앱 아이콘이 클릭되었을 때, 로딩되는 페이지 리소스의 경로를 반환합니다.
* @param callback 현재 page 경로를 인자값으로 넣은 콜백 함수
*/
export function getPage(callback: (result: string) => void): void;
/**
* 확장앱 아이콘 위에 표시되는 뱃지의 문자열을 변경합니다. 열려 있는 모든 윈도우에 동시 적용됩니다.
* @param details badge 정보
*/
export function setBadgeText(details: SidebarBadgeDetail): void;
/**
* 사이드바 확장앱 아이콘 위에 표시되는 뱃지의 문자열을 반환합니다.
* @param callback 현재 뱃지 텍스트를 인자값으로 넣은 콜백 함수.
*/
export function getBadgeText(callback: (result: string) => void): void;
/**
* 확장앱 아이콘 위에 표시되는 뱃지의 배경 색상을 변경합니다. 열려 있는 모든 윈도우에 동시 적용됩니다.
* @param details 뱃지 배경 색상을 담은 객체
*/
export function setBadgeBackgroundColor(
details: BadgeBackgroundColorDetails
): void;
/**
* 확장앱 아이콘 위에 표시되는 뱃지의 배경색상을 반환합니다.
* @param callback 뱃지 배경 색상. RGBA 색상값 배열 [R, G, B, A]를 담은 인자값으로 넣은 콜백 함수.
*/
export function getBadgeBackgroundColor(
callback: (color: ColorArray) => void
): void;
/**
* 팝업 윈도우를 사이드바에 도킹합니다. details를 통해 도킹하고자 하는 부모 윈도우를 지정할 수 있습니다.
* 도킹 후에는 팝업 윈도우의 ID는 더 이상 유효하지 않습니다.
* @param popupWindowId 팝업 윈도우의 ID.
* @param details Optional. 부모 윈도우의 ID를 담은 객체
* @param callback 도킹 된 windowId를 인자값으로 넣은 콜백 함수.
*/
export function dock(
popupWindowId: number,
details: SidebarDockDetail,
callback: (windowId: number) => void
): void;
/**
* 팝업 윈도우를 사이드바에 도킹합니다. details를 통해 도킹하고자 하는 부모 윈도우를 지정할 수 있습니다.
* 도킹 후에는 팝업 윈도우의 ID는 더 이상 유효하지 않습니다.
* @param popupWindowId 팝업 윈도우의 ID.
* @param callback 도킹 된 windowId를 인자값으로 넣은 콜백 함수.
*/
export function dock(
popupWindowId: number,
callback: (windowId: number) => void
): void;
/**
* 도킹된 윈도우를 부모 윈도우에서 떼어냅니다.
* @param popupWindowId 부모 윈도우의 ID
* @param callback 새로 부여된 윈도우 Id를 인자값으로 넣은 콜백 함수.
* 여기서 windowId는 `whale.sidebarAction.dock()`으로 붙일 때 사용했던 윈도우 ID와는 다르다.
*/
export function undock(
popupWindowId: number,
callback: (windowId: number) => void
): void;
/**
* 사이드바 확장앱 아이콘이 클릭될 때 발생하는 이벤트 핸들러
*/
export var onClicked: BrowserClickedEvent;
}
/**
* 데이터 저장소 기능을 제공합니다. 데이터 변경시 이벤트를 수신할 수 있습니다. 이 API를 이용해 저장한 데이터는 쿠키, 웹 스토리지 등 인터넷 사용 기록과는 별도로 관리됩니다.
* 권한: "storage"
* @since Chrome 20.
*/
export import storage = chrome.storage;
export namespace system {
/**
* 시스템 CPU 관련 정보를 얻을 수 있습니다.
* 권한: "system.cpu"
* @since Chrome 32.
*/
export import cpu = chrome.system.cpu;
/**
* 시스템 메모리 관련 정보를 얻을 수 있습니다.
* 권한: "system.memory"
* @since Chrome 32.
*/
export import memory = chrome.system.memory;
/**
* 시스템 연결된 이동식 저장매체에 대한 정보를 얻을 수 있습니다. 새로운 이동식 저장매체가 연결되거나, 이미 연결되어 있던 매체가 연결 해제되는 경우 이벤트를 수신할 수 있습니다.
* Permissions: "system.storage"
* @since Chrome 30.
*/
export import storage = chrome.system.storage;
}
/**
* 지정한 탭의 미디어 스트림을 캡쳐할 수 있습니다
* 권한: "tabCapture"
* @since Chrome 31.
*/
export import tabCapture = chrome.tabCapture;
/**
* 새로운 탭을 생성하거나 이미 생성된 탭을 제어할 수 있습니다.
* @since Chrome 5.
*/
export import tabs = chrome.tabs;
/**
* 새 탭 페이지의 "자주 가는 사이트" 목록을 얻거나 수정, 검색 할 수 있습니다.
* Whale에서 더 많은 기능을 지원합니다.
* 권한: "topSites"
* @since Chrome 19.
*
*/
export namespace topSites {
/** 많이 방문한 URL을 저장하는 Object입니다. get에서 사용됩니다. */
export interface MostVisitedURL {
/** 많이 방문한 url. */
url: string;
/** 페이지 제목 */
title: string;
/**
* 방문기록에서 판단한 여부입니다.
* api로 추가한 경우에는 false입니다.
*/
from_history: boolean;
}
/** 많이 방문한 URL을 저장하는 Object입니다. search에서 사용됩니다. */
export interface MostVisitedURL2 {
/** 많이 방문한 url. */
url: string;
/** 페이지 제목 */
title: string;
}
/**
* 자주 가는 사이트를 전부 리스트로 담아옵니다.
* @param callback 결과를 콜백함수의 인자값으로 보냅니다.
*/
export function get(callback: (data: MostVisitedURL[]) => void): void;
/**
* 자주 가는 사이트에 url과 title을 추가합니다.
* @param url 추가할 url
* @param title 제목
* @param callback 상태를 콜백 함수의 인자값으로 보냅니다. 성공시 true, 실패시 false
*/
export function add(
url: string,
title: string,
callback?: (status: boolean) => void
): void;
/**
* 자주 가는 사이트에서 해당 url을 삭제합니다.
* @param url 삭제할 url
*/
var _delete: (url: string) => void;
export { _delete as delete };
/**
* 자주 가는 사이트에서 해당 url을 숨깁니다.
* @param url block할 url
*/
export function block(url: string): void;
/**
* 자주 가는 사이트에서 숨겨진 url을 보이게 합니다.
* @param url block을 풀 url
*/
export function unblock(url: string): void;
/**
* 자주 가는 사이트에 block당한 여부를 확인합니다.
* @param url 확인할 uri
* @param callback block 여부를 콜백함수의 인자값으로 보냅니다.
*/
export function isBlocked(
url: string,
callback: (status: boolean) => void
): void;
/**
* 방문기록에서 자주 가는 사이트 순으로 검색을 합니다.
* @param term 검색할 키워드
* @param count 검색할 개수.
* @param callback 결과 리스트를 함수의 인자값으로 보냅니다.
*/
export function search(
term: string,
count: number,
callback?: (result: MostVisitedURL2[]) => void
): void;
/**
* 자주 가는 사이트에 해당 배열을 추가합니다.
* 만약 다시 update를 실행하면 기존에 update에 존재하는 배열은 삭제됩니다.
* @param urls url, title로 구성된 Object Array
*/
export function update(urls: MostVisitedURL2[]);
}
/**
* text-to-speech를 사용할 수 있는 api입니다.
* 권한: "tts"
* @since Chrome 14.
*/
export import tts = chrome.tts;
/**
* text-to-speech를 사용할 수 있는 api입니다.
* 권한: "tts"
* @since Chrome 14.
*/
export import ttsEngine = chrome.ttsEngine;
/**
* Whale API의 type 정보를 얻을 수 있습니다.
* @since Chrome 13.
*/
export import types = chrome.types;
/**
* 웹 탐색 요청을 수신하여 제어할 수 있습니다.
* 권한: "webNavigation"
* @since Chrome 16.
*/
export import webNavigation = chrome.webNavigation;
/**
* 웹 요청을 감지하여 차단, 수정 및 간섭할 수 있습니다.
* 권한: "webRequest", host 권한
* @since Chrome 17.
*/
export import webRequest = chrome.webRequest;
/**
* 새로운 창을 생성하거나 이미 생성된 창을 제어할 수 있습니다.
* 아무런 권한이 없어도 되지만, Tab권한이 있어야 favocon, uri, title의 정보를 불러올 수 있다.
* @since Chrome 5.
*/
export import windows = chrome.windows;
}
+258
View File
@@ -0,0 +1,258 @@
// https://developers.whale.naver.com/tutorials/browserAction/
function ToolBarExample() {
whale.browserAction.onClicked.addListener(() => {
whale.tabs.create({
url: `http://news.naver.com/`
});
});
}
// https://developers.whale.naver.com/tutorials/messagePassing/
function MessageExample() {
// background
whale.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message === `How are you?`) {
sendResponse(`I'm fine thank you and you?`);
}
});
// contentScript
for (let i = 0; i < 100; i++) {
console.log(`How are you?`);
whale.runtime.sendMessage(`How are you?`, response => {
console.log(response); // = I'm fine thank you and you?
});
}
// connect
const port = whale.runtime.connect({ name: `greetings` });
port.onMessage.addListener(message => {
console.log(message);
});
for (let i = 0; i < 100; i++) {
console.log(`How are you?`);
port.postMessage(`How are you?`);
}
whale.runtime.onConnect.addListener(port => {
if (port.name === `greetings`) {
port.onMessage.addListener(message => {
if (message === `How are you?`) {
port.postMessage(`I'm fine thank you and you?`);
}
});
}
});
whale.sidebarAction.show(() => {
whale.runtime.sendMessage(`Hello Sidebar!`);
});
window.addEventListener(`DOMContentLoaded`, () => {
// 이 구문이 실행되기 전 이미 contentScript.js 의 sendMessage() 가 끝난 상태.
// 그러므로 sidebarAction.show() 의 콜백에서 보내는 메시지는 이곳에 도달하지 않습니다.
whale.runtime.onMessage.addListener(message => {
console.log(message);
});
});
}
function StorageExample() {
window.addEventListener(`DOMContentLoaded`, () => {
// 처음 로딩 될 때: 메시지가 있는지 확인하고 삭제
whale.storage.local.get(`message`, storage => {
console.log(storage.message); // = Hello
whale.storage.local.remove(`message`);
});
// 로딩 이후의 변화 대응
whale.storage.onChanged.addListener((changes, areaName) => {
if (areaName === `local` && changes.message) {
console.log(changes.message.newValue);
}
});
});
}
// https://developers.whale.naver.com/tutorials/sidebarAction/
function SidebarExample() {
whale.sidebarAction.onClicked.addListener(result => {
// result.opened: 사이드바가 열렸는지 닫혔는지를 알려주는 boolean 값. 열렸으면 true.
});
whale.sidebarAction.setTitle({
title: `새 제목`
});
whale.sidebarAction.setBadgeText({
text: `5`
});
whale.sidebarAction.setBadgeBackgroundColor({
color: `#ff0000` // RGBA 색상값 배열([255, 0, 0, 255]) 혹은 HEX 색상 표현 문자열(#FF0000).
});
}
// https://developers.whale.naver.com/tutorials/sidebarAdvance/
function SidebarExample2() {
whale.sidebarAction.show({ url: `http://MYWEBSITE.com` });
whale.sidebarAction.show({
url: whale.runtime.getURL(`index.html`)
});
}
// https://developers.whale.naver.com/tutorials/downloads/
function DownloadExample() {
whale.downloads.download({
url: `http://example.org/example.zip`
});
whale.downloads.download(
{
url: `http://example.org/example.zip`,
filename: `download.zip`,
saveAs: true
},
downloadId => {
// 만약 'downloadId' 가 undefined 라면 오류가 발생했다는 뜻입니다.
// 그러므로 이후의 과정을 진행하기 전에 오류 여부를 확인해야 합니다.
if (typeof downloadId !== `undefined`) {
console.log(`다운로드가 시작되었습니다. (ID: ${downloadId})`);
}
}
);
whale.downloads.search(
{
orderBy: ["-startTime"],
limit: 5
},
downloadedItems => {
downloadedItems.forEach(item => {
console.log(`
id: ${item.id}
filename: ${item.filename}
startedAt: ${new Date(item.startTime).toLocaleString()}
`);
});
}
);
whale.downloads.onCreated.addListener(evt => {
console.log(`
다운로드가 시작되었습니다.
- ID: ${evt.id}
- URL: ${evt.url}
- fileSize: ${evt.fileSize}
`);
});
whale.downloads.onChanged.addListener(({ id, state }) => {
if (typeof state === `undefined`) {
return;
}
switch (state.current) {
case whale.downloads.State.COMPLETE:
console.log(`다운로드가 완료되었습니다. (ID: ${id})`);
break;
case whale.downloads.State.INTERRUPTED:
console.log(`다운로드가 중단되었습니다. (ID: ${id})`);
break;
}
});
}
// https://developers.whale.naver.com/tutorials/bookmarks/
function BookmarkExample() {
whale.bookmarks.getTree(function(bmTree) {
bmTree.forEach(function(node) {});
});
}
whale.browserAction.onClicked.addListener(function() {
whale.bookmarks.create(
{
title: `네이버 웨일`,
parentId: `1`
},
function(newEntry) {
whale.bookmarks.create({
title: "웨일 홈",
url: "http://whale.naver.com/",
parentId: newEntry.id
});
whale.bookmarks.create({
title: "웨일 연구소",
url: "http://lab.whale.naver.com",
parentId: newEntry.id
});
console.log("New Entry Added");
}
);
});
// https://developers.whale.naver.com/tutorials/commands/
whale.commands.onCommand.addListener(function(command) {
if (command === `test`) {
alert("컨트롤 쉬프트 제이를 누르셨군요!");
}
});
whale.commands.onCommand.addListener(function(command) {
if (command === `open-popup`) {
whale.browserAction.setPopup({
popup: whale.runtime.getManifest().browser_action!.default_popup!
});
}
});
// https://developers.whale.naver.com/tutorials/history/
var count = 0;
whale.browserAction.onClicked.addListener(function(tab) {
whale.history.getVisits(
{
url: tab.url!
},
function(visitItem) {
count = visitItem.length;
whale.browserAction.setBadgeBackgroundColor({
color: `#ff0000`
});
whale.browserAction.setBadgeText({
text: `${count}`
});
console.log(`The user has visited ${tab.url} ${count} times`);
}
);
});
whale.browserAction.onClicked.addListener(function(tab) {
whale.history.deleteUrl({
url: tab.url!
});
});
// https://developers.whale.naver.com/tutorials/contextMenu/
whale.contextMenus.create({
title: `%s 검색하기`,
contexts: [`selection`],
onclick: () => {}
});
function searchText(info) {
const myQuery = encodeURI(
`https://search.naver.com/search.naver?query=${info.selectionText}`
);
whale.tabs.create({
url: myQuery
});
}
+16
View File
@@ -0,0 +1,16 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": ["es6", "dom"],
"noImplicitAny": false,
"noImplicitThis": false,
"strictNullChecks": true,
"strictFunctionTypes": true,
"baseUrl": "../",
"typeRoots": ["../"],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": ["index.d.ts", "test/index.ts"]
}
+81
View File
@@ -0,0 +1,81 @@
{
"extends": "dtslint/dt.json",
"rules": {
"adjacent-overload-signatures": false,
"array-type": false,
"arrow-return-shorthand": false,
"ban-types": false,
"callable-types": false,
"comment-format": false,
"dt-header": false,
"npm-naming": false,
"eofline": false,
"export-just-namespace": false,
"import-spacing": false,
"interface-name": false,
"interface-over-type-literal": false,
"jsdoc-format": false,
"max-line-length": false,
"member-access": false,
"new-parens": false,
"no-angle-bracket-type-assertion": false,
"no-any-union": false,
"no-boolean-literal-compare": false,
"no-conditional-assignment": false,
"no-consecutive-blank-lines": false,
"no-construct": false,
"no-declare-current-package": false,
"no-duplicate-imports": false,
"no-duplicate-variable": false,
"no-empty-interface": false,
"no-for-in-array": false,
"no-inferrable-types": false,
"no-internal-module": false,
"no-irregular-whitespace": false,
"no-mergeable-namespace": false,
"no-misused-new": false,
"no-namespace": false,
"no-object-literal-type-assertion": false,
"no-padding": false,
"no-redundant-jsdoc": false,
"no-redundant-jsdoc-2": false,
"no-redundant-undefined": false,
"no-reference-import": false,
"no-relative-import-in-test": false,
"no-self-import": false,
"no-single-declare-module": false,
"no-string-throw": false,
"no-unnecessary-callback-wrapper": false,
"no-unnecessary-class": false,
"no-unnecessary-generics": false,
"no-unnecessary-qualifier": false,
"no-unnecessary-type-assertion": false,
"no-useless-files": false,
"no-var-keyword": false,
"no-var-requires": false,
"no-void-expression": false,
"no-trailing-whitespace": false,
"object-literal-key-quotes": false,
"object-literal-shorthand": false,
"one-line": false,
"one-variable-per-declaration": false,
"only-arrow-functions": false,
"prefer-conditional-expression": false,
"prefer-const": false,
"prefer-declare-function": false,
"prefer-for-of": false,
"prefer-method-signature": false,
"prefer-template": false,
"radix": false,
"semicolon": false,
"space-before-function-paren": false,
"space-within-parens": false,
"strict-export-declare-modifiers": false,
"trim-file": false,
"triple-equals": false,
"typedef-whitespace": false,
"unified-signatures": false,
"void-return": false,
"whitespace": false
}
}