2013-04-30 104 views
0

我正在使用Firefox的imacros插件从在线数据库下载数据。它完美的工作,除非页面超时。我已经开始下载非常小的数据块,因为那时网站的使用时间要少得多,但偶尔也会超时。刷新greasemonkey脚本的问题页面

问题是没有办法编码if语句直接进入imacros宏,所以我想要一个沿着它运行的刷新页面的greasemonkey脚本,如果它超时。该网站只是超时在一个地方对我来说,当它做它显示以下内容: 无法打开文件

我从来没有学过的Java或Javascript和所有与数值计算方法我的编程经验的交易,但我我一直在拼凑代码并使其适应于尝试解决我的问题。

以下是我的基本代码:

var RefreshTime = '20'; 
var str1 = document.body.innerHTML 
var str2 = "can't open file" 

if (str1.search(str2) > 0) { 
    if (StRefTime > 0) setTimeout("location.reload(true);",RefreshTime*1000); 
} 

由于我这运行在浏览器中,目前正在专门用于这个脚本我只是还@include *

基本上这是什么意思要做的就是每20秒钟刷新一次页面,只要“无法打开文件”就会找到该网页。当我测试时,这在其他网站上完美运行,但在我需要的网站上根本无法运行。值得注意的是,当我刷新时,Firefox会要求我确认重新发送发布数据 - 但imacros确实有一个功能,我测试并在本站上运行,以便在显示对话框时自动确认。

在做了一些阅读之后,我发现其他人有类似的问题,我认为其根源是如果页面是通过AJAX到达的话,那么greasemonkey会错过它。

为了解决这个问题,我尝试对这些人实施建议的解决方案,但是我一直没有成功。例如,我已经试过把我上面列出到这里给出的解决方案的代码:Run Greasemonkey script on the same page, multiple times?,例如

var RefreshTime = '20'; 
var str1 = document.body.innerHTML 
var str2 = "can't open file" 

function highlightGoodComments (jNode) { 

    //***** YOUR CODE HERE ***** 

    if (/str2/i.test (jNode.text())) { 

     if (str1.search(str2) > 0) { 
      if (RefreshTime > 0) setTimeout("location.reload(true);",RefreshTime*1000); 
     } 

    } 

但这也不管用,我尝试了它的一对夫妇的变化(例如摆脱str2,只是把“打开文件”和类似的东西),我也试过,并没有做出以下工作https://gist.github.com/BrockA/2625891。我也尝试将所有的初始代码包装在一个setInterval循环中,希望即使没有任何页面加载,它也会经常检查“无法打开文件”,但这也不起作用。

不幸的是,我运行我的脚本的网站隐藏在付费墙后面,并且很难测试我的代码,因为它随机超时,因此无法检查我的代码是否在等待很长时间并看看它是否失败。我对AJAX一无所知,所以我不知道如何确认这是发生了什么,但我仍然相信它是如此,因为我的问题似乎与其他人的问题类似 - 当我启用此宏时,它确实似乎干扰网站的其他部分,但不是我的脚本工作的部分。

我希望有人可以帮助我,因为我在这里很困难,已经在我的头上。即使你无法提供帮助,如果有人知道某个AJAX网站,我可以在不需要等待几个小时的情况下测试代码的某种类型的AJAX网站,这对我尝试自己弄清楚这一点很有帮助。感谢您阅读本文,我真的很感谢任何人可以提供的帮助。

回答

0

这个问题很长,所以我没有真正阅读它。由于我不使用GreasMonkey,我可以告诉你iMacros解决方案。

Check if html element exists with iMacros and javascript

这里是一个模型是如何内置JS脚本的iMacros,包括if子句。您可以制作一个测试宏,在这里测试是“无法打开”网页。你

也可以尝试使用

SET !TIMEOUT_PAGE 120 

命令来提高页面加载的时间为120秒。尝试一些这些,如果它可以帮助。