Есть несколько способов остановить событие. Вот решение, которое, я думаю, лучше всего подойдет в вашем случае. Конечно, такая загрузка страниц или ссылок имеет свои недостатки, и мы не будем вдаваться в них слишком глубоко.
Вот полный код: Пример на jsFiddle
Сначала мы отслеживаем клики в пределах нашей целевой поверхности и вызываем функцию, чтобы проверить, является ли это ссылкой. Если мы нажали на ссылку, мы выдадим событие, передающее целевой href.
this.mySurface.clickNullifier = function (e) {
if (e.target && e.target.nodeName == 'A' && e.target.href) {
this.mySurface.emit('href-clicked', { data: { href: e.target.href } })
return false;
}
}.bind(this);
this.mySurface.on('deploy', function () {
// sets up the click function on the surface DOM object
this._currentTarget.onclick = this.clickNullifier;
});
Теперь, когда отслеживаются поверхностные щелчки, мы будем фиксировать любые перехваченные щелчки и загружать их в iFrame, или если локальные ссылки загружают их, используя утилиту loadURL в известном.
this.mySurface.on('href-clicked', function (event) {
console.log(event.data);
// handle your code for the iframe
// not always doable in the case of 'X-Frame-Options' to 'SAMEORIGIN'
loadIframe.call(this, event.data.href);
// or loadURL like here. Needs CORS open on the href server if cross origin
//Utility.loadURL(event.data.href, loadLink.bind(this));
}.bind(this));
function loadIframe(content) {
this.backSurface.setContent('<iframe src="' + content + '" frameborder="0" height="100%" width="100%"></iframe>');
};
Бонус: в примере ссылки выше вы увидите, что событие click по-прежнему запускается на поверхности. В этом можно убедиться, посмотрев журнал консоли.
13.08.2014