无法阅读财产'价值' of null - Greasemonkey Script

时间:2017-01-31 17:18:13

标签: javascript jquery greasemonkey tampermonkey servicenow

请原谅我,如果我在代码中做了一些愚蠢的话,我从未表现出如何做javascript / jquery并且一直在使用谷歌搜索中的其他代码,我通常只做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)

从以前的帖子开始,我确保在页面完成// @ 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 个答案:

答案 0 :(得分:0)

根据上面的回答,我能够调试代码并修复wOxxOm建议的问题,它归结为从四个变量中删除[0]然后因为并非所有变量在Service-Now中都可见我现在必须在单击按钮之前首先显示变量。我也有问题让按钮显示所以现在我有一个临时解决方案,只是推动它在右上角。

我将在下面发布工作代码。

// ==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);
 });
 })();
相关问题