getJSON 在 chrome 上本地加载 json 数据文件时出错 [重复]

Posted

技术标签:

【中文标题】getJSON 在 chrome 上本地加载 json 数据文件时出错 [重复]【英文标题】:Error with getJSON to load json data file locally on chrome [duplicate] 【发布时间】:2017-11-18 00:11:36 【问题描述】:

我正在开发一个稍后将在 androidios 上启动的跨平台 (html5) 项目,我遇到了 getJSON 在 Chrome 浏览器上从本地 .json 文件加载数据的问题。调用时

jQuery.getJSON("layout.json", this.onLoaded);

我明白了

错误:XMLHttpRequest 无法加载 file:///E:/​​app/layout.json。跨域请求仅支持协议方案:http、data、chrome、chrome-extension、https`

在 jquery-3.2.1.js:9566 是:xhr.send( options.hasContent && options.data || null );

我在网上冲浪寻找解决方案,并想出了这两种在我的情况下不起作用的解决方案:

    在 chrome 上手动启用 access-control-allow-origin 在服务器上上传项目文件

我正在寻找本地加载 json 数据的解决方案。

非常感谢您的帮助!

【问题讨论】:

请从您的项目中添加一些代码示例以获得帮助。 1.使用 HBuilder 这个 Eclipse 克隆 IDE 并在本地 Web 服务器中自动查看本地文件或 2. 将 JSON 线程化为 js 文件并在生产环境中使用时将其改回 @arturkin 这里是代码示例和我得到的错误:jQuery.getJSON("layout.json", this.onLoaded);错误:XMLHttpRequest 无法加载 file:///E:/​​app/layout.json。跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https。 jquery-3.2.1.js:9566 即:xhr.send( options.hasContent && options.data || null ); @YuJiaao 感谢您的意见。问题是我想要一个解决方案,而不是在服务器上甚至在本地运行项目。 插入了作者评论中的代码示例;改进的格式。请澄清:“本地加载”是否意味着加载的页面和加载的文件都是本地的? 【参考方案1】:

我认为没有跨浏览器解决方案,因为它是一种保护用户数据的安全措施,而浏览器的管理员实际上会故意阻止这种情况。在 Chrome 中,您可以在启动时使用--allow-file-access-from-files 选项,但这不是普通用户会接受的,而且(不知何故)没有办法限制仅对某些文件的偏好,因此这又会导致安全问题。

不过,如果您创建 本地 服务器,将您要加载的文件 正在加载文件的页面放在服务器上,这成为可能.这是非常可行的,有许多本地服务器适用于 Android 并且可能适用于其他操作系统。

PS 你也可以创建一个浏览器扩展。由于当今许多浏览器(Opera、Vivaldi、Yandex 等)甚至 FireFox 都支持 Chromium 扩展,因此它可能是一个有趣的选择。但是你必须了解扩展的确切限制,我不是这方面的专家。

【讨论】:

【参考方案2】:

这个 chrome 扩展帮助我解决了 chrome 中的同样问题,请查看 Allow-Control-Allow-Origin: *

【讨论】:

感谢 jNg。是的,这很好,但我在一个跨平台项目上工作,所以在这种情况下有替代方案吗?我可以使用 javascript 允许此 chrome 策略吗? 我不知道,但我会做一些研究

以上是关于getJSON 在 chrome 上本地加载 json 数据文件时出错 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Jquery getJSON 在 Chrome 中不起作用

JQuery $.getJSON 加载本地 JSON 文件不起作用

HTML5怎么读取json文件

来自本地 HTML 文件的 WebView Javascript 跨域

jQuery getJSON 不发送 cookie

不允许在 chrome 上加载本地资源 - 错误,生产构建后 Angular 应用程序未运行