无法读取 属性 'value' of null - Greasemonkey 脚本

Cannot read property 'value' of null - Greasemonkey Script

如果我在我的代码中做了一些愚蠢的事情,请原谅我,我从来没有被展示如何做 javascript/jquery 并且一直在使用来自 google 搜索的其他代码,我通常只是做 shell 脚本和 vb.net。所以把我当作一个完全的初学者。

我正在编写 Greasemonkey/Tampermonkey 脚本来替换 Service-Now 中的文本。它基本上在用户注释中查找诸如 INC 或 FNAME 之类的标签,然后将它们替换为包含该数据的 service-now 字段。基本上它允许使用信息快速自动填充模板。

我 运行 遇到了脚本问题,每当我单击按钮填写标签时,我都会在 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)

从之前的帖子中,我确保在页面完成后加载 // @运行-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);
 });
 })();

此代码的一部分基于一个朋友在我以前工作的另一个地方写的代码,现在也使用服务,他的脚本在他们的页面上运行良好,但在我们的页面上根本不会 运行。

我不确定是什么导致了问题,单击按钮时读取 caller/incident 数字或其他任何值的代码不应该 运行ning 直到按钮单击并且到那时,它检索到的所有值都应该在那个时候可用。

根据上面的回复,我能够按照 wOxxOm 的建议调试代码并解决问题,归结为从四个变量中删除 [0],然后由于并非所有变量都在 [=15= 中可见] 我必须先显示变量,然后再单击按钮。我在显示按钮时也遇到了问题,所以现在我有一个临时修复程序,可以将它推到右上角。

我将 post 下面的工作代码。

// ==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);
 });
 })();