2016-02-16 122 views
1

背景:我正在通過VWO對網站進行A/B測試。我可以編寫一個在頁面加載時運行的腳本,但我不能訪問任何網站的預先存在的腳本,也不能以任何方式改變它們的代碼,除了在JS中「覆蓋」(例如移除div,更改CSS屬性,附加div)之外頁面加載。第一個函數完成時執行第二個函數W/O回調參數

問題:頁面加載時,有一個空的<div id="priceinfo"></div>。在頁面的其他地方,有一個<a href="javascript:RequestPriceInfo()" id="requestPrice"><img ...></a>。在RequestPriceInfo()內部,該功能根據頁面上的某些表單字段值將HTML輸出到div#priceinfo。它還附加一個「訂單」按鈕(實際上它不是一個按鈕,而是嵌套在錨標籤中的圖像)。我試圖使用JQuery的attr()函數更改「按鈕」圖像的源代碼。

進度:無。我嘗試過使用$('a#requestPrice').click(function() {...});,但它不能改變圖像的來源,我推測因爲當點擊a#requestPrice並且我的函數運行時,內容還沒有立即加載到頁面上。我需要一種方法來告訴RequestPriceInfo()何時被觸發並完成,但RequestPriceInfo()上沒有回調參數,我無法訪問腳本來修改它並添加一個。

潛在有用信息:有一個變量priceRequested,它在RequestPriceInfo()運行時從false更改爲true。雖然我沒有意識到這個解決方案將會很優雅,但使用Object.prototype.watch()來監控這個變量似乎不合理,但我已經沒有想法。

如何檢測RequestPriceInfo()何時完成執行我的功能而不編輯添加回調參數的功能?

+0

RequestPriceInfo()是做什麼的?這是一個Ajax電話嗎?攔截AJAX調用 – charlietfl

回答

1

怎麼樣使用CSS ...你的腳本可以添加一個類到<div id="priceinfo"></div>,就像也許<div id="priceinfo" class="newButton"></div>。然後,在CSS中,您將隱藏img爲#priceInfo.newButton並插入您的新圖像作爲錨點的背景圖像。

+0

非常感謝!這是一個完美的解決方案。 –

1

這裏有一種方法

var oldRequestPrice = RequestPriceInfo; 
RequestPriceInfo = function(){ 
    oldRequestPrice(); 
    // Function completed, handle here 
} 

編輯

由於這個問題似乎暗示RequestPriceInfo是一個異步API調用,來看看這個問題:Add a "hook" to all AJAX requests on a page

這將跟蹤所有Ajax請求都發生在頁面上。你可以挑選出你需要的一個,然後在你的功能/代碼上取得成功。

+0

仍然假定它是同步的。功能的名稱幾乎意味着一個'請求' – charlietfl

+0

我想如果它是異步的,OP可以相應地改變函數(通過添加'.then'或通過回調到'oldRequestPrice ') –

相關問題