我将RecruiterBox帐户中的工作机会整合到一个风格化程度很高的公司网站中,我需要挂钩点击事件以添加其他功能和动画。一旦内容加载,我就可以这样做。
我面临的挑战是如何确定作业列表何时完成加载,因为它是由第三方脚本异步加载的。
用于加载工作机会的JS代码段首先在DOM中添加几个<script>
标记,以便在第三方JS中加载。然后执行JSON数据的异步加载,通过Mustache模板将其呈现到DOM中。
我可以通过向父元素添加'DOMSubtreeModified'
事件侦听器来检测DOM何时被操作,但我无法检测到DOM操作何时完成。
我也知道获取JSON的GET的URL所以我的问题变成了我可以添加一些形式的监听器来告诉我这个GET操作何时完成?这甚至可能吗?
修改
该调用是一个Ajax调用,但由于它在第三方加载的脚本中,我无法控制它。也许更好的问题是我可以为给定URL的http响应挂钩或添加事件监听器,无论脚本是我的还是第三方?
这里是RecruiterBox脚本的摘录,如果它有帮助,它会拨打电话:
var loadOpenings = function(oid, callbacks) {
var url, source;
url = API_HOST + (oid == 'all' ? '/widget/clientid/openings/'.replace("clientid",CLIENT_ID)
: '/widget/clientid/opening/openingid/'.replace("openingid",oid).replace("clientid",CLIENT_ID) );
_rbox.xhr.request({
url: url,
method: 'GET'
}, function(data) {
data = JSON.parse(data.data);
var i, len, ret;
if(oid == 'all') {
for(i=0, len=data.length; i<len; i++) {
updateOpeningFields(data[i]);
}
ret = openings;
}
else {
updateOpeningFields(data);
ret = openings.get( oid );
}
callbacks.success && callbacks.success(ret);
}, function(e) {
callbacks.error && callbacks.error(e);
});
};
以下两个要点列出了第三方脚本加载器加载的完整脚本。上面的函数位于rbox_api.js中。注意:为了安全起见,我在此脚本中对id和公司信息进行了模糊处理。
https://gist.github.com/jujudigital/d63efbad3032ec4ddd3d#file-rbox_impl-js https://gist.github.com/jujudigital/2aa852a35eedd3c2ce3a#file-rbox_api-js