js or jq 监听事件

吃益达的人 发布于 2016/10/10 16:54
阅读 465
收藏 0

如题 想实现js 或者jq监听某一个元素

需求大概是这样  网站上的广告是异步加载的  我想在他加载完成之后 把他a标签的链接改掉

我目前的做法是写了好几个setTimeout 

请问有什么更好的方法实现吗

加载中
0
wuyiw
wuyiw

用MutationObserver监听广告节点的变化:

https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver

注意浏览器兼容性.


如果因为浏览器兼容性不能用, 那就考虑从ajax事件入手

1, 如果他用的是jquery的ajax, 那就用

http://api.jquery.com/ajaxComplete/

这个监听ajax完成事件然后通过url判断是不是广告的ajax完成了, 这样比较简单.

2, 如果用的是原生的XMLHttpRequest, 那就要改XMLHttpRequest了, 大概这样子

var oldOpen = XMLHttpRequest.prototype.open
XMLHttpRequest.prototype.open = function (method, url) {
    var xhr = this
    if (url.indexOf('...') > -1) { // 判断是否广告ajax
        this.addEventListener('readystatechange', function() { // 状态改变
            if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { // 判断ajax完成了
                // drop_ad_href
            }
        })
    }
    oldOpen.apply(this, arguments) // 执行原open方法
}

这里也要注意浏览器兼容性(比如老版本IE是attchEvent而非addEventListener)


0
跳不动的马小跳
那为什么不直接在加载完广告之后调用修改标签链接的事件呢?
吃益达的人
吃益达的人
回复 @跳不动的马小跳 : 广告是第三方平台的 类似百度联盟
跳不动的马小跳
回复 @吃益达的人 : 或许可以在你想修改的那个a标签上绑定点击事件跳转到你要的链接
跳不动的马小跳
回复 @吃益达的人 : 你广告是用ajax异步加载的么?如果是,不能在ajax执行返回结果之后在调用修该链接的方法么?还是有什么特别的原因不能把方法放在加载广告的事件里么
吃益达的人
吃益达的人
不确定多久加载完广告
0
AeroZen
AeroZen
为什么不做回调呢?
吃益达的人
吃益达的人
第三方平台的广告
0
AeroZen
AeroZen
你可以用jquery判断DIV内的广告图片是否加载完毕,如果加载完毕,则移除A事件
吃益达的人
吃益达的人
尝试过这种方法 onload判断 无效
0
跳不动的马小跳
dom元素绑定点击事件,不知道这样行不行
var a = $("a")//广告加载完之后应该有个div吧,然后可以通过选择器获取到你想要修改的元素,
a.on('click',function(){
//修改a标签链接
})
吃益达的人
吃益达的人
好我试试
返回顶部
顶部