从外部访问保护jQuery功能

man*_*an1 8 html javascript security jquery web-applications

我在一个应用程序中使用jQuery,该应用程序通过.click()绑定来注册用户点击以执行给定的操作,并且我希望此功能通过用户mousedown 可用.我的一位朋友今天指出,可以从Firebug中的javascript终端(或类似的东西)运行$(element).click(),并实现与点击元素相同的功能 - 我想要的东西防止.关于如何做到这一点的任何想法?感谢您的输入.

jAn*_*ndy 10

简答:不,你真的无法阻止它.

答案很长:任何像a click event这样的事件都必然会被这样称呼Event handlers.这些处理程序functions在给定事件发生时执行.因此,如果您单击某个元素,您的浏览器会检查是否有任何event handlers绑定它,如果是这样的话fires.如果没有,浏览器将尝试bubble up将事件发送给parent elements,再次检查是否存在event handlers对该类事件的约束......等等.

jQuerys .trigger()方法(如果调用.click()实例,你实际调用的方法)就是做同样的事情.它调用event handlers绑定到特定元素的特定事件.

编辑

可能有一些简单的方法来实现soft detect真正的点击,例如你可能会检查一个真实点击中的toElement属性event object.该属性未设置triggered.但话说回来,你可以很容易地伪造它.trigger().例:

$(document).ready(function() {
  $('#invalid2').bind('click', function(e){
      alert('click\nevent.target: ' + e.toElement.id);
      console.log(e);
  });

  $('#invalid1').bind('click', function(){
      $('#invalid2').trigger({
          type: 'click',
          toElement: {id: 'Fake'}
      });
  });
});?
Run Code Online (Sandbox Code Playgroud)

工作示例:http://www.jsfiddle.net/v4wkv/1/

如果你只是打电话$('#invalid2').trigger('click'),toElement财产不会在那里,因此失败.但正如你所看到的,你可以添加任何东西event object.