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.