Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我必须刷新页面才能运行Greasemonkey脚本?_Javascript_Greasemonkey - Fatal编程技术网

Javascript 我必须刷新页面才能运行Greasemonkey脚本?

Javascript 我必须刷新页面才能运行Greasemonkey脚本?,javascript,greasemonkey,Javascript,Greasemonkey,所以我知道这与AJAX有关,但我读过一些主题,不太明白我必须做什么。目前一切正常,但我必须刷新页面才能运行脚本。我的代码需要做什么才能在不刷新的情况下正常工作 // ==UserScript== // @name Job Aids // @description Aid in closing tickets // @include https://techaccess.ad.qintra.com/WorkJobs/WorkJobs.aspx* // @namespace camzill

所以我知道这与AJAX有关,但我读过一些主题,不太明白我必须做什么。目前一切正常,但我必须刷新页面才能运行脚本。我的代码需要做什么才能在不刷新的情况下正常工作

// ==UserScript==
// @name    Job Aids
// @description Aid in closing tickets
// @include https://techaccess.ad.qintra.com/WorkJobs/WorkJobs.aspx*
// @namespace   camzilla.net
// @version     1.1.20121128
// ==/UserScript==

var url  = window.location.href.split(".aspx");
var page = url[1].toLowerCase();

if (page == "#finaltest") {
    window.addEventListener ("load", finalResults, false);
} else if (page == "#threetoneslope") {
    window.addEventListener ("load", toneSlopeResults, false);
} else if (page == "#codes") {
    window.addEventListener ("load", closingComments, false);
} else if (page == "#cras") {
    window.addEventListener ("load", crasResults, false);
} else if (page == "#jobinfo") {
    window.addEventListener ("load", addLinks, false);
} else if (page == "") {
    if (getCookie("updater") == null) {
        var d = new Date();

        setCookie("updater", d.getTime(), 1);
        try {
            updateCheck();
        } catch(err) {
            // alert('Update checking failed');
        }
    }

    // setTimeout(promptDispatch, 1000);
}

function addLinks() {
    var mydiv   = document.querySelector('div[data-bind="CurrentJob.addr"]');
    var address = 'https://maps.google.com/maps?q=' + mydiv.textContent + ", UT";
    address.replace(/ /g, '+');  
    var a       = document.createElement("a");
    var txt     = document.createTextNode(mydiv.textContent);
    mydiv.textContent = "";
    a.appendChild(txt);
    a.href   = address;
    a.target = '_blank';
    mydiv.appendChild(a);

    mydiv   = document.querySelector('div[data-bind="CurrentJob.cktid"]');
    address = 'http://acmspjv1.interprise.com/cgi-bin/QC/DSL/dslam6100Int.pl?telephoneNum=';
    address+= mydiv.textContent;
    a       = document.createElement("a");
    txt     = document.createTextNode(mydiv.textContent);
    mydiv.textContent = "";
    a.appendChild(txt);
    a.href   = address;
    a.target = '_blank';
    mydiv.appendChild(a);
}

function updateCheck() {
    try {
        GM_xmlhttpRequest(
        {
            method: 'GET',
            url: 'http://camzilla.net/downloads/jobAids.user.js?v' + getCookie("updater"),
            headers: {'Cache-Control': 'no-cache'},
            onload: function(resp) {
                var local_version, remote_version, rt, script_name;

                rt = resp.responseText;
                remote_version = (/@version\s*(.*?)\s*$/m.exec(rt)[1]);
                local_version  = GM_info.script.version;

                if (remote_version != local_version) {

                    if(confirm(GM_info.script.name+' update v'+remote_version+ ' is available.\nWould you like to install it now?')) {
                        GM_openInTab('http://camzilla.net/downloads/jobAids.user.js');
                    } else {
                        alert('You will be reminded again tomorrow');
                    }
                }
            }
        });
    } catch(err) {
        // do something here
    }
}

function setCookie(c_name, value, exdays) {
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=c_name + "=" + c_value;
}

