7

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

这是一个示例网址:

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

我的匹配规则:

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

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

不知道从这里去哪里。任何帮助表示赞赏。

4

1 回答 1

9

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

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

  1. 初始请求是不安全的 (http),但会重定向到安全页面 (https)。
  2. 第一个页面加载会重定向到实际页面。
  3. 目标内容位于<iframe>不会立即加载的内容中。
  4. 目标内容是 AJAXed-in。
  5. 我们需要查看实际页面才能弄清楚的异国情调。
  6. 初始 URL 并没有真正以changesets.

另外,养成在正则表达式中间转义/s的习惯。它并不总是需要,但如果你不这样做,它最终会在 [审查] 中咬你。所以脚本应该使用:

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

开始,但见下文。


解决步骤:

  1. 更改您@include的帐户以考虑 http 和 URL 中尾随空格或斜杠的可能性。采用:

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

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

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


如果问题是由 AJAX 延迟(或加载新内容)引起的,请使用“Fire Greasemonkey script on AJAX request”中所示waitForKeyElements()实用程序来解决此问题。

于 2012-05-07T04:31:42.927 回答