일반적인 경우
jQuery를 이용하는 경우에 엔터키를 자동으로 입력해주는 스크립트를 아래처럼 작성할 수 있습니다.
var e = jQuery.Event("keypress");
e.which = 13;
$(selector).trigger(e);
크롬 확장 프로그램의 자바스크립트의 경우
앞선 예제와 차이점이 존재합니다. 특정 페이지에서 동작하는 자바스크립트 코드가 존재할 테고 이는 확장 프로그램을 만들기 위해 작성하는 스크립트랑은 다르다는 것을 인지하셔야 합니다. 문법이 다르다는 이야기가 아니라 frame이 다릅니다. 따라서 추가한 이벤트를 페이지에서는 적용이 안됩니다.
대부분 개발자도구에서 먼저 테스트를 해보고 성공한 코드를 js에 추가하고 확장 프로그램을 로드하실 텐데요. 그러고 이벤트가 동작하지 않는 것에서 의문을 느끼실 겁니다. 기본 설정이 top frame이라서 더욱 '맞는데 왜 틀린 거지??'라는 생각을 하게 되겠죠. 본인의 Extension을 선택해서 동일한 코드를 돌려보면 틀린 게 맞는 상황이 되겠죠. 개발자 도구를 이용하실 때 frame을 변경해서 체크해보심을 추천드립니다.
해결법
본인의 스크립트를 페이지에 injection 해서 간단하게 해결할 수 있습니다. 제가 설명을 드리고 싶지만 공식 문서급의 깔끔한 글이 있어서 링크로 대체하겠습니다.
Use a content script to access the page context variables and functions
I'm learning how to create Chrome extensions. I just started developing one to catch YouTube events. I want to use it with YouTube flash player (later I will try to make it compatible with HTML5).
stackoverflow.com
맨 처음 소개드렸던 예제를 injection 한다면 아래처럼 표현 가능합니다. 소스 코드의 base를 위 링크에서 가져와서 그대로 붙여 넣었습니다. 실제로 테스트해본 결과 드디어 이벤트 트리거에 성공했습니다.
var actualCode = '(' + function() {
var e = jQuery.Event("keypress");
e.which = 13;
$(selector).trigger(e);
} + ')();';
var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.remove();
저와 같은 이유로 곤란을 겪는 분들을 위해 링크라도 첨부하고 싶은 마음에 포스팅했습니다. 읽어주셔서 감사합니다.
다른 추가 링크들
stackoverflow.com/questions/17152932/chrome-extension-how-to-send-keydown-event-to-pages-input
chrome extension: how to send 'keydown' event to page's input?
I have a test web page that alerts if i hit a key in it's input field:
stackoverflow.com
stackoverflow.com/questions/25094387/chrome-extension-trigger-events-on-content-scripts-using-jquery
Chrome Extension - Trigger events on content_scripts using JQuery
I wrote a Chrome Extension that automatically fills some registration forms. There are some select fields that need to be triggered on "change" event in order to start some Ajax calls. First I use
stackoverflow.com
쿼리 이벤트 관련 링크
JQuery 함수 trigger(), 강제로 click 이벤트 발생시키기
강제로 이벤트를 실행시키기 위해서는 JQuery .trigger() 라는 함수를 사용한다. .trigger( eventType [, extraParameters ] ) 아래 예시에서 btn 이라는 id를 갖는 요소에 강제로 클릭 이벤트를 발생시킨다. $(do..
lookingfor.tistory.com
jquery 강제 엔터처리
// 1. var e = jQuery.Event( "keydown", { keyCode: 13 } ); $(this).trigger( e ); // 2. var press = jQuery.Event("keypress"); press.ctrlKey = false; press.which = 40; // ... any other event properties..
secr.tistory.com
OKKY | jquery사용하지 않고 javascript로 keydown 이벤트 발생시키기
Jquery 사용하지 않고 Javascript만 사용해서 강제로 keycode 13 엔터 입력이 발생한거처럼 이벤트를 발생시킬수 있을까요? 찾아보니깐 jquery는 trigger를 쓰면 되는거 같은데 javascript에서는 어떻게 해야
okky.kr
.keydown() | jQuery API Documentation
Description: Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. This method is a shortcut for .on( "keydown", handler ) in the first and second variations, and .trigger( "keydown" ) in the third. The keydown event
api.jquery.com
'web > javascript' 카테고리의 다른 글
자바스크립트 폴리필과 트랜스파일 (0) | 2024.03.30 |
---|---|
부트스트랩 이용 모달(팝업)창을 띄우고 오늘 하루 더 이상 보지 않기 기능 추가하기 (2) | 2021.05.16 |
[Javascript] 키보드 이벤트의 keyCode (0) | 2021.02.08 |