function getCookie(c_name) {
    var i,x,y,ARRcookies=document.cookie.split(";");

    for (i=0;i<ARRcookies.length;i++) {

        x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
        y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
        x=x.replace(/^\s+|\s+$/g,"");

        if (x==c_name) {
            return unescape(y);
        }
    }

    return null;
}

function finalResults() {
    var dc, current, loss, noise, pi, lb;

    dc      = getRandom(51, 49, 2);   
    current = getRandom(37, 29, 2);
    loss    = getRandom(7, 2, 2);
    noise   = getRandom(7, 1, 2);
    pi      = getRandom(67, 60, 2);
    lb      = getRandom(79, 70, 2);

    document.getElementById('finalTestInsightNo').click();

    document.getElementById("finalTestBeforeAcTg").value        = "0.00";
    document.getElementById("finalTestBeforeAcRg").value        = "0.00";
    document.getElementById("finalTestBeforeAcTr").value        = "0.00";
    document.getElementById("finalTestBeforeDcTr").value        = dc;
    document.getElementById("finalTestBeforeDcTg").value        = "0.00";
    document.getElementById("finalTestBeforeDcRg").value        = dc;
    document.getElementById("finalTestBeforeLoopCurrent").value = current;
    document.getElementById("finalTestAfterLoss").value         = loss;
    document.getElementById("finalTestAfterNoise").value        = noise;
    document.getElementById("finalTestAfterPi").value           = pi;
    document.getElementById("finalTestAfterLb").value           = lb;

    document.getElementById("finalTestAfterLb").focus();
    window.scrollTo(0, document.body.scrollHeight-250);

    // Store cookies to be used on cras page if needed
    setCookie("loss", loss, 1);
    setCookie("pi", pi, 1);
    setCookie("current", current, 1);
    setCookie("noise", noise, 1);
    setCookie("lb", lb, 1);
}

function crasResults() {
    document.getElementById("crasCircuitLoss").value    = getCookie("loss");
    document.getElementById("crasPowerInfluence").value = getCookie("pi");
    document.getElementById("crasLineCurrent").value    = getCookie("current");
    document.getElementById("crasCircuitNoise").value   = getCookie("noise");
    document.getElementById("crasBalance").value        = getCookie("lb");

    document.getElementById('crasFoundInF2').click();
}

function toneSlopeResults() {
    var dc = getRandom(51, 49, 2);   

    document.getElementById("ToneSlopeInsightNo").click();
    document.getElementById("ToneSlopeDmarcTaggedYes").click();
    document.getElementById("ToneSlopeClecDtPresentYes").click();

    document.getElementById("ToneSlopeBeforeDcTr").value    = dc;
    document.getElementById("ToneSlopeBeforeDcTg").value    = "0.00";
    document.getElementById("ToneSlopeBeforeDcRg").value    = dc;   
    document.getElementById("ToneSlopeRingbackTr").value    = getRandom(90,85,2);
    document.getElementById("ToneSlopeAfterResistTg").value = getRandom(998,20,0);
    document.getElementById("ToneSlopeAfterResistRg").value = getRandom(998,20,0);
    document.getElementById("ToneSlopeAfterResistTr").value = getRandom(998,20,0);

    document.getElementById("ToneSlopeAfter404").value      = "0.00";
    document.getElementById("ToneSlopeAfter1004").value     = getRandom(7, 3, 2);
    document.getElementById("ToneSlopeAfter2804").value     = "0.00";
    document.getElementById("ToneSlopeAfterNoise").value    = getRandom(7, 1, 2);
    document.getElementById("ToneSlopeAfterLb").value       = getRandom(79, 70, 2);
    document.getElementById("ToneSlopeCotName").value       = "NA";

    document.getElementById("ToneSlopeTn").focus();
}

