2014-11-22 81 views
0

我在Firefox 33.0(Ubuntu 12.04)中遇到了這種奇怪的行爲:在代碼中出現一些錯誤之後,所有其他Firefox標籤都沒有顯示任何東西,我需要關閉Firefox並再次打開它。全局變量崩潰firefox

看起來像全局變量(NFilhos和SomaFilhos)沒有正確地存儲在函數之間?調整窗口大小後發生錯誤(因此在resizeCanvas函數中)。我的代碼減少到最低限度:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Is this a bug?</title> 
</head> 
<body onload="start()" onresize="resizeCanvas()" style="overflow: hidden"> 
<canvas id="tree" style="border:1px solid #000000;"> 
Seu navegador não suporta o recurso "canvas" do HTML 5. 
</canvas> 
</body> 
<script> 
var canv = document.getElementById("tree"); 
var ctx = canv.getContext("2d"); 
var NFilhos = []; 
var SomaFilhos = []; 

function start() { 
    alert("start"); 
    SomaFilhos[0] = 10; 
    // ... read text file from server, prepare data... 
    resizeCanvas(); // draws the data the first time 
} 

function resizeCanvas() { 
    alert("resize"); // just to see where I am 
    canv.width = window.innerWidth; 
    canv.height = window.innerHeight; 
    alert("no error"); // just to see where I am 
    NFilhos[0] = SomaFilhos[0]; // error? 
    //alert(NFilhos[0]);    
} 
</script> 
</html> 
+0

我只是修改您的警報()來顯示'SomaFilhos [0]',它顯示爲10沒有問題 – Dinesh 2014-11-22 01:10:14

+0

它在MacOS上在爲我工作的FFX-33,除了所有的變量名神祕葡萄牙語...... – Malvolio 2014-11-22 01:13:41

+0

直接調用一個函數調整大小是一個壞主意(並且在它內部更多地使用'alert' - 使用'console.log'來代替調試輸出) - resize'事件觸發多次在調整窗口大小的過程中。你應該使用一種技術來延遲函數的執行,類似於這裏爲'scroll'事件描述的內容:http://ejohn.org/blog/learning-from-twitter/ – CBroe 2014-11-22 02:01:51

回答

1
<!DOCTYPE html> 
<html> 
<head> 
<script src="//jashkenas.github.io/underscore/underscore-min.js"></script> 
<meta charset="utf-8"> 
</head> 

<body onload="start()" onresize="_.debounce(resizeCanvas(), 200)" style="overflow: hidden"> 
<canvas id="tree" style="border:1px solid #000000;"> 
Seu navegador não suporta o recurso "canvas" do HTML 5. 
</canvas> 
</body> 

你需要去抖事件,所以它不是射擊每毫秒。取決於您的要求,Underscore的節氣門或Underscore的去抖方法是您需要的。

+0

謝謝Elise。我需要在屏幕大小調整後再次繪製我的東西,我如何將我的代碼加入我的代碼中?我沒有明白。 – Rodrigo 2014-11-23 20:51:35

+0

你能幫助我嗎? – Rodrigo 2014-12-21 03:06:36

+0

你濫用onresize事件,這就是爲什麼你的瀏覽器崩潰 – 2014-12-22 02:07:24