2017-01-31 15 views
-1

Простите меня, если я сделал что-то немое в моем коде, мне никогда не показывали, как делать 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); 
}); 
})(); 

Часть этого кода на основе одного кода друг написал в другом месте, я использовал для работы, также используемой службы в настоящее время, его сценарий работал хорошо с их страниц, но не будет работать вообще на наших.

Я не уверен, что вызывает проблему, код для чтения значений номера вызывающего/инцидента или чего-либо еще при нажатии кнопки не должен выполняться до щелчка кнопки и к тому времени все значения, которые он извлекает к тому времени все должны быть доступны.

+1

getElementById возвращает один элемент, а не массив, поэтому вам не нужно [0]. Если что-то еще трудно сказать, не увидев сайт. Поместив отладчик; в вашем коде и перезагрузке страницы вы можете вызывать devtools, что позволит вам правильно отлаживать, видеть переменные, переходить через код по строкам. Работает в Chrome + Tampermonkey. – wOxxOm

+0

Это было трюк, включенная отладка, и я смог увидеть, были ли ошибки, я также обнаружил, что Сервис теперь не показывает значений для введенных полей, поэтому даже если имя заполнено в поле имени, проверка его показывает, что значение равно null –

+0

Этот код имеет несколько проблем, и Stack Overflow не является просмотром кода, ни написанием кода, ни службой. Итак, этот вопрос здесь не подходит. Либо продолжите отладку и проблемы с кипячением до MCVE, о которых вы можете задавать вопросы. Или найдите программиста JS, который может дать вам 30 минут на *** фактическом *** скрипте (не то, что выложено здесь). Некоторые проблемы: '[0]' в конце 'getElementById()', undefined/wrongper 'replaceAll', всеохватывающее использование методов' innerHTML', массивного вырезания и вставки кода по сравнению с DRY, jQuery загружен, но не используется эффективно ... –

ответ

0

В ответах выше я смог отладить код и исправить проблемы, как предположил wOxxOm. Он сводился к удалению [0] из четырех переменных, а затем, поскольку не все переменные видны в Service-Now. чтобы сначала отобразить переменные перед нажатием кнопки. У меня также были проблемы с кнопкой, чтобы показать, так что прямо сейчас у меня есть исправление temp, которое просто перетаскивает его в верхнем правом углу.

Я напишу рабочий код ниже.

// ==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-end 
// @version  1 
// @grant GM_addStyle 
// ==/UserScript== 
(function() { 
    var tpbutton = document.createElement("Button"); 
    tpbutton.innerHTML = "TemplatePlus"; 
    tpbutton.style = "top:0;right:0;position:absolute;z-index: 10"; 
    tpbutton.id="tpbutton"; 
    document.body.appendChild(tpbutton); 
     $("#tpbutton").click(function(){ 
      var TemplatePlus_f_AdditionalComments = document.getElementById("incident.comments"); 
      var TemplatePlus_f_WorknotesComments = document.getElementById("incident.work_notes"); 
      var TemplatePlus_f_ShortDescription = document.getElementById("incident.short_description"); 
      var TemplatePlus_f_Resolution = document.getElementById("incident.close_notes"); 

      var TemplatePlus_FirstName=(" "); 
      var TemplatePlus_LastName=(" "); 
      var TemplatePlus_Name=(" "); 
      var TemplatePlus_UserID=(" "); 
      var TemplatePlus_UserEmail=(" "); 
      var TemplatePlus_Location=(" "); 
      var TemplatePlus_Callback=(" "); 
      var TemplatePlus_ConfigItem=(" "); 
      var TemplatePlus_INC=(" "); 
      var TemplatePlus_ATo=(" "); 

      TemplatePlus_INC = document.getElementById("sys_readonly.incident.number").value; 
      TemplatePlus_FirstName=document.getElementById("sys_readonly.sys_user.first_name").value; 
      TemplatePlus_LastName=document.getElementById("sys_readonly.sys_user.last_name").value; 
      TemplatePlus_UserID=document.getElementById("sys_readonly.sys_user.user_name").value; 
      TemplatePlus_Name=document.getElementById("sys_readonly.sys_user.name").value; 
      TemplatePlus_Callback=document.getElementById("sys_readonly.sys_user.phone").value; 
      TemplatePlus_UserEmail=document.getElementById("sys_readonly.sys_user.email").value; 
      TemplatePlus_Location=document.getElementById("sys_user.location_label").value; 

      TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replace("<SDESC>",TemplatePlus_f_ShortDescription.value); 
      TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replace("<FNAME>",TemplatePlus_FirstName); 
      TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replace("<LNAME>",TemplatePlus_LastName); 
      TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replace("<UNAME>",TemplatePlus_UserID); 
      TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replace("<EMAIL>",TemplatePlus_UserEmail); 
      TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replace("<CALL>",TemplatePlus_Callback); 
      TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replace("<INC>",TemplatePlus_INC); 
      TemplatePlus_f_AdditionalComments.value=TemplatePlus_f_AdditionalComments.value.replace("<CONFIGITEM>",TemplatePlus_ConfigItem); 

      TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replace("<SDESC>",TemplatePlus_f_ShortDescription.value); 
      TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replace("<FNAME>",TemplatePlus_FirstName); 
      TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replace("<LNAME>",TemplatePlus_LastName); 
      TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replace("<UNAME>",TemplatePlus_UserID); 
      TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replace("<EMAIL>",TemplatePlus_UserEmail); 
      TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replace("<CALL>",TemplatePlus_Callback); 
      TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replace("<INC>",TemplatePlus_INC); 
      TemplatePlus_f_WorknotesComments.value=TemplatePlus_f_WorknotesComments.value.replace("<CONFIGITEM>",TemplatePlus_ConfigItem); 

      TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replace("<SDESC>",TemplatePlus_f_ShortDescription.value); 
      TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replace("<FNAME>",TemplatePlus_FirstName); 
      TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replace("<LNAME>",TemplatePlus_LastName); 
      TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replace("<UNAME>",TemplatePlus_UserID); 
      TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replace("<EMAIL>",TemplatePlus_UserEmail); 
      TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replace("<CALL>",TemplatePlus_Callback); 
      TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replace("<INC>",TemplatePlus_INC); 
      TemplatePlus_f_ShortDescription.value=TemplatePlus_f_ShortDescription.value.replace("<CONFIGITEM>",TemplatePlus_ConfigItem); 

      TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replace("<SDESC>",TemplatePlus_f_ShortDescription.value); 
      TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replace("<FNAME>",TemplatePlus_FirstName); 
      TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replace("<LNAME>",TemplatePlus_LastName); 
      TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replace("<UNAME>",TemplatePlus_UserID); 
      TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replace("<EMAIL>",TemplatePlus_UserEmail); 
      TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replace("<CALL>",TemplatePlus_Callback); 
      TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replace("<INC>",TemplatePlus_INC); 
      TemplatePlus_f_Resolution.value=TemplatePlus_f_Resolution.value.replace("<CONFIGITEM>",TemplatePlus_ConfigItem); 
}); 
})();