2016-09-21 45 views
3

我在Chrome專用的web應用程序中有以下代碼,這個應用程序一直工作良好,附加的聽衆被解僱了,並且引發了跟蹤。Node.dispatchEvent(new CustomEvent('click'))不再觸發錨,因爲Chrome v53

const id = document.getElementById('me'); 
 
id.addEventListener('click', e => console.log('clicked', e), false); 
 
const cancelled = !id.dispatchEvent(new CustomEvent('click')); 
 
if (cancelled) { 
 
    console.log("canceled"); 
 
} else { 
 
    console.log("not canceled"); 
 
}
<a id="me" href="https://jsfiddle.net/">xxx</a>

但隨後由於鉻V53的,它不再工作時,它會觸發一個附加事件,但不再觸發並遵循錨?

我已經更改了代碼,並且此方法仍然有效。

const id = document.getElementById('me'); 
 
id.addEventListener('click', e => console.log('clicked', e), false); 
 
const evt = document.createEvent('MouseEvents'); 
 
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
 
const cancelled = !id.dispatchEvent(evt); 
 
if (cancelled) { 
 
    console.log("canceled"); 
 
} else { 
 
    console.log("not canceled"); 
 
}
<a id="me" href="https://jsfiddle.net/">xxx</a>

我試圖在Firefox V48的片段,並有相同的結果,雖然該應用程序就不會在Firefox上運行。

有一些規範已更改,我試圖尋找答案,但一直未能找到原因?

+0

我沒有看到與此相關的特定於M53的變化,你確定這不是M52,M51,或類似的? –

+0

它可能是,我不知道更新之前的版本是什麼,並假定它是V52,但它可能在此之前。我相信所有人都在工作很長時間,即使這不是正確的代碼和行爲。 – Xotic750

+1

調度不受信任的事件在M53中關閉(控制檯中出現警告,請參閱https://www.chromestatus.com/features/57188​​03933560832和https://crbug.com/520519(這會影響我的應用程序在Chrome上在Android和DevTools中的設備模擬 - 無法打開下拉選擇)(它已經在IE和FF,鉻決定也阻止它) –

回答

3

clickMouseEvent,而不是CustomEvent。如果你使用new MouseEvent('click'),它可以工作。

大概是一個錯誤修正,因爲CustomEvent不應該首先觸發鏈接。

使用new MouseEvent而不是new CustomEvent

const id = document.getElementById('me'); 
 
id.addEventListener('click', e => console.log('clicked', e), false); 
 
const cancelled = !id.dispatchEvent(new MouseEvent('click')); 
 
if (cancelled) { 
 
    console.log("canceled"); 
 
} else { 
 
    console.log("not canceled"); 
 
}
<a id="me" href="https://jsfiddle.net/">xxx</a>

+1

謝謝你,這完美的作品。但是,它一定是一個最近的錯誤修正(使用最後一個版本)我會在計時器到期後立即接受。 – Xotic750