我在寫插件時用到了 onresize 事件,在反復地測試后發現該事件在 Chrome 及 Opera(內核基本與 Chrome 相同,以下統稱 Chrome)瀏覽器打開時就會執行,這種情況也許不能算作 bug 吧,估計他們的工程師認為瀏覽器打開時也算窗口發生了變化。解決問題之前我搜索了相關內容,確實有關於 Chrome 的 onresize 的問題,但跟我遇到的問題還有很大不同。我把這個問題抽象為以下函數:
function init() { alert('a'); window.onresize = function() { init(); } } init();
大家可以自行測試,在 Chrome 中會彈出兩次 alert,而其它瀏覽器只會彈出一次 alert,因為 Chrome 瀏覽器打開時就執行了 onresize 事件。所以現在要解決的問題就是如何讓 init() 函數在 Chrome 瀏覽器打開時只執行一次。
這個問題看似容易卻很棘手。因為只有打開瀏覽器時才會有這個 bug,某種程度上屬於無關緊要的問題。原本打算放掉這個問題,但是我是追求完美的人,遇到問題總會想盡辦法解決。容我感慨一句,很多問題就像腦筋急轉彎,轉個彎就能解決。好了,廢話不多說,直接貼代碼,按照我之前的做法,我還是先將代碼折疊起來,請大家以自己的方式解決一下,或許比我的方法更好,歡迎留言。

function init() { var width = window.innerWidth; alert('a'); window.onresize = function() { var width2 = window.innerWidth; if (width != width2) { init(); } } } init();
我想我在解決這個問題時耍了一點小聰明,至少想要從根本上也就是在 Chrome 瀏覽器打開時就禁止 onresize 事件是不可能的。所以我加了一個窗口寬度作為對比,這樣就可以保證 init() 函數只執行一次。在這里還有一個小問題,我最初用的是高度對比,但是不知道為什么兩個高度值存在偏差,大家可以將寬度改為高度測試一下,希望知道這個小問題的朋友告訴我。
最后貼一下我的插件地址 https://github.com/nzbin/CardShow,我在之前的文章中也介紹了該插件中其它的一些問題,感興趣的朋友可以點此查看。