【问题标题】:How can I debug which script is trying to use the Geolocation API?如何调试正在尝试使用 Geolocation API 的脚本?
【发布时间】:2016-12-27 00:15:43
【问题描述】:

在我的网站上,我有一堆通过 Google 跟踪代码管理器加载的跟踪器,包括 Google Analytics 和 Chartbeat,以及一堆 DFP 广告。

仅在移动设备上,当有人访问我的网站时,他们会收到“example.com 想使用您的位置”通知,但我无法确定是什么试图访问该信息。

如何使用 Firefox 或 Chrome 来调试正在尝试使用 Geolocation API 的脚本?

【问题讨论】:

    标签: javascript html geolocation google-chrome-devtools firefox-developer-tools


    【解决方案1】:

    Geolocation API 有一个名为 getCurrentPosition 的函数,它就是被调用的函数。

    如果您不知道该调用发生在哪里,因为您有大量代码库,或者它发生在客户端库中,则可能很难找到。

    一种选择是在“源”面板中搜索解决方案。您可以使用快捷键 Cmd + Opt + F (Mac) 或 Ctrl + Shift 来执行此操作 + F (Windows),然后搜索“地理位置”或 API 调用的一部分。您应该会在面板中看到结果列表。

    另一个有用的解决方案是我喜欢调用Debugging JavaScript by Redefining Functions 的方法。这个想法是存储原始函数的副本,覆盖它并注入您的调试逻辑,然后从当前上下文中调用原始函数。

    使用它,我们可以将debugger 语句注入到getCurrentPosition 函数中,这样无论何时调用它,调试器都会中断,您将在DevTools 中获得一个调用堆栈。

    var oldGetCurrentPosition = navigator.geolocation.getCurrentPosition;
    
    navigator.geolocation.getCurrentPosition = function() {
        debugger;
        return oldGetCurrentPosition.apply(this, arguments);
    }
    

    我会在控制台中运行它,最好使用代码片段,以避免在生产中出现这个调试代码。好在逻辑不会破坏原始代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2018-11-15
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 2020-07-20
      相关资源
      最近更新 更多