【问题标题】:Catch all browser events likely to redirect/open new browser捕获所有可能重定向/打开新浏览器的浏览器事件
【发布时间】:2009-07-15 11:36:14
【问题描述】:

我需要一个页面上的 JavaScript,它可以在我点击某物时捕获事件,并且该点击可能导致重定向、在新窗口中打开等。

由于链接有时不是直接打开新窗口,它们调用 JavaScript 函数(window.opendocument.location.href)。有没有可能我可以抓住他们并编辑网址。

【问题讨论】:

  • 您是否找到了一个很好的解决方案,可以捕获所有内容,而不仅仅是点击?
  • @Domi,不,但你可以做一个替代的解决方案:使用观察者模式就像主干.js 并为 document.location.href、window.open 等创建观察者,并实现以下建议解决方案。
  • 如何观察变量?您的意思是使用setInterval 进行脏检查?我已经检查过了,用Object.defineProperty 覆盖它是行不通的。

标签: javascript dom-events


【解决方案1】:

您可以为 document.body 分配一个 onclick 处理程序,并使用 event.target 检测哪个元素已被点击,这基本上是在做事件委托。

通过拥有事件目标,你可以了解被点击元素的所有信息,比如它的标签名,以及所有的元素属性:

document.body.onclick = function(event){
  if (event.target.tagName == 'A'){ //Handle anchors
    var url = event.target.href;
    // redirect, window.open, or whatever you want...

    event.preventDefault();
  }
}

【讨论】:

  • 谢谢。如果那里有一个javascript函数可以进行一些计算并使用window.open或window.location.href怎么办。有没有办法捕捉到这样的东西?
【解决方案2】:

您可以使用链接的click 事件来实现此目的。如果你使用的是 jQuery,它可能是这样的:

$("a").click(function() {
    /* Open the site in a new window */
    var strNewURL = "http://example.com/redirect.php?id=" + this.href;
    window.open(strNewURL, "myFancyNewWindow");

    /* Stop the browser following the original link */
    return false;
});

这显示了如何在 href 前面添加一个额外的位,以通过您自己的重定向脚本将用户发送到那里。

如果您只想对某些链接执行此操作,您可以优化选择器,例如$("#content a").

另请参阅:https://developer.mozilla.org/En/DOM/Window.openhttp://docs.jquery.com/Events/click

【讨论】:

  • 我重写了这个问题。我觉得我没有正确解释。希望这可以很好地理解我到底在寻找什么。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多