2012-05-04 141 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分鐘的解決方案,這將是一個大規模的調試噩夢。 –

相關問題