背景:我正在通过VWO为网站运行A / B测试。我可以编写一个在页面加载时运行的脚本,但我无法访问任何网站的预先存在的脚本或以任何方式更改其代码,除了JS中的“覆盖”(例如删除div,更改CSS属性,附加div)页面加载。
问题:页面加载时,空<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 :(得分:1)
这是单程
var oldRequestPrice = RequestPriceInfo;
RequestPriceInfo = function(){
oldRequestPrice();
// Function completed, handle here
}
修改
由于问题似乎暗示RequestPriceInfo
是异步API调用,请查看此问题:Add a "hook" to all AJAX requests on a page
这将跟踪页面上发生的所有Ajax请求。你可以选择你需要的那个,并在成功时激活你的功能/代码。
答案 1 :(得分:1)
使用CSS怎么样...你的脚本可以向<div id="priceinfo"></div>
添加一个类,就像<div id="priceinfo" class="newButton"></div>
一样。然后,在CSS中,您将隐藏#priceInfo.newButton
的img并将新图像作为锚点的背景图像插入。