2012-05-04 108 views
5

我正在使用Greasemonkey脚本将某些文本转换为a Rally页面上的链接。该脚本正常工作只有当我重新加载页面。如果我以任何方式(链接,浏览器前进/后退)导航到页面,尽管Greasemonkey菜单在底部显示我的脚本并带有复选标记,但脚本仍不会运行。Greasemonkey脚本仅在页面重新加载时运行

下面是一个例子网址:

https://rally1.rallydev.com/#/4745909548/detail/userstory/6138899084/changesets 

我的匹配规则:

/^https://.*\.rallydev\.com/.*/changesets$/ 

如果散列导致一个问题,我不知道,但一切都很好,当我重新加载。

不知道该从哪里出发。任何帮助表示赞赏。

+1

如果它适用于重载那么我怀疑匹配是否重要... –

+0

同意,我是包括信息,因为我想有人会问。 :) – neilw

回答

7

由于目标页面位于付费墙的背后,因此无法确定发生了什么事情,并且他们所谓的“免费试用”机制吹出了大块。

以下是当前行为的某些可能的原因:

  1. 初始请求是不安全(HTTP)但重定向到安全网页(HTTPS)。
  2. 第一页加载做了一些其他类型的重定向到实际页面。
  3. 目标内容位于中,不会立即加载。
  4. 目标内容是AJAX输入。
  5. 一些异国情调,我们需要看到实际的页面弄清楚。
  6. 初始网址并不真正以changesets结束。

而且,进入正则表达式的中间逃避/ S的习惯。这并不总是需要的,但如果你不这样做,它最终会在[审查]中咬你。 所以脚本应该使用:

// @include /^https:\/\/.*\.rallydev\.com\/.*\/changesets$/ 

要启动,但请参阅下文。


步骤来解决:

  1. 更改@include占HTTP和尾部的空格或URL斜线的可能性。使用:

    // @include /^https?:\/\/.*\.rallydev\.com\/.*\/changesets(?:\s|\/)*$/ 
    
  2. 检查页面Firebug。内容是AJAX的吗?它在?如果是这样,iframe的URL是什么?
  3. 若要检测AJAX和/或重定向,请使用Firebug's Net panel和/或Wireshark
  4. 如果可能,请向我们提供登录凭据,以便我们可以看到有问题的页面。
  5. 快照有问题的网页(通过火狐将其保存)和链接Pastebin.com HTML和JS。
  6. 考虑使用类似的代码:

    if (window.top != window.self) { 
        //--- Don't run on/in frames or iframes. 
        return; 
    } 
    

    使用该脚本运行只在(或没有)I帧(如适用)。


如果问题是由AJAX延迟(或新的内容加载)造成的,要解决通过使用the waitForKeyElements() utility如图"Fire Greasemonkey script on AJAX request"

+1

这是非常有用的,非常感谢你。这是一个AJAX问题,尽管我最初是通过在页面上配置链接的方式被愚弄的。我尝试使用waitForKeyElements(),将规则应用于整个域,它似乎正在工作。这有点重量级(希望我不需要加载jQuery),但它的工作原理和似乎是可靠的。感谢一束。 – neilw

+1

不客气。我曾经想过创建一个不需要jQuery的'waitForKeyElements',但是除了最简单的脚本之外,其他所有脚本都使用jQuery。这不是重量级的,尤其是在GM使用'@ require'指令运行它时。而jQuery的真棒善良使脚本更容易。 –

+1

非常感谢所有参与者。我正在与亚马逊的结账流程合作,我一开始并没有意识到,但他们是通过AJAX加载每个“页面”并通过“window.location.pathname”更改URL。我将脚本更新为@include过程中的任何页面,并轻松将其转换为使用'waitForKeyElements'。这是一个3分钟的解决方案,这将是一个大规模的调试噩梦。 –

相关问题