방향키로 웹툰, 웹소설의 이전/다음화 넘기기 WebtoonKeyDownHelper
Posted 2018. 9. 24. 06:18, Filed under: 개발/JavaScript웹툰, 웹소설을 볼 때 주로 스마트폰 어플을 이용해서 보지만, 큰 화면으로 보기 위해서 PC의 웹브라우저를 이용하는 경우가 종종 있다. 그런데 일부 사이트들이 이전화, 다음화로 넘길 때 키보드의 좌우 방향키를 이용한 전환을 지원하지 않아서 불편했다. 그래서 좌우 방향키를 이용해 이전/다음화를 넘길 수 있는 기능을 Userscript 를 이용하여 만들었다.
꼭 소설, 웹툰 사이트만이 아니라 몇몇 사이트에서 이전, 다음 글로 넘길 때도 활용하고 있다.
이전, 다음 버튼을 찾아내기 위한 조건은 다양하다.
이전화, 다음화로 넘어가는 버튼 링크에 해당하는 a 태그의 attribute에 '이전', '다음' 이라는 단어가 포함된 title 이 달려있거나
a 태그 내의 span 안에 '이전', '다음'과 같은 단어가 포함되어 있거나... 등 이었다.
일단 내가 가는 사이트들만 분석해보고 조건을 넣은거고,
예상가능한 경우는 아주 많이 있지만 작성해두지 않아서 당연히 모든 사이트에서 동작하지 않는다.
사이트를 추가하고 싶다면 @include 에 원하는 사이트 주소를 추가하고
// add new conditions here 아래에 조건을 추가하면 된다.
// ==UserScript== // @name WebtoonKeyDownHelper // @namespace WebtoonKeyDownHelper // @author Nomomo // @description It supports new function to turn webtoon's page with the keyboard direction key. // @version 0.0.1 // @include *.*toon*.* // @include *novel*.* // @grant none // @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js // @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js // @run-at document-start // ==/UserScript== /*jshint multistr: true */ console.log("RUNNING WebtoonKeyDownHelper"); const PREV = -1; const NEXT = 1; function findButton(TYPE){ var res = undefined; $("a").each(function() { var temp = checkCondition(TYPE,$(this)); if(temp !== undefined){ res = temp; return false; } }); return res; } function checkCondition(TYPE, target){ if(target.length === 0) return undefined; // add new conditions here // c1 : title var title = target.attr("title"); // c2 : title >> span var span = target.find("span.text").html(); if(TYPE === NEXT){ if(indexOfCompare(title,"다음")){ return target.attr("href"); } if(indexOfCompare(span,"다음")){ return target.attr("href"); } } else if(TYPE === PREV){ if(indexOfCompare(title,"이전")){ return target.attr("href"); } if(indexOfCompare(span,"이전")){ return target.attr("href"); } } return undefined; } $(document).keydown(function(e) { var href = ""; switch(e.which) { case 37: // left href = findButton(PREV); if(href !== undefined) location.href = href; break; //case 38: // up //break; case 39: // right href = findButton(NEXT); if(href !== undefined) location.href = href; break; //case 40: // down //break; default: return; } if(href !== undefined) console.log("MOVE TO : " + href); e.preventDefault(); // prevent the default action (scroll) }); function indexOfCompare(obj,text){ if(obj === undefined){ return false; } if(obj.indexOf(text) !== -1){ return true; } return false; }