因爲我不能將屏幕截圖添加到評論中,所以我只能將其作爲答案,但我沒有看到這種行爲。
- 我確認在
window
上不存在window.uuid
變量。
- 我添加事件監聽器,並獲得預期的第一個
undefined
註冊它。
- 然後我點擊出標籤(第一
visibilitychange
事件)的,並獲得第二undefined
和window.uuid
設置的值,無論是從監聽記錄。
- 我重新點擊標籤,發射第二個
visibilitychange
事件,並獲取uuid記錄兩次。
- 鍵入
window.uuid
進入控制檯返回全局uuid值。
我懷疑的混亂可能會在你安裝事件偵聽器的方式鋪設。
編輯:
具有以下測試頁:
<html>
<head>
<script>
window.addEventListener("visibilitychange", function(e) {
console.dir(window);
console.log(window.uidd)
window.uidd = window.uidd || (new Date).getTime() + Math.random()
console.log(window.uidd)
})
</script>
</head>
<body></body>
</html>
我確實看到了這種行爲。您需要使用this.uuid
而不是window.uuid
訪問該房產,即使簡單地輸入window
也會顯示.uuid
屬性。
奇怪的是,當我用這個靜態分配更換您的測試:
window.addEventListener("visibilitychange", function(e) {
window.foo = window.foo || "bar";
})
它確實工作,我可以直接在控制檯中看到的window.foo
預期值。我也很好奇,asked the Chrome team。如果有人不直接回答,我會更新此答案。
因爲你第一次使用console.log,它是未定義的......如果你的事件監聽器只在第二行給它賦值。你爲什麼期望它不是'undefined'? – msanford
@msanford它不是我的問題 –
當我測試你的代碼示例時,最後一個字符串不是'undefined'。是否有代碼缺失? – msanford