CORS策略阻止了对来自"null"的映像的访问

Den*_*nov 48 javascript local cors openlayers-3

我在OpenLayers 3中有JavaScript应用程序,我的基础层是从本地磁贴创建的.我只在我的电脑上工作所以我不知道为什么我有CORS错误.

    var newLayer = new ol.layer.Tile({
    source: new ol.source.OSM({
        url: 'E:/Maperitive/Tiles/vychod/{z}/{x}/{y}.png'
    })
});
var schladming = [21.6187, 48.7327]; // longitude first, then latitude
// since we are using OSM, we have to transform the coordinates...
var schladmingWebMercator = ol.proj.fromLonLat(schladming);

var map = new ol.Map({
    layers: [
        newLayer
    ],
    controls: [],
    target: 'mapid',
    view: new ol.View({
        center: schladmingWebMercator,
        zoom: 10,
        minZoom: 10,
        maxZoom: 14
    })
});
Run Code Online (Sandbox Code Playgroud)

控制台的错误消息:

CORS策略阻止了file:///E:/Maperitive/Tiles/vychod/10/573/352.png 从原点访问映像null:响应无效.null因此不允许原点访问.

当我双击图像URL时,图像被打开.有什么想法有什么不对?我之前从未遇到过这个错误.

Mic*_*sen 27

对于本地开发,您可以使用简单的 Web 服务器来提供文件。

安装 Python 2.7 后,进入项目所在的文件夹,例如cd my-project/. 然后使用python -m SimpleHTTPServer它可以使index.htmlJavaScript 文件在localhost:8000.

编辑:对于 Python 3 使用python -m http.server

  • 在 Windows 上,它已重命名为:“python -m http.server” (2认同)
  • 不,它被重命名为python3。 (2认同)

Jer*_*art 24

您遇到了CORS错误.

尝试使用本地文件系统访问您的文件在您的情况下不起作用.

Origin为null,因为它是您的本地文件系统.你能举办这个png文件吗?

建议:

将这些文件托管到AWS S3存储桶.然后您可以使用http协议而不是file协议.或者在本地系统上设置一些http服务器,如果要将所有内容保存在本地,请使用httplocalhost来提供文件.

更多阅读:

CORS如何工作

  • 那么我自己创建并从本地主机获取的图像(如“file:///”)现在对我构成威胁了吗?标准委员会疯了吗? (33认同)
  • 我认为它更多地是为了保护您免受 USB 记忆棒或其他想要在浏览器中运行的类型的恶意代码自动启动到浏览器中的东西的影响。 (2认同)
  • 但这并没有真正解决[防止 JS 病毒]的问题。如果你的工作是制作恶意软件,base64 编码图像(实际上是任何二进制文件)并将所有内容构建到单个 html 块文件中实际上非常简单,那么你就不再需要 CORS 块了。Webpack 非常适合这类东西。我觉得这一切只会让爱好者的生活变得困难,同时并没有真正阻止任何真正意图编写 JS 恶意软件的人,但我可能在这里没有看到明显的东西。 (2认同)

小智 10

尝试绕过 CORS:

对于 Chrome:编辑快捷方式或使用 cmd:C:\Chrome.exe --disable-web-security

对于 Firefox:打开 Firefox 并在 URL 栏中输入 about:config。搜索:security.fileuri.strict_origin_policy 设置为 false

  • --disable-web-security 对本地文件不起作用 (4认同)
  • 这可能会成为一个安全问题,尤其是当您在禁用 CORS 的同一浏览器上使用网络时。或者,我听说有人下载单独安装的 chrome 仅用于开发工作。 (3认同)

小智 8

在封面下将有某种形式的URL加载请求.您无法从本地文件系统通过此方法加载图像或任何其他内容.

您的图像需要通过Web服务器加载,因此可以通过正确的http URL访问.


小智 8

通过向OpenLayers OSM源提供crossOrigin:null实际解决了这个问题:

var newLayer = new ol.layer.Tile({
source: new ol.source.OSM({
    url: 'E:/Maperitive/Tiles/vychod/{z}/{x}/{y}.png',
    crossOrigin: null
    })
});
Run Code Online (Sandbox Code Playgroud)

  • 请你能提供更多细节吗? (3认同)
  • 似乎比预期的解决方案更聪明。尽管如此,还是不​​错的工作。 (2认同)

Dam*_*mer 6

对此的解决方案是为您的代码提供服务,并使其在服务器上运行,您可以使用 chrome 的网络服务器来轻松地为您的页面提供服务。


小智 6

为了解决你的错误,我提出了这个解决方案:在 Visual Studio 代码编辑器上工作并在编辑器中安装实时服务器扩展,它允许你连接到本地服务器,对我来说,我把图片放在我的工作区 127.0.0.1:5500/工作区/数据/pict.png,它的工作原理!

  • Great it worked, just installed live server extension, then opened home page html file in the code editor and typed on Go Live in the status bar of visual studio code editor and done got the website worked. (2认同)

小智 5

如果在 vs code 中使用 vs code,只需安装实时服务器并启用它,它解决了我的问题。