Greasemonkey脚本仅在重新加载页面时运行

时间:2012-05-04 21:29:29

标签: javascript greasemonkey rally

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

以下是一个示例网址:

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

我的匹配规则:

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

我不知道哈希是否会导致问题,但重新加载时一切都很好。

不知道从哪里开始。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:9)

无法确定发生了什么,因为目标页面位于付费墙后面,他们所称的“免费试用”机制会破坏大块。

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

  1. 初始请求不安全(http),但重定向到安全页面(https)。
  2. 第一页加载会执行另一种重定向到实际页面。
  3. 目标内容位于<iframe>,不会立即加载。
  4. 目标内容为AJAXed-in。
  5. 我们需要看到实际页面才能找出异国情调。
  6. 初始网址并未真正以changesets结尾。
  7. 此外,养成逃离正则表达式中间中的/ s的习惯。它并不总是需要,但如果你不这样做,它最终会在[审查]中咬你。 所以脚本应该使用:

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

    开始,但见下文。


    解决方案的步骤:

    1. 将您的@include更改为http帐户以及URL中的尾随空格或尾随斜杠的可能性。使用:

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

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

      让脚本仅在(或不在)iframe中运行(如果适用)。


    7. 如果问题是由AJAX延迟(或加载新内容)引起的,请使用the waitForKeyElements() utility中的"Fire Greasemonkey script on AJAX request"来解决问题。