javascript - 如何跨多个选项卡保存 greasemonkey 输出

标签 javascript variables greasemonkey

我有一个可以工作的 greasemonkey 脚本,可以将按钮添加到页面。单击按钮时,该按钮会从页面上抓取一些信息,并将其放入名为 str 的变量中。

现在我正在将变量打印到页面,它工作正常。我最终需要用几个类似页面的输出创建一个文件。

例如:

一页的输出可能是“abcdef”,第二页的输出可能是“ghijkl”。我一次将它复制到一个文本文件中以制作:

abcdef
ghijkl

有没有办法自动将它们保存到同一个变量中,并继续将新输出附加到变量中?我知道不可能从 greasemonkey 写入文件,但真的不知道在这种情况下该怎么做。大约有 100 页,所以我不想复制粘贴 100 次(我很好地打开每一页并单击按钮,这并不可怕)。

这是我的代码:

// Create a new div to put the links in and append it to the content div
links_div1 = document.createElement('div');//makes a div
//links_div1.setAttribute('class', 'box generic_datatable dataTable');//makes it look the same as rest of page
//links_div1.setAttribute('id', 'normal_wrapper');

//adds div to beginning of content section
var node = document.getElementById('navHeaderCell');
var parentDiv = node.parentNode;
parentDiv.insertBefore(links_div1,node);

//makes buttons in new divs
links_div1.innerHTML += '<table class="box generic_datatable dataTable" id="normal"><thead><tr class="colhead"><th></th></tr></thead><td>Scrape: <button type="button" id="btn_id">scrape</button></td></table>';

//makes them clickable
addButtonListener();

 function addButtonListener() {
    //first div
    document.getElementById("btn_id").addEventListener("click", function(){scrape()}, true);
    //alert("function");
} 

function scrape() {
    //alert(array);
    str = array.join('$');
    links_div1.innerHTML += str;

    }



//collect all the values in a NodeList
var linksToOpen = document.querySelectorAll ("#content_3col>table.form>tbody>tr>td.dash:nth-of-type(2)");

//alert(linksToOpen);

//--- linksToOpen is a NodeList, we want an array of links...
var array  = [];
for (var J = 0, numLinks = linksToOpen.length;  J < numLinks;  ++J) {

    array.push (linksToOpen[J].innerHTML.replace(/<[^>]*>/g,''));

}

最佳答案

大多数 UserScript 环境都提供了非常有用的

GM_setValueGM_getValue功能。

尽管如此,您确实必须小心竞争条件,所以我很想让每个选项卡生成一个随机数(可能基于时间),然后根据该值将它们的内容放入一个键中。

然后,最后,将字符串连接在一起,并在末尾显示一个可以剪切和粘贴的大字符串。

或者,如果您不想剪切和粘贴,您可以生成大量字符串并使用 HTML5 download attribute .

根据 OP 的评论进行编辑

(即时输入,未经测试。)

// The documentation talks about the second parametere here -- a default value.
var value = GM_getValue("value", "");
value += str + "\n";
GM_setValue("value", value);

虽然所有 UserScript 方法都应该理解这一点,但还有一点:

var value = GM_getValue("value");
if (value === undefined) {
  value = "";
}
value += str + "\n";
GM_setValue("value", value);

甚至:

var value = GM_getValue("value") || "";
value += str + "\n";
GM_setValue("value", value);

关于javascript - 如何跨多个选项卡保存 greasemonkey 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18347577/

相关文章:

javascript - 打开的网络套接字连接是否阻止了 ajax 请求?

javascript - 如何从异步调用返回响应?

javascript - 不在 View 中时绝对固定在 View 中

Linux Bash 脚本 : Declare var name from user or file input

variables - Ansible:如何在我的剧本中使用 list 文件(主机)中定义的变量?

javascript - 运行具有HTML标记的用户脚本?

javascript - 我想在倒数计时器停止计时后打开div

java - 在 Java 中如何使用变量?

javascript - 如何在GM_xmlhttpRequest中修复此JS范围

javascript - 每次在 YouTube 上加载新页面时如何运行脚本?