我有一个有效的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,''));
}
答案 0 :(得分:2)
大多数UserScript环境提供了非常有用的
你必须要小心竞争条件,所以我很想让每个标签生成一个随机数(可能是基于时间),然后将它们的东西放在一个基于该值的密钥中。
然后,最后,将字符串连接在一起,并在末尾显示一个可以剪切粘贴的大字符串。
或者,如果您不想剪切和粘贴,则可以生成大量字符串并使用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);