gpt4 book ai didi

javascript - 闭包库 ondevicemotion 从未触发

转载 作者:行者123 更新时间:2023-11-28 08:00:26 26 4
gpt4 key购买 nike

亲爱的 Javascript 程序员,

Google 的 Closure Library 总是能让人抓狂。我希望您能在这个问题上帮助我:

我想通过 Closure 库中的函数内的 javascript 捕获 ondevicemotion 事件。如果没有闭包,我从本页获取的以下代码一切正常(感谢作者):http://www.peterfriese.de/how-to-use-the-gyroscope-of-your-iphone-in-a-mobile-web-app/

以下代码片段显示了“我的”代码:

if (window.DeviceMotionEvent != undefined) {
console.log("DME");
window.ondevicemotion = function(e) {
console.log("ODM");

// handle events like e.rotationRate
...
}
}

这在独立的 html 页面中完美运行。两个 console.log 都会被触发。

相比之下,Closure 似乎在 window.ondevicemotion = function(e) { 方面存在问题,因为控制台记录“DME”而不是“ODM”。没有编译器警告或错误。

有人也认识到这样的问题吗?遗憾的是,我不知道为什么 Closure 表现得如此愚蠢(更可能是如此愚蠢)。 ;-)

感谢您的阅读!任何帮助表示赞赏!

最佳答案

在 ADVANCED_COMPILATION 中运行时,闭包编译器为我最小化并混淆了 window.ondevicemotion,所以我假设这也是您的问题。有两种方法可以解决这个问题:

1。使用方括号表示法来设置/访问属性。

闭包计算机不会重命名通过括号表示法引用的任何属性。以下内容不应被混淆(尽管它可能会被重写为 window.ondevicemotion):

window['ondevicemotion'] = function(event) { ... }

2.使用extern让编译器知道不要重命名此属性。

与上面的情况类似,闭包编译器接受提示并且不会重写该属性,保持原样。然而,这有一个很好的好处,那就是为您提供一些类型检查,因为您正在为闭包编译器定义 extern 的签名:

/**
* @param {goog.events.Event} event
*/
window.ondevicemotion = function(event) {};

使用哪一个最终由您决定。在这种情况下,我很可能会选择第二个选项,并且只有在由于某种原因无法使用外部程序时才返回第一个选项。

关于javascript - 闭包库 ondevicemotion 从未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25489599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com