2012-05-04 16 views
5

Greasemonkeyスクリプトを使用して、テキストをa Rallyページのリンクに変換しています。ページをリロードすると、スクリプトはうまく動作します私がページに何らかの方法(リンク、ブラウザのフォワード/バック)でナビゲートすると、Greasemonkeyメニューの下にスクリプトが表示されているにもかかわらず、スクリプトは実行されません。ここでGreasemonkeyスクリプトは、ページがリロードされたときにのみ実行されます。

は、例のURLです:

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

は私のマッチングルール:

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

ハッシュが問題を引き起こしているかどうかは知りませんが、私はリロード時にすべてが正常です。

ここからどこへ行くか不明です。どんな助けもありがとうございます。

+1

リロードで動作する場合、マッチングが重要かどうかは疑問です... –

+0

誰かが尋ねると思ったので、同意しました。 :) – neilw

答えて

7

ターゲットページが有料壁の後ろにあり、「無料トライアル」メカニズムがチャンクを吹き飛ばしているため、何が起こっているのかを確認することは不可能です。

  1. 最初の要求は安全ではありません(HTTP)が、安全なページ(HTTPS)にリダイレクトします:ここで

    は、現在の行動のいくつかの原因が考えられます。

  2. 最初のページの読み込みは、実際のページに他の種類のリダイレクトを行います。
  3. 対象コンテンツはすぐに読み込まれないにあります。
  4. 対象のコンテンツはAJAXed-inです。
  5. 私たちが実際のページを見なければならないようなエキゾチックなもの。
  6. 初期URLは実際にはchangesetsで終了しません。

また、正規表現の途中/ Sをエスケープするのが習慣に入ります。それはいつも必要というわけではありませんが、あなたがしなければ結局は[検閲]であなたを噛んでしまいます。 スクリプトで使用する必要があります:

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

開始しますが、以下を参照してください。ソリューションへ


ステップ:

  1. はhttpとスペースを末尾またはURLにスラッシュを末尾の可能性を考慮して、あなたの@includeを変更します。使用:

    // @include /^https?:\/\/.*\.rallydev\.com\/.*\/changesets(?:\s|\/)*$/ 
    
  2. Firebugでページを調べます。コンテンツはAJAXされていますか? にありますか?その場合はiframe URLは何ですか?
  3. また、AJAXやリダイレクトを検出するには、Firebug's Net panelおよび/またはWiresharkを使用します。
  4. 可能であれば、問題のあるページが表示されるようにログイン情報を入力してください。
  5. 問題のあるページ(Firefox経由で保存)をスナップショットし、そのHTMLとJSへのリンクをPastebin.comにしてください。該当するとして、アイフレームだけでは(またはしないで)実行するスクリプトを持っているために

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

  6. のようなコードを使用することを検討してください。


問題はAJAXの遅延(または、新しいコンテンツのロード)によって引き起こされている場合"Fire Greasemonkey script on AJAX request"に示すように、the waitForKeyElements() utilityを使用して、その周りを取得します。

+1

これは記念碑的に役に立ちました、ありがとうございました。最初はリンクがページ上で設定された方法でだまされましたが、それはAJAXの問題でした。私はwaitForKeyElements()を使用して、ドメイン全体にルールを適用しようとしたが、動作しているようだ。それはちょっと重いです(jQueryをロードする必要はないと思っていたら幸いですが)、動作しており、信頼できると思われます。バンドルありがとう。 – neilw

+1

ようこそ。私はかつてjQueryを必要としなかった 'waitForKeyElements'を作成することを考えましたが、私のスクリプトの中で最も単純なものを除いては、いずれもjQueryを使用していました。特に、@ requireディレクティブを使うときGMがあなたのローカルマシンからそれを実行するので、それほど重くはありません。そして、jQueryの素晴らしさは、スクリプトをはるかに簡単にします。 –

+1

ありがとうございました。私はAmazonのチェックアウトプロセスに取り組んでおり、最初はそれを認識しませんでしたが、AJAXはそれぞれの "ページ"を読み込み、 'window.location.pathname'でURLを変更しています。私は自分のスクリプトをプロセスのページを@includeするように更新し、 'waitForKeyElements'を使うように簡単に変換しました。大規模なデバッグの悪夢となるであろうものに3分の解決策です。 –

関連する問題