2016-02-16 77 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 ') –

相关问题