当前位置: 首页 > 知识库问答 >
问题:

尝试加载mapbox时获取错误消息

张财
2023-03-14
mapboxgl.accessToken = 'xxxxxxxx';

var map = new mapboxgl.Map({
  container: 'map', // container ID
  style: 'mapbox://styles/mapbox/streets-v11', // style URL
});
doctype html
html
  head
    block head
      meta(charset='UTF-8') 
      meta(name='viewport' content='width=device-width, initial-scale=1.0')
      link(rel='stylesheet' href='/css/style.css')
      link(rel='shortcut icon', type='/image/png' href='/ img/favicon.png')
      link(rel='stylesheet', href='https://fonts. googleapis.com/css?family=Lato:300,300i,700')
      title Natours | #{title} 


  body
      //- HEADER 
      include _header

      //- CONTENT
      block content
        h1 this is a placeholder heading

      //- FOOTER
      include _footer
      
      script(src='/javascript/mapbox.js')

拒绝加载脚本'https://api.mapbox.com/mapbox-gl-js/v2.1.1/mapbox-gl.js',因为它违反了以下内容安全策略指令:脚本-src'自己'。请注意,没有显式设置脚本-src-elem,因此脚本-src被用作后备选项。

共有3个答案

狄德泽
2023-03-14

这个特殊的错误是一个CSP错误,我个人已经回答了git回购以及udemy讲座。.尽管如此,这里它再次为Stackoverflow版本:)

将以下代码添加到app.js

app.use((req, res, next) => {
  res.setHeader(
    'Content-Security-Policy',
    "script-src  'self' api.mapbox.com",
    "script-src-elem 'self' api.mapbox.com",
  );
  next();
});
敖子安
2023-03-14

针对@Veera最初的问题,相信你在选修课程时遇到过这个问题:Node.js、Express、MongoDB

如前所述,它是一个CSP内容安全策略,防止浏览器从不支持的来源加载内容(图像、脚本、视频等)。

您可以通过在项目中添加api.mapbox.com作为受支持的源来解决此问题。下面的代码是我的路由器文件,用于处理使用Mapbox的路由。

const express = require('express');
const viewController = require('../controllers/viewController');

const CSP = 'Content-Security-Policy';
const POLICY =
  "default-src 'self' https://*.mapbox.com ;" +
  "base-uri 'self';block-all-mixed-content;" +
  "font-src 'self' https: data:;" +
  "frame-ancestors 'self';" +
  "img-src http://localhost:8000 'self' blob: data:;" +
  "object-src 'none';" +
  "script-src https: cdn.jsdelivr.net cdnjs.cloudflare.com api.mapbox.com 'self' blob: ;" +
  "script-src-attr 'none';" +
  "style-src 'self' https: 'unsafe-inline';" +
  'upgrade-insecure-requests;';

const router = express.Router();

router.use((req, res, next) => {
  res.setHeader(CSP, POLICY);
  next();
});

router.route('/').get(viewController.getOverview);
router.route('/tour/:slug').get(viewController.getTour);
router.route('/login').get(viewController.getLoginForm);

module.exports = router;
高云瀚
2023-03-14

我今天碰到了这个问题。我知道你现在可能已经得到了回答。但下面还是你的答案:归功于东林-

https://www.udemy.com/course/nodejs-express-mongodb-bootcamp/learn/lecture/15065656#questions/12020720

发送CSP头以允许从mapbox加载脚本。样本如下:

exports.getTour = catchAsync(async (req, res, next) => {
  const tour = await Tour.findOne({ slug: req.params.slug }).populate({
    path: 'reviews',
    fields: 'review rating user'
  });
  res
    .status(200)
    .set(
      'Content-Security-Policy',
      "default-src 'self' https://*.mapbox.com ;base-uri 'self';block-all-mixed-content;font-src 'self' https: data:;frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src https://cdnjs.cloudflare.com https://api.mapbox.com 'self' blob: ;script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests;"
    )
    .render('tour', {
      title: `${tour.title} Tour`,
      tour
    });
});
 类似资料:
  • 问题内容: 我在.each循环内有以下ajax调用,该调用从服务器加载多个.swf文件: 除IE之外,此功能在所有浏览器上都具有吸引力。有些.swf文件已加载,有些则没有。 我收到的错误如下: 由于错误c00ce514,无法完成操作。 我搜索了这个错误,发现这是由于字符集问题或类似的问题引起的;有些人提供了有关html / xml文件的解决方案,但是我不确定如何为.swf文件修复此问题。有任何想法

  • 一段时间以来,我一直在使用Maven和Vaadin 6开发Java应用程序。 我现在需要添加一个附加组件(Vaadin calendar 1.3.0-适用于Vaadin 6)。 我已经在我的pom.xml文件中添加了maven依赖和存储库,正如所附链接上建议的那样,Maven确实下载了我的依赖jar文件,它位于WEB-INF/lib目录中。 但是,当我尝试加载加载页时,我得到以下错误消息(在浏览器

  • 我刚刚用,它安装在 问题是,如果我试图用获取它的版本,我会收到一个权限被拒绝的错误。 <代码> 位于路径中 和没有结果,因为找不到它。 如果重新安装:

  • 我试图access_token使用这里的说明developers.google.com/accounts/docs/OAuth2InstalledApp(我已经非常努力地遵循),但继续redirect_uri_mismatch错误。我做错了什么? 首先,我使用控制台创建一个已安装的应用程序/其他( 本机应用程序的客户端ID 客户端ID…客户端机密…重定向URI 使用浏览器成功获取授权码 https

  • 我已经找到了这个已经帮了我的忙,但是在我的代理中添加了这样的标题之后。js公司: 在fetch()中,我还添加了标头以确保其正常工作: 我仍然收到错误:TypeError:“尝试获取资源时出现NetworkError。” <代码>此。setState({contacts:data})应该存储由后端Java程序交付的JSON对象。JSON对象位于localhost:8080/api,只是字符串 我的

  • 尝试连接到SQL服务器2014时出错。我使用JRE7和sqljdbc4-4.0.jar 以下是我的java代码: 以下是完整的堆栈跟踪: JAVAext.dirs:C:\Cisco\CallStudio\eclipse\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext-com。微软sqlserver。jdbc。SQLServerException:驱动程序无法使用安全