2010-07-18 3 views

ответ

109

Вы можете отправить сообщение , хотя это не то же самое, что реальный щелчок. Например, он не может использоваться, чтобы обмануть междоменный iframe-документ, считая, что он был нажат.

Все современные браузеры поддерживают document.elementFromPoint и HTMLElement.prototype.click(), так как по крайней мере IE 6, Firefox 5, любая версия Chrome и, возможно, любая версия Safari, о которой вы, вероятно, захотите. Он будет даже последующие ссылки и представить формы:

document.elementFromPoint(x, y).click(); 

https://developer.mozilla.org/En/DOM:document.elementFromPoint https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click

+5

Это потрясающе! Именно то, что я искал !!! = O – RadiantHex

+0

Работает ли он с IE и WebKit? – RadiantHex

+1

@RadiantHex: да, на самом деле IE был первым, кто его реализовал, и он возвращается к IE6. Реализации Chrome, Firefox и Safari 5 прекрасны, но Safari 4 и Opera неверны (хотя и работоспособны). См. Http://www.quirksmode.org/dom/w3c_cssom.html#documentview. –

1

По соображениям безопасности вы не можете перемещать указатель мыши с помощью javascript и не имитировать клик с ним.

Что вы пытаетесь достичь?

+0

@Aicule: спасибо, что сообщили мне! Я добавлю немного информации на вопрос. Я просто экспериментирую, ничего действительно результативного =) – RadiantHex

+1

В Chrome и Safari вы можете запустить клик в определенной позиции x, y. Вот как работает [эта демонстрация] (http://thdoan.github.io/magnify/demo-map.html). Firefox - это единственный браузер, где он терпит неудачу, поэтому, возможно, это специальная политика безопасности для Firefox. – 10basetom

+0

Истина заключается в следующем: 'createEvent()' + 'initMouseEvent()' – Valer

45

Да, вы можете имитировать щелчок мыши, создав событие и диспетчеризация его:

function click(x,y){ 
    var ev = document.createEvent("MouseEvent"); 
    var el = document.elementFromPoint(x,y); 
    ev.initMouseEvent(
     "click", 
     true /* bubble */, true /* cancelable */, 
     window, null, 
     x, y, 0, 0, /* coordinates */ 
     false, false, false, false, /* modifier keys */ 
     0 /*left*/, null 
    ); 
    el.dispatchEvent(ev); 
} 

Остерегайтесь с помощью click метод на элементе - он широко внедрен, но не является стандартным и не будет выполняться, например, PhantomJS. Я предполагаю, что реализация jQuery .click() делает правильные вещи, но не подтвердила.

+0

Сохранял меня из беспорядка. Мой первоначальный метод не удался, но этот пришел на помощь, спасибо. – iChux

+3

plus1 для не использования jQuery. В отличие от принятого ответа, этот вопрос отвечает на вопрос. – tomekwi

+1

Это намного эффективнее, чем '' .click() '' –

18

Это всего лишь torazaburo's answer, обновленный для использования объекта MouseEvent.

function click(x, y) 
{ 
    var ev = new MouseEvent('click', { 
     'view': window, 
     'bubbles': true, 
     'cancelable': true, 
     'screenX': x, 
     'screenY': y 
    }); 

    var el = document.elementFromPoint(x, y); 

    el.dispatchEvent(ev); 
} 
Смежные вопросы