수업소개
웹페이지를 소비하는 입장에서도 웹페이지를 대상으로 여러가지 프로그래밍을 할 수 있는 방법이 많습니다. 최근의 웹브라우저들은 대부분 개발자 도구를 제공합니다. 이것을 이용하면 웹페이지의 소비자도 분석작업을 비롯한 여러가지 일을 할 수 있습니다. 여기서는 이것을 이용해 자신이 쓰기 위한 간단한 프로그램을 만드는 방법을 소개해드립니다. 이렇게 만들어진 개인적 프로그램을 구글 확장 프로그램으로 만들어서 누구나 사용할 수 있는 프로그램으로 승화시키는 방법도 함께 알아봅니다.
수업의 효과
- 개인적 코딩의 사례
- 구글 크롬 확장 기능 만들기
- 탈웹화 (웹이 아닌 분야에서 웹기술의 활용)
미리보기
수업
google developer console
//이 문서에서 body 태그 아래에 있는 모든 텍스를 가져온다. 그 결과를 bodyText라는 변수에 담는다.
var bodyText = document.querySelector('body').innerText;
//bodyText의 모든 단어를 추출하고, 그 단어의 숫자를 센다. 그 결과를 bodyNum이라는 변수에 담는다.
var bodyNum = bodyText.split(' ').length;
//bodyText에서 자신이 알고 있는 단어(the)가 몇번 등장하는지를 알아본다. 그 결과를 myNum이라는 변수에 담는다.
var myNum = bodyText.match(new RegExp('\\b(the|is|was|of)\\b', 'gi')).length;
myNum+'/'+bodyNum +'('+ (myNum/bodyNum*100)+'%)';
예제
manifest.json
{
"manifest_version": 2,
"name": "FrequencyOf",
"description": "My lovely words",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"activeTab"
]
}
popup.html
<!doctype html>
<html>
<head>
</head>
<body>
<h1>FrequencyOf</h1>
</body>
</html>
script.js
//컨텐츠 페이지를 대상으로 코드를 실행해주세요.
chrome.tabs.executeScript({
code:'var bodyText = document.querySelector("body").innerText;alert(bodyText);'
});
popup.html
<!doctype html>
<html>
<head>
<style>
body{
width:400px;
padding:1rem;
}
textarea{
width:100%;
font-size:2rem;
}
#result{
font-size:2.5rem;
}
</style>
</head>
<body>
<h1>FrequencyOf</h1>
<textarea id="user" rows="3"></textarea>
<div id="result"></div>
<script src="script.js"></script>
</body>
</html>
script.js
//컨텐츠 페이지의 #user 입력된 값이 변경 되었을 '때'
document.querySelector('#user').addEventListener('change', function () {
//컨텐츠 페이지에 몇개의 단어가 등장하는지 계산해주세요.
var user = document.querySelector('#user').value;
//컨텐츠 페이지를 대상으로 코드를 실행해주세요.
chrome.tabs.executeScript({
code: 'document.querySelector("body").innerText'
}, function (result) {
// 위의 코드가 실행된 후에 이 함수를 호출해주세요. 그 때 result에 담아주세요.
//이 문서에서 body 태그 아래에 있는 모든 텍스를 가져온다. 그 결과를 bodyText라는 변수에 담는다.
var bodyText = result[0];
//bodyText의 모든 단어를 추출하고, 그 단어의 숫자를 센다. 그 결과를 bodyNum이라는 변수에 담는다.
var bodyNum = bodyText.split(' ').length;
//bodyText에서 자신이 알고 있는 단어(the)가 몇번 등장하는지를 알아본다. 그 결과를 myNum이라는 변수에 담는다.
var myNum = bodyText.match(new RegExp('\\b(' + user + ')\\b', 'gi')).length;
var per = myNum / bodyNum * 100;
per = per.toFixed(1);
// id값이 result인 태그에 결과를 추가한다.
document.querySelector('#result').innerText = myNum + '/' + bodyNum + '(' + (per) + '%)';
});
});
manifest.json
{
"manifest_version": 2,
"name": "FrequencyOf",
"description": "My lovely words",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"activeTab",
"storage"
]
}
script.js
function matching(user){
chrome.tabs.executeScript({
code: 'document.querySelector("body").innerText'
}, function (result) {
// 위의 코드가 실행된 후에 이 함수를 호출해주세요. 그 때 result에 담아주세요.
//이 문서에서 body 태그 아래에 있는 모든 텍스를 가져온다. 그 결과를 bodyText라는 변수에 담는다.
var bodyText = result[0];
//bodyText의 모든 단어를 추출하고, 그 단어의 숫자를 센다. 그 결과를 bodyNum이라는 변수에 담는다.
var bodyNum = bodyText.split(' ').length;
//bodyText에서 자신이 알고 있는 단어(the)가 몇번 등장하는지를 알아본다. 그 결과를 myNum이라는 변수에 담는다.
var myNum = bodyText.match(new RegExp('\\b(' + user + ')\\b', 'gi')).length;
var per = myNum / bodyNum * 100;
per = per.toFixed(1);
// id값이 result인 태그에 결과를 추가한다.
document.querySelector('#result').innerText = myNum + '/' + bodyNum + '(' + (per) + '%)';
});
}
//크롬 스토리지에 저장된 값을 가져오세요.
chrome.storage.sync.get(function (data) {
// #user의 값으로 data의 값을 입력해주세요.
document.querySelector('#user').value = data.userWords;
//분석해서 그 결과를 #result에 넣어주세요.
matching(data.userWords);
});
//컨텐츠 페이지의 #user 입력된 값이 변경 되었을 '때'
document.querySelector('#user').addEventListener('change', function () {
//컨텐츠 페이지에 몇개의 단어가 등장하는지 계산해주세요.
var user = document.querySelector('#user').value;
// 크롬 스토리지에 입력값을 저장한다.
chrome.storage.sync.set({
userWords: user
});
//컨텐츠 페이지를 대상으로 코드를 실행해주세요.
matching(user);
});

