我正在编写一个 Greasemonkey 脚本,以根据我在搜索框中输入的字词自动从网站上删除我的通知。
删除“按钮”基本上是一个链接,所以我试图在新选项卡中打开第一个链接。然后,在它加载足够之后,在同一个选项卡中一个一个地打开其余的链接。
我想出了如何获取我需要的链接以及如何循环和操作它们。我能够抓住第一个删除链接并在新选项卡中打开它。我添加了一个事件侦听器,以确保在转到下一个链接之前加载了页面。
我终于完成了这项工作,所以添加了我的搜索框和按钮。然后我必须弄清楚如何再次将整个事情包装在事件侦听器中。
所以,我现在已经完成了整个工作,除了最后一个链接加载。
所有链接都将转到我的waitFor
函数,因此它们应该打开,因此事件侦听器似乎无法正常工作,因此它通过循环太快,只有最后一个链接加载。
如何使此脚本在上一个加载的页面完全加载之前不继续循环?
除框和按钮创建之外的完整代码:
var mytable = document.getElementById ('content').getElementsByTagName ('table')[0]
var myrows = mytable.rows
//function openLinkInTab () {
//mywin2.close ();
//}
var mywin2;
mywin2 = window.open ("http://www.aywas.com/message/notices/test/", "my_win2");
var links;
var waitFor = function (i) {
links = myrows[i].cells[1].getElementsByTagName ("a");
mywin2 = window.open (links[0].href, "my_win2");
}
var delnotifs = function () {
var matching;
var toRemove;
toRemove = document.getElementById ('find').value;
alert (toRemove)
for (i = 0; i < 10; i++) {
matching = myrows[i].cells[0].innerHTML;
if (matching.indexOf (toRemove) > 0) {
mywin2.addEventListener ('load', waitFor (i), false);
}
}
}
searchButton.addEventListener ('click', delnotifs, true);
那么,为什么不等待`mywin2.addEventListener('load', waitFor(i), false);`呢?我有一种感觉,我在这里错过了一些非常简单的东西,但我就是看不到它。
我也尝试过mywin2.addEventListener('load', function(){waitFor(i)}, false);
,它仍然做同样的事情,所以它不是一个调用而不是一个指针的问题。
换也行不通mywin2.addEventListener('load', waitFor(i), false);
。
if (mywin2.document.readyState === "complete") { waitFor(i)}
而当我在它的时候......每次我看到代码循环通过这样的列表它使用
for(i=1;i < myrows.length;i++)
由于数组从零开始,因此跳过了列表中的第一个链接。所以我的问题是,如果我切换'i'
到零,并且循环只进行 while 'i'
is < length
,这是否意味着它不会遍历整个列表?难道不应该
for(i=0;i != myrows.length;i++)