You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS13版iPhone SE上Google Maps显示‘无可用影像’问题求助

iOS 13 Safari下Google Maps显示"Sorry, we have no imagery here"的问题排查与解决线索

问题背景

在搭载iOS 13的iPhone SE设备上,使用Safari浏览器运行基于Next.js 13、@googlemaps/react-wrapper v1.1.35开发的页面时,Google Maps会先短暂显示约1秒影像,随后弹出错误提示:"Sorry, we have no imagery here"。该问题在所有地点、所有缩放级别下均会出现,但iOS 14及以上版本设备无此问题。

已知前提:

  • API密钥有效且已启用Maps JavaScript API
  • 问题在稳定网络及HTTPS环境下仍会发生
  • 已添加完整安全策略
  • 降级Maps JavaScript API至3.56可临时解决,但需长期方案

示例代码:

import { Wrapper, Status } from "@googlemaps/react-wrapper";
import React, { useRef, useEffect } from "react";

const render = (status) => {
  if (status === Status.LOADING) return <div>Loading...</div>;
  if (status === Status.FAILURE) return <div>Error loading maps</div>;
  return null;
};

const MyMapComponent = () => {
  const ref = useRef();

  useEffect(() => {
    const map = new window.google.maps.Map(ref.current, {
      center: { lat: -34.397, lng: 150.644 },
      zoom: 14,
    });
  }, []);

  return <div ref={ref} style={{ height: "400px", width: "100%" }} />;
};

const MapWrapper = () => (
  <Wrapper apiKey="YOUR_API_KEY" render={render}>
    <MyMapComponent />
  </Wrapper>
);

const Home = () => (
  <div>
    <h1>My Google Map</h1>
    <MapWrapper />
  </div>
);

export default Home;

可能的解决线索

1. 修复Safari 13的JavaScript语法兼容性

iOS 13的Safari对部分ES6+特性(如可选链?.、空值合并??)支持不完善,项目代码或@googlemaps/react-wrapper内部可能使用了这类特性导致运行异常。可通过Babel配置转译降级语法,确保代码兼容iOS 13环境。

2. 调整地图初始化时机

当前代码中useEffect空依赖数组可能导致地图在DOM未完全就绪时初始化。尝试改用useLayoutEffect,并增加DOM节点及API加载状态的判断,确保初始化时机稳定:

const MyMapComponent = () => {
  const ref = useRef();

  useLayoutEffect(() => {
    // 确保DOM节点存在且Google Maps API已加载完成
    if (ref.current && window.google?.maps) {
      const map = new window.google.maps.Map(ref.current, {
        center: { lat: -34.397, lng: 150.644 },
        zoom: 14,
      });
    }
  }, []);

  return <div ref={ref} style={{ height: "400px", width: "100%" }} />;
};

3. 指定兼容iOS 13的Maps API版本

@googlemaps/react-wrapper默认加载最新版Maps JavaScript API,而新版API可能对iOS 13 Safari存在兼容性问题。尝试通过version参数指定介于3.56和最新版之间的稳定版本(需参考Google Maps API版本日志确认兼容版本):

<Wrapper apiKey="YOUR_API_KEY" render={render} version="3.57">
  <MyMapComponent />
</Wrapper>

4. 检查Safari隐私与安全设置

iOS 13 Safari的跨域资源策略或隐私设置可能阻止地图瓦片加载:

  • 确认内容安全策略(CSP)已允许https://*.googleapis.com、https://*.gstatic.com等域名的资源加载
  • 临时关闭Safari的"阻止跨站跟踪"选项,测试是否恢复正常

5. 查看Safari控制台的详细错误

连接iOS 13设备到Mac,使用Safari开发者工具查看控制台输出,可能存在未捕获的JavaScript异常(如DOM尺寸错误、API异步回调失败等),这些异常可能是导致地图加载中断的根本原因。

内容的提问来源于stack exchange,提问作者pupuza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:37:34