잘못된 입력에 오류가 있습니다 :그리스 몽키 스크립트가이 같은 논리에 나는 그리스 몽키 스크립트가
않는 한 로그인 한 사용자 권한 그룹에 (JOHN, 루크, JEFF, MAX, ANDY)
name="prio"
으로<input>
을 사용 중지하십시오.권한이없는 사용자 인 경우
<input name="dest">
에서 값을 선택하지 않습니다.
특히 "12"또는 "22"를 차단하고 오류 메시지를 작성하십시오. 내가 다른 입력 필드에 텍스트를 삽입하거나 내가 선택 필드를 변경하고 이를 입력 누르면 정지를 제출내가이 나타날 스크립트는 잘 작동하지만, 버그가
콘솔에서 오류 메시지 :
Error: destInput[0] has no properties Source File: file:///E:/FirefoxPortable2.x/Data/profile/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js Line: 379
var err = this.findError(script, line - lineFinder.lineNumber - 1);
은 내가 name="dest"
와 규칙이 모든 입력 필드와 선택 필드에 노력하고 있습니다 생각하십니까? 하지만 "dest"입력에 대해서만 규칙을 원합니다. 여기
는 my script code입니다 :
// ==UserScript==
// @name _SO Block submit on custom FF2 page.
// @namespace PC
// @include file:///D:/temp/foo%20SO/task*
// @include file:///D:/temp/foo%20SO/fixture*
// @include file:///D:/temp/foo%20SO/pallet*
// ==/UserScript==
GM_log ("Script start.");
unsafeWindow._oldSubmit = unsafeWindow.document.forms[0].submit;
unsafeWindow.document.forms[0].submit = function() {
GM_log ("Submit function fired.");
var destInput = document.getElementsByName ("dest");
if (! destInput || destInput.length == 0) {
//unsafeWindow._oldSubmit();
}
var destValue = destInput[0].value;
if ( /^\s*$/.test (destValue)
|| excludedDestinations.indexOf (destValue) > -1
) {
GM_log ("Submit should be blocked! (1)");
}
else {
//unsafeWindow._oldSubmit();
}
};
//--- Make sure this list of names is all uppercase.
var usersWhoCanSetPriority = ['JOHN', 'LUKE', 'JEFF', 'MAX', 'ANDY'];
var excludedDestinations = ['12', '22'];
var bDisablePrio = true;
var tdNodes = document.getElementsByTagName ("TD");
for (var J = tdNodes.length - 1; J >= 0; --J) {
var tdNode = tdNodes[J];
if (tdNode.className == "user") {
var userName = tdNode.textContent.replace (
/^(?:.|\n|\r)+\(User:\s+([^)]+)\)(?:.|\n|\r)+$/i, "$1"
).toUpperCase();
if (usersWhoCanSetPriority.indexOf (userName) > -1) {
bDisablePrio = false;
}
}
}
if (bDisablePrio) {
var oldInput = document.getElementsByName ("prio");
if (oldInput && oldInput.length) {
oldInput[0].setAttribute ("disabled", "disabled");
}
var destInput = document.getElementsByName ("dest");
if (destInput && destInput.length) {
destInput[0].addEventListener (
"change",
function (zEvent) {
bCheckdestinationValue (destInput[0]);
GM_log ("Change handler fired.");
},
false
);
destInput[0].form.addEventListener (
"submit",
function (zEvent) {
GM_log ("Submit handler fired.");
var destValue = destInput[0].value;
if ( /^\s*$/.test (destValue)
|| excludedDestinations.indexOf (destValue) > -1
) {
//--- Stop the submit
zEvent.preventDefault();
//zEvent.stopPropagation();
GM_log ("Submit should be blocked! (2)");
return false;
}
},
true
);
}
}
function bCheckdestinationValue (destInputNd) {
//--- Returns true if value is bad.
if (excludedDestinations.indexOf (destInputNd.value) > -1) {
destInputNd.value = ''; // Blank input
//--- Add or show Error message.
var destErrNode = document.getElementById ("gmDestErrorDisp");
if (destErrNode) {
destErrNode.style.display = "inline";
}
else {
destErrNode = document.createElement ('b');
destErrNode.id = "gmDestErrorDisp";
destErrNode.style.color = "red";
destErrNode.textContent = "12 and 22 are forbidden";
destInputNd.parentNode.appendChild (destErrNode);
}
return true;
}
else {
var destErrNode = document.getElementById ("gmDestErrorDisp");
if (destErrNode) {
destErrNode.style.display = "none";
}
}
return false;
}
Here is an old working version on jsFiddle for a better understanding.
추신 : 내 오래된 시스템에서 pastebin 코드 (unsafeWindow ..)가 유일한 작동 버전입니다. 시스템은 FF 2.0.0.11 및 Greasemonkey 0.8를 실행하며 업데이트 할 수 없습니다.
버그를 제거하는 방법이 있습니까? : D
난 당신이이 질문에 대해 쓴 코드를 제거를 ... 모든 입력은 지금 노력하고 있습니다! : D 하지만 내가 12 또는 22 삽입 할 때 대상 부분 더 이상 작동하지 않습니다 .. "12 및 22 금지 된"오류 메시지가 가져 오지만 더 이상 중지되지 않습니다. 문제가있는 아이디어가 있습니까? – bernte
답변을 업데이트했지만 테스트 할 방법이 없습니다. –