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

Bootstrap嵌入DataMap本地正常,GitHub Pages无法显示的问题排查

解决GitHub Pages上Bootstrap Tab中DataMap不显示的问题

我帮你排查了几个关键问题,这应该能解决你的空白页问题:

1. 修复混合内容拦截问题

GitHub Pages强制使用HTTPS加密协议,但你的代码里引入了几个HTTP协议的外部脚本,现代浏览器会自动拦截这些"不安全"的混合内容,导致DataMap依赖的核心脚本加载失败,最终地图无法渲染。

你需要把所有HTTP开头的资源链接改成HTTPS,或者使用无协议的相对链接(//开头,自动适配当前页面的协议):

  • 把http://cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.min.js改成https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.min.js
  • 把http://datamaps.github.io/scripts/0.4.0/datamaps.world.min.js改成https://datamaps.github.io/scripts/0.4.0/datamaps.world.min.js

2. 调整地图初始化时机

当页面加载时,Bootstrap的Tab内容处于隐藏状态(带有fade类),此时直接初始化DataMap会因为元素不可见,无法正确计算容器尺寸,导致地图渲染空白。

正确的做法是:在Tab切换完成(shown.bs.tab事件)时,再初始化对应Tab里的地图,同时用变量存储已初始化的地图,避免重复创建实例。

修改后的完整代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DataMap in Bootstrap Tabs</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    <!-- 修复协议问题 -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/topojson/1.6.9/topojson.min.js"></script>
    <script src="https://datamaps.github.io/scripts/0.4.0/datamaps.world.min.js"></script>
    <script>
        $(document).ready(function () {
            $("#myTab li:eq(0) a").tab('show');
            
            // 存储已初始化的地图,避免重复创建实例
            var initializedMaps = {};

            $('a[data-toggle="pill"]').on('shown.bs.tab', function (e) {
                var targetTabId = $(e.target).attr('href').slice(1); // 去掉链接中的#符号
                // 初始化Section A的地图
                if (targetTabId === 'sectionA' && !initializedMaps.sectionA) {
                    initializedMaps.sectionA = new Datamap({
                        element: document.getElementById('map'),
                        height: 500,
                        width: 500
                    });
                } 
                // 初始化Section B的地图
                else if (targetTabId === 'sectionB' && !initializedMaps.sectionB) {
                    initializedMaps.sectionB = new Datamap({
                        element: document.getElementById('map2'),
                        fills: {defaultFill: "#fa0af0"},
                        height: 500,
                        width: 500
                    });
                }
            });
        });
    </script>
</head>
<body>
<nav>
    <ul class="nav nav-pills center-pills" role="tablist" id="myTab">
        <li><a data-toggle="pill" href="#sectionA">Section A</a></li>
        <li><a data-toggle="pill" href="#sectionB">Section B</a></li>
    </ul>
</nav>
<div class="container">
    <section>
        <div class="tab-content">
            <div id="sectionA" class="tab-pane fade">
                <h2>sectionA</h2>
                <div id="map"></div>
            </div>
            <div id="sectionB" class="tab-pane fade">
                <h2>sectionB</h2>
                <div id="map2"></div>
            </div>
        </div>
    </section>
</div>
</body>
</html>

额外排查小技巧

你可以打开浏览器的开发者工具(按F12),查看**控制台(Console)标签是否有脚本加载失败的报错,以及网络(Network)**标签检查资源的加载状态,这是排查网页渲染问题的常用方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:54:49