Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Greasemonkey - Fatal编程技术网

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

Javascript 如何跨多个选项卡保存greasemonkey输出,javascript,variables,greasemonkey,Javascript,Variables,Greasemonkey,我有一个正在运行的greasemonkey脚本,它在页面上添加了一个按钮。单击按钮时,会从页面中提取一些信息,并将其放入名为str的变量中 现在我正在将变量打印到页面上,工作正常。我需要最终用几个类似页面的输出生成一个文件 例如: 一页的输出可能是“abcdef”,第二页的输出可能是“ghijkl”。我正在将其一次复制到一个文本文件中,以便: abcdef ghijkl 是否有一种方法可以自动将这些内容保存到同一个变量中,并将新的输出添加到该变量中?我知道从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,''));

}
//创建一个新的div以放入链接并将其附加到content div
links_div1=document.createElement('div')//跳伞
//links_div1.setAttribute('class','box generic_datatable')//使其看起来与页面的其余部分相同
//links_div1.setAttribute('id','normal_wrapper');
//将div添加到内容部分的开头
var节点=document.getElementById('navHeaderCell');
var parentDiv=node.parentNode;
parentDiv.insertBefore(links\u div1,node);
//在新的div中制作按钮
links_div1.innerHTML+='Scrape:Scrape';
//使它们可以点击
addButtonListener();
函数addButtonListener(){
//第一组
document.getElementById(“btn_id”).addEventListener(“单击”,函数(){scrape()},true);
//警报(“功能”);
} 
函数scrape(){
//警报(阵列);
str=array.join(“$”);
links_div1.innerHTML+=str;
}
//收集节点列表中的所有值
var linksToOpen=document.queryselectoral(#content_3col>table.form>tbody>tr>td.dash:n类型(2)”;
//警报(linksToOpen);
//---linksToOpen是一个节点列表,我们需要一组链接。。。
var数组=[];
对于(变量J=0,numLinks=linkstopen.length;J/g',);
}

大多数用户脚本环境都提供了非常有用的

和功能

不过,您必须小心竞争条件,因此我会尝试让每个选项卡生成一个随机数(可能基于时间),然后根据该值将它们的内容放入一个键中

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

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

根据OP的评论进行编辑

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

虽然所有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);

这些选项卡是同一域还是跨域?它在可用技术方面产生了巨大的差异。相同的领域。示例:我看到您已经接受了答案,但由于这是同一个域,您应该使用
localStorage
而不是
GM\u setValue
。这样可以处理更多的数据,并且不太可能使浏览器崩溃或陷入困境。选项卡还可以侦听本地存储更改。要获得粘贴到文件的帮助,请查看
GM\u setClipboard
。GM\u setClipboard看起来棒极了,它(或剪贴板)的容量有限制吗?我不知道限制是什么。我想是低兆字节。我会知道这是否会成为我的问题所以我在这方面遇到了麻烦。我想我会
GM_setValue(“foo”,GM_getValue(“foo”)+“/n”+str)但我遇到了奇怪的引用错误。我如何设置它来测试变量是否存在,如果存在则添加,如果不存在则创建?让它工作起来,谢谢!希望我能给你投票,但我有14个声誉,需要15个投票=(
var value = GM_getValue("value") || "";
value += str + "\n";
GM_setValue("value", value);