创建Greasemonkey' Button'将某些数据输出到页面

时间:2015-03-26 13:47:27

标签: jquery greasemonkey

这是我的第一个帖子,所以是gentile。

我希望将Greasemonkey脚本编码为获取某些数据片段,在这种情况下是代理ID和票号,并将它们导出到Excel。

我已经将一些基本上将详细信息投入到Outlook中的内容发送到一起,然后通过电子邮件将其发送给某人,但我只是希望将相关内容与之关联起来。在网页上,但是现在我在办公室里的资源有限,无法在内部创建MySQL数据库(尽管这应该很快就会完成)并且可能会让事情变得更容易:)

这是我现有脚本中的代码,它也将结果输出到一个不再存在的页面(我感觉前一个人的想法和我一样)

// ==UserScript==
// @name           Easy Feedback
// @namespace      http://blah
// @description    Easy feedback buttons
// @include        https://blah.example.com/custdetails-new.html*
// @include        https://blah.example.com/ticket_show.html*
// ==/UserScript==

// Inject jQuery into the host
function addJQuery(callback) {
var script = document.createElement("script");
script.setAttribute("src", "https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js");
script.addEventListener('load', function() {
    var script = document.createElement("script");
    script.textContent = "(" + callback.toString() + ")();";
    document.body.appendChild(script);
}, false);
document.body.appendChild(script);
}

// Burst out of its stomach
function main() {
// Get the current URL
var sAgent = "";
var sTicket = "";

// Get current ticket (if possible)
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

for (var i = 0; i < hashes.length; i++) {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
}

if (vars["ticket_id"]) {
    sTicket = vars["ticket_id"];
}

// Add feedback buttons
$("td:contains('Company staff')")
.not(":contains('Raised:')")
.not(":contains('by:')")
.each(function() {
    var tmpTicket = "";

    if (sTicket == "") {
        var tmp = $(this).closest(":contains('Ticket:')").children(0).children(0).children(0).children(0).children(0).children(0).text();
        var matched = tmp.match(/Ticket:[\s]+(.)+/);
        tmpTicket = matched[0].substr(8);
    } else {
        tmpTicket = sTicket;
    }

    tmp = ($(this).text()).match(/.+\(/);
    sAgent = tmp[0].substr(0, tmp[0].length - 1);

    $(this).append('<br /><br /><a href="mailto:mail@example.com?subject=Feedback on ' + sAgent + ' (' + tmpTicket + ')&amp;body=Agent: ' + sAgent + '%0ATicket: ' + tmpTicket + '%0A%0A%0ADetails:">Feedback</a>').children(0).click(function() {
        $(this).parent().parent().fadeOut(200);

         Record the click for Monitoring
        var tmpId = Math.floor(Math.random()*100);
        $('<iframe name="feedback' + tmpId + '" id="feedback' + tmpId + '" src="WEBSITE/Feedback/record.html?ticket=' + tmpTicket + '&agent=' + sAgent + '" style="display:none;" />').load(function() {
            $(this).remove();
        }).appendTo('body');

        $(this).parent().parent().fadeIn(200);
    });;
});
}

// Plant that seed
addJQuery(main);

所以......是的,任何建议都会受到高度赞赏。

我会举起手来承认我没有编码一段时间,但我在这里所做的是修复损坏的代码以使事情有效,所以我的编码更多&#39; hack and slash&# 39;没有专业化......:/

我觉得他把它指向某个地方的数据库,然后在html页面上显示结果,虽然我无法确定这是在我与公司合作之前很久就创建的

1 个答案:

答案 0 :(得分:0)

此代码在iframe位内记录操作,向远程服务发出GET请求:

WEBSITE/Feedback/record.html?ticket=' + tmpTicket + '&agent=' + sAgent + '

可能存在(或应该)该URL中的一些服务器端服务捕获请求并记录它。如果您的问题是该服务不再可用,我将探索两种可能的解决方案:

  1. 创建自己的日志记录服务来保存数据,如果您从不同的浏览器登录,则必须这样做。 PHP允许您非常轻松地创建此类服务,这是将请求参数附加到服务器上的CSV文件所需的所有代码:

    <?php
    $fp = fopen('log.csv', 'a');
    fwrite($fp, $_REQUEST['ticket'] . ',' . $_REQUEST['agent']);
    fclose($fp);
    ?>
    
  2. 在JavaScript中本地保存数据并使用HTML5 download将其导出,请参阅对Export javascript data to CSV file without server interaction的回复