7

いくつかのテキストをRallyページのリンクに変換する Greasemonkey スクリプトに取り組んでいます。スクリプトは、ページをリロードしたときにのみ正常に機能します。どのような方法 (リンク、ブラウザの前後) でページに移動しても、Greasemonkey メニューの一番下にスクリプトがチェックマーク付きで表示されているにもかかわらず、スクリプトは実行されません。

URL の例を次に示します。

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. @includehttp と、URL の末尾のスペースまたは末尾のスラッシュの可能性を考慮するように変更します。使用する:

    // @include  /^https?:\/\/.*\.rallydev\.com\/.*\/changesets(?:\s|\/)*$/
    
  2. Firebugでページを調べます。コンテンツは AJAXed-in ですか? それは<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 の遅延 (または新しいコンテンツの読み込み) である場合は、 「AJAX 要求で Greasemonkey スクリプトを起動する」に示されているようにwaitForKeyElements()ユーティリティを使用して回避します。

于 2012-05-07T04:31:42.927 に答える