2015-01-10 2 views
1

사용자 정보 입력을 자동화하는 Greasemonkey 스크립트가 있습니다. 그러나 양식을 제출하기 전에 필드에 초점이 있어야합니다 (나는 AngularJS를 사용하여 올바른 이름/전자 메일이 입력되었는지 확인합니다). 그래서 내 코드에서 :창이 포커스가 있지 않으면 텍스트 필드가 초점을 맞추지 않습니다.

document.getElementById('name').value = "Name here"; //Enter name in field 
document.getElementById('name').focus(); //Focus on the field 

이 작동하지만 이것은 창이 활성화되어있을 때만 유효합니다. 창이 활성화되어 있지 않으면 이름을 입력하지만 필드에 포커스가 맞지 않으므로 제출할 수 없습니다. 이 문제를 해결하기 위해 수정할 수 있습니까?

편집 : 활성화되지 않은 창에서 코드를 실행해야하기 때문에 예제를 제공하기가 어렵지만 여기에는 입력 필드의 코드가 나와 있습니다.

<input id="namefield[name]" name="name" ng-model="nameField.form.name" ng-pattern="nameRegex()" placeholder="John Doe" required="" style="width: 246px" type="text" class="ng-valid-pattern ng-dirty ng-valid ng-valid-required"> 
+0

이 질문은 여전히 ​​불완전합니다. 우리는 문제를 재현하기에 충분한 정보가 없습니다. 아래의 대답이 작동하지 않으면 페이지가 동적으로 포커스 (또는 대상 노드)를 변경하고 문제가되는 페이지에 대한 액세스를 제공하거나 공개적으로 게시 된 간략한 예제를 보여 주어야합니다. 같은 행동. –

답변

1

AngularJS는 과도하게 AJAX로 구동되므로 아마도 타이밍 문제 일 수 있습니다. JS, 특히 타이머, is slowed down on pages that don't have focus.

그래서 AJAX 인식 기술만으로 충분할 수 있습니다. EG :

// ==UserScript== 
// @name  _Focus the name input 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 
waitForKeyElements ("#name", focusInput, true); 

function focusInput (jNode) { 
    jNode[0].focus(); 
} 

주 그 질문의 코드 목록 : ID name에 대한 <input id="namefield[name]"... 하지만 검색합니다.
이것이 오류가 아니라면 AngularJS가 HTML을 다시 작성한다는 표시입니다. 아직 AngularJS를 많이 배웠습니다. 원래 스크립트가 전혀 작동하지 않았다는 증거가됩니다. 경쟁 조건. 즉, 전혀 신뢰할 수 없습니다.

관련 문제