2015-09-25 86 views
7

我有一些動態的JavaScript,創建元素,與一個單擊事件元素處理程序...該腳本是從另一個域包含。firefox - 無法接收事件動態javascript

但是,在運行時,Firefox會給出安全警告並且不會處理單擊事件(Chrome可以正常工作)。

下面

<!DOCTYPE html> 
<html> 
<head><meta charset="UTF-8"></head> 
<body> 
<h2 id="headertitle">TEST</h2> 
<br/> 

<script type="text/javascript" src="somewhereelse.com/script.js"> 
</script> 
</body> 
</html> 

JavaScript中的簡化版本,包括:

document.getElementById("headertitle").insertAdjacentHTML('beforeBegin', 
      "<button value='TEST' onclick='clickHandler(this)' >Button</button>"); 

function clickHandler(evt){ 
    alert("clicked"); 
} 

警告消息:

安全包裝中無法獲得財產上的特權 Javascript對象不確定。通過exposedProps將特權對象暴露給 不受信任的內容支持正在逐步刪除 - 改爲使用WebIDL綁定或Components.utils.cloneInto。請注意, 只有來自給定全局對象的第一個被拒絕的屬性訪問將被報告爲 。

回答

-1

我在這裏試過了你的代碼,它在Firefox 50.1.0上可以正常工作。 =/

但是,我強烈建議您使用JQuery來處理由動態創建的元素觸發的事件。 JQuery以不同的方式處理DOM,它是跨瀏覽器的,它只是針對這種情況而設計的。它可以解決你的問題。 = d

試着改變你的HTML

<!DOCTYPE html> 
<html> 
<head><meta charset="UTF-8"></head> 
<body> 
<h2 id="headertitle">TEST</h2> 
<br/> 
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 
<script type="text/javascript" src="somewhereelse.com/script.js"> 
</script> 
</body> 
</html> 

和你的JS代碼

document.getElementById("headertitle").insertAdjacentHTML('beforeBegin', 
      '<button value="TEST" class="clickable" id="btn1">Button</button>'); 

$('.clickable').on('click', function() { 
    alert($(this).attr('id') + ' was clicked'); 
}); 

這應該使它的工作! 乾杯! =)

+0

import jQuery?只是爲了解決它?你在開玩笑嗎? – jno

+0

好吧,我懷疑他只會使用它一次。而且,如果他正在使用動態html元素,那麼YES,我強烈建議他使用JQuery來處理它們。 JQuery基本上是用於實時DOM處理和交叉瀏覽。 另外,這是簡單的方法,並會讓他開始,他可以從那裏演變。我相信人們很聰明! =) 此外,我更願意幫助他得到他需要做的任何事情,而不是批評傲慢的人試圖幫助,而沒有提供任何解決問題的辦法:這樣做似乎太少了。 = P – Vinas