function closingComments() {
    document.getElementById("flatRateJacks").value = "0";
    document.getElementById("rewiredJacks").value  = "0";

    document.getElementById("tripNo").click();
    document.getElementById("marketMass").click();
    document.getElementById("custTypeRes").click();
    document.getElementById("pairChangeNo").click();
    document.getElementById("tempDropNo").click();
    document.getElementById("goodCbrYes").click();

    document.getElementById("jobCloseComments").focus();
    window.scrollTo(0, 5000);
}

function getRandom(max, min, tenths) {
    var result = min + (Math.random() * (max - min + 1));
    return result.toFixed(tenths);
}
/==UserScript==
//@name职业辅助工具
//@description帮助关闭门票
//@包括https://techaccess.ad.qintra.com/WorkJobs/WorkJobs.aspx*
//@namespace camzilla.net
//@version 1.1.20121128
//==/UserScript==
var url=window.location.href.split(“.aspx”);
var page=url[1].toLowerCase();
如果(第==“#最终测试”){
window.addEventListener(“加载”,最终结果,错误);
}否则,如果(第==“#三音调坡度”){
window.addEventListener(“加载”,音调坡度结果,false);
}否则如果(第==“#代码”){
window.addEventListener(“加载”,closingComments,false);
}否则如果(第==“#CRA”)页){
window.addEventListener(“加载”,结果为假);
}否则如果(第==“#作业信息”){
window.addEventListener(“加载”,addLinks,false);
}else if(第==“”){
if(getCookie(“更新程序”)==null){
var d=新日期();
setCookie(“更新程序”,d.getTime(),1);
试一试{
updateCheck();
}捕捉(错误){
//警报(“更新检查失败”);
}
}
//设置超时(promptDispatch,1000);
}
函数addLinks(){
var mydiv=document.querySelector('div[data bind=“CurrentJob.addr”]”);
var地址=https://maps.google.com/maps?q=“+mydiv.textContent+”,UT”;
address.replace(//g,“+”);
var a=document.createElement(“a”);
var txt=document.createTextNode(mydiv.textContent);
mydiv.textContent=“”;
a、 附加子文件(txt);
a、 href=地址;
a、 目标='u blank';
mydiv.appendChild(a);
mydiv=document.querySelector('div[data bind=“CurrentJob.cktid”]”);
地址http://acmspjv1.interprise.com/cgi-bin/QC/DSL/dslam6100Int.pl?telephoneNum=';
地址+=mydiv.textContent;
a=document.createElement(“a”);
txt=document.createTextNode(mydiv.textContent);
mydiv.textContent=“”;
a、 附加子文件(txt);
a、 href=地址;
a、 目标='u blank';
mydiv.appendChild(a);
}
函数updateCheck(){
试一试{
GMxmlHttpRequest(
{
方法:“GET”,
网址:'http://camzilla.net/downloads/jobAids.user.js?v'+getCookie(“更新程序”),
标头:{'Cache-Control':'no Cache'},
onload:函数(resp){
变量本地版本、远程版本、rt、脚本名称;
rt=响应文本;
远程_版本=(/@version\s*(.*?\s*$/m.exec(rt)[1]);
local_version=GM_info.script.version;
if(远程版本!=本地版本){
如果(确认(GM_info.script.name+'update v'+remote_version+'可用。\n是否立即安装?)){
GM_openInTab('http://camzilla.net/downloads/jobAids.user.js');
}否则{
警惕(“明天会再次提醒您”);
}
}
}
});
}捕捉(错误){
//在这里做点什么
}
}
函数setCookie(c_名称、值、exdays){
var exdate=新日期();
exdate.setDate(exdate.getDate()+exdays);
var c_value=escape(value)+(exdays==null)?“”:“expires=“+exdate.toutString());
document.cookie=c_name+“=”+c_值;
}
函数getCookie(c_名称){
变量i,x,y,ARRcookies=document.cookie.split(“;”);

对于(i=0;i通过搜索查看网络上的一些ajax示例。例如:

AJAX,或者(A)同步(J)avascript(A)nd(X)ML(有趣的是,现在越来越多地使用JSON),是一个Javascript使用浏览器对象与远程服务器通信的系统。这种系统的一般使用情况是能够更新客户端界面,而无需转到其他页面。在开始之前,请注意几句

登录验证和发布表单不建议使用Ajax 用户可以关闭Javascript,或者可能由于IT策略而被限制运行Javascript

考虑到这一点,建议不要将AJAX作为关键用户功能的唯一解决方案!始终要有一个后备方案! 注意:此社区wiki帖子使用JQuery显示示例AJAX调用。建议新手使用,因为它隐藏了进行AJAX调用时的浏览器兼容性问题。有关JQuery的更多信息,请查看JQuery网站

注意:示例使用与PHP服务器的通信,但任何服务器端语言都可以使用

AJAX回调

function makeAjaxCall() {
  $.ajax({
    url: 'ajax/test.html',
    success: function(data) {
      alert('Horray the AJAX call succeeded!');
    },
    error: function(xhr, error) {
      alert('Holy errors batman!');
    }
  });
}
AJAX调用的本质

AJAX调用可以是异步的,也可以是同步的。异步意味着浏览器将发出AJAX请求并继续执行其他操作。同步意味着浏览器将停止正在执行的操作,直到AJAX调用完成。以下是两种代码之间的差异示例:

// An asynchronous call
// This is the default
$.ajax({
  url: '/server.php',
  success: function(data) {
    alert('Horray the AJAX call succeeded!');
  },
  error: function(xhr, error) {
    alert('Holy errors batman!');
  }
});
// This will get called right away
myFunction();
Now for a synchronous call:

// A synchronous call
$.ajax({
  url: '/server.php',
  async: false, // set the property here
  success: function(data) {
    alert('Horray the AJAX call succeeded!');
  },
  error: function(xhr, error) {
    alert('Holy errors batman!');
  }
});
有关更多信息和类似场景,请参阅

脚本所期望的页面元素无疑会在触发
load
事件后出现。此外,从您的评论来看,页面的整个部分似乎都被AJAX替换掉了,但AJAX很有礼貌地更改了URL哈希。这意味着您将要触发
hashchange
事件

在这种情况下,不要使用
addEventListener(“加载”…
。与
hashchange
一起使用

在不重构整个脚本以使用jQuery(这将提供更清晰、更健壮的代码)的情况下,将
函数addLinks(){…
之前的所有内容替换为:

// ==UserScript==
// @name        Job Aids
// @description Aid in closing tickets
// @include     https://techaccess.ad.qintra.com/WorkJobs/WorkJobs.aspx*
// @namespace   camzilla.net
// @version     1.1.20121128
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require     https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant       GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

//-- Pages are "loaded" via AJAX...
window.addEventListener ("hashchange", fireOnNewPage,  false);

waitForKeyElements ("#crasCircuitLoss",                 crasResults);
waitForKeyElements ("#finalTestInsightNo",              finalResults);
waitForKeyElements ("#flatRateJacks",                   closingComments);
waitForKeyElements ("#ToneSlopeInsightNo",              toneSlopeResults);
waitForKeyElements ("div[data-bind="CurrentJob.addr"]", addLinks);

function fireOnNewPage () {
    switch (location.hash.toLowerCase() ) {
        case "#finaltest":
        case "#threetoneslope":
        case "#codes":
        case "#cras":
        case "#jobinfo":
            //-- No action needed, waitForKeyElements() handles this.
        break;
        default:
            if (getCookie("updater") == null) {
                var d = new Date();

                setCookie("updater", d.getTime(), 1);
                try {
                    updateCheck();
                } catch(err) {
                    // alert('Update checking failed');
                }
            }
        break;
    }
}
fireOnNewPage ();   //-- Initial run on initial, full page load.

这似乎不适用于此问题。请记住,这是一个Greasemonkey上下文,因此用户无法控制目标页面。而且,他的脚本似乎不适用于此问题