Простите меня, если я сделал что-то немое в моем коде, мне никогда не показывали, как делать javascript/jquery и использовали другие коды из поисковых запросов Google, я обычно просто делаю shell сценариев и vb.net. Поэтому относитесь ко мне как к начинающему.Не могу прочитать значение свойства 'null' - скрипт Greasemonkey
Я пишу сценарий Greasemonkey/Tampermonkey для замены текста в Service-Now. Он в основном ищет теги, такие как INC или FNAME, в примечаниях пользователя, а затем заменяет их полями службы - теперь этими данными. в основном это позволяет быстро автозаполнять шаблоны с информацией.
Я бегу в проблемы со сценарием, в любое время я нажимаю на кнопку, чтобы заполнить в тегах я показываю ошибку в консоли в Chrome, указав
Uncaught TypeError: Cannot read property 'value' of null
at HTMLInputElement.eval (eval at E_c (:3:114), <anonymous>:46:88)
at HTMLInputElement.dispatch (eval at E_c (:3:114), <anonymous>:7:8436)
at HTMLInputElement.r.handle (eval at E_c (:3:114), <anonymous>:7:5139)
От предыдущих постов я сделал Загружайте после страница завершена // @ run-at document-idle
Это мой текущий код, некоторые из них были изменены, чтобы скрыть, где я работаю.
// ==UserScript==
// @name Templates Plus v2
// @namespace https://MYSITE.service-now.com/*
// @include https://MYSITE.service-now.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
// @run-at document-idle
// @version 1
// @grant GM_addStyle
// ==/UserScript==
(function() {
var add='';
var buttonElems;
switch(i){
case 0:
buttonElems = document.getElementById('label.incident.work_notes');
break;
case 1:
buttonElems = document.getElementById('ni.incident.u_fcr').parentElement;
//var buttonElems = document.getElementById('incident.form_header');
break;
}
add = add + '<input id="tpbutton" type="button" value="Template Plus" class="form_action_button">'; //Template Plus Button
buttonElems.innerHTML = buttonElems.innerHTML + add;
$("#tpbutton").click(function(){
var TemplatePlus_f_AdditionalComments = document.getElementById("incident.comments")[0];
var TemplatePlus_f_WorknotesComments = document.getElementById("incident.work_notes")[0];
var TemplatePlus_f_ShortDescription = document.getElementById("incident.short_description")[0];
var TemplatePlus_f_Resolution = document.getElementById("incident.close_notes")[0];
var TemplatePlus_FirstName=(" ");
var TemplatePlus_LastName=(" ");
var TemplatePlus_MidName=(" ");
var TemplatePlus_UserID=(" ");
var TemplatePlus_UserEmail = document.getElementById("sys_readonly.incident.caller_id.email").value;
var TemplatePlus_Company = document.getElementById("sys_display.incident.company").value;
var TemplatePlus_Location = document.getElementById("sys_display.incident.location").value;
var TemplatePlus_Callback = document.getElementById("incident.u_call_back_number").value;
var TemplatePlus_Name = document.getElementById("sys_display.incident.caller_id").value;
var TemplatePlus_ConfigItem = document.getElementById("sys_display.incident.cmdb_ci").value;
var TemplatePlus_INC = document.getElementById("sys_readonly.incident.number").value;
var TemplatePlus_ATo = document.getElementById("sys_display.incident.assigned_to").value;
TemplatePlus_FirstName.value=TemplatePlus_Name.substr(TemplatePlus_Name.indexOf(',')+1);
TemplatePlus_LastName.value=TemplatePlus_Name.substr(0,TemplatePlus_Name.indexOf(','));
TemplatePlus_MidName.value=TemplatePlus_Name.substr(TemplatePlus_Name.indexOf(' ')+1);
TemplatePlus_UserID.value=TemplatePlus_LastName.substr(0,6)+TemplatePlus_FirstName.substr(0,1)+TemplatePlus_MidName.substr(0,1);
TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replaceAll("<SDESC>",TemplatePlus_f_ShortDescription.value);
TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replaceAll("<FNAME>",TemplatePlus_FirstName);
TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replaceAll("<LNAME>",TemplatePlus_LastName);
TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replaceAll("<UNAME>",TemplatePlus_UserID);
TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replaceAll("<COMPANY>",TemplatePlus_Company);
TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replaceAll("<EMAIL>",TemplatePlus_UserEmail);
TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replaceAll("<CALL>",TemplatePlus_Callback);
TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replaceAll("<INC>",TemplatePlus_INC);
TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replaceAll("<CONFIGITEM>",TemplatePlus_ConfigItem);
TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replaceAll("<SDESC>",TemplatePlus_f_ShortDescription.value);
TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replaceAll("<FNAME>",TemplatePlus_FirstName);
TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replaceAll("<LNAME>",TemplatePlus_LastName);
TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replaceAll("<UNAME>",TemplatePlus_UserID);
TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replaceAll("<COMPANY>",TemplatePlus_Company);
TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replaceAll("<EMAIL>",TemplatePlus_UserEmail);
TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replaceAll("<CALL>",TemplatePlus_Callback);
TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replaceAll("<INC>",TemplatePlus_INC);
TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replaceAll("<CONFIGITEM>",TemplatePlus_ConfigItem);
TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replaceAll("<SDESC>",TemplatePlus_f_ShortDescription.value);
TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replaceAll("<FNAME>",TemplatePlus_FirstName);
TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replaceAll("<LNAME>",TemplatePlus_LastName);
TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replaceAll("<UNAME>",TemplatePlus_UserID);
TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replaceAll("<COMPANY>",TemplatePlus_Company);
TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replaceAll("<EMAIL>",TemplatePlus_UserEmail);
TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replaceAll("<CALL>",TemplatePlus_Callback);
TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replaceAll("<INC>",TemplatePlus_INC);
TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replaceAll("<CONFIGITEM>",TemplatePlus_ConfigItem);
TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replaceAll("<SDESC>",TemplatePlus_f_ShortDescription.value);
TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replaceAll("<FNAME>",TemplatePlus_FirstName);
TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replaceAll("<LNAME>",TemplatePlus_LastName);
TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replaceAll("<UNAME>",TemplatePlus_UserID);
TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replaceAll("<COMPANY>",TemplatePlus_Company);
TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replaceAll("<EMAIL>",TemplatePlus_UserEmail);
TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replaceAll("<CALL>",TemplatePlus_Callback);
TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replaceAll("<INC>",TemplatePlus_INC);
TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replaceAll("<CONFIGITEM>",TemplatePlus_ConfigItem);
});
})();
Часть этого кода на основе одного кода друг написал в другом месте, я использовал для работы, также используемой службы в настоящее время, его сценарий работал хорошо с их страниц, но не будет работать вообще на наших.
Я не уверен, что вызывает проблему, код для чтения значений номера вызывающего/инцидента или чего-либо еще при нажатии кнопки не должен выполняться до щелчка кнопки и к тому времени все значения, которые он извлекает к тому времени все должны быть доступны.
getElementById возвращает один элемент, а не массив, поэтому вам не нужно [0]. Если что-то еще трудно сказать, не увидев сайт. Поместив отладчик; в вашем коде и перезагрузке страницы вы можете вызывать devtools, что позволит вам правильно отлаживать, видеть переменные, переходить через код по строкам. Работает в Chrome + Tampermonkey. – wOxxOm
Это было трюк, включенная отладка, и я смог увидеть, были ли ошибки, я также обнаружил, что Сервис теперь не показывает значений для введенных полей, поэтому даже если имя заполнено в поле имени, проверка его показывает, что значение равно null –
Этот код имеет несколько проблем, и Stack Overflow не является просмотром кода, ни написанием кода, ни службой. Итак, этот вопрос здесь не подходит. Либо продолжите отладку и проблемы с кипячением до MCVE, о которых вы можете задавать вопросы. Или найдите программиста JS, который может дать вам 30 минут на *** фактическом *** скрипте (не то, что выложено здесь). Некоторые проблемы: '[0]' в конце 'getElementById()', undefined/wrongper 'replaceAll', всеохватывающее использование методов' innerHTML', массивного вырезания и вставки кода по сравнению с DRY, jQuery загружен, но не используется эффективно ... –