4

当尝试从预先绘制图像的画布中读取图像数据时,Google Chrome 会引发跨源异常(抱怨画布被“污染”)。目录结构如下。

/html/base/path
|-- index.html         contains the canvas element, references the script.js
|-- script.js          loads imgs/images.jpg, paints and queries the canvas
`-- imgs/image.jpg

仅当页面由 file:// 方案加载时才会发生错误。

我想知道这是否是 Chrome 错误。如果不是,适用哪些规则?有什么解决方法吗?

不幸的是,离线观看是最终的用例,所以

  • file:// 方案是必不可少的
  • 无法控制目标系统上的浏览器设置。
4

3 回答 3

4

加载的文件file://始终被认为来自不同的域,这是您无法绕过的功能。

根据HTML5 规范对 Origin 的定义

如果以其他方式获取文档(例如数据:用户输入的 URL、使用 createDocument() API 创建的文档等),则源是创建文档时分配的全局唯一标识符。

如果加载协议是file:.


在你的情况下我可能会做什么(如果我从你的评论中理解正确的话):我会写一个小程序,可以在外部存储介质中发布,它会启动一个 http 服务器并启动一个 web 浏览器。会在 Go 中完成(简单地用两三行代码创建一个 http 服务器,为 linux、Mac 和 Windows 进行本地编译,使您能够提供所有需要的可执行文件)但也可以使用其他语言。

于 2012-09-25T17:03:14.063 回答
3

给他们指示,让他们使用 flag 启动 chrome --allow-file-access-from-files

除此之外,他们需要运行本地服务器实例以避免错误。

于 2012-09-25T17:24:57.023 回答
1

这是实践中新的 Chromium 安全策略。除了按上述 epascarello 禁用此策略外,您无能为力。Star this bug,他们有点希望放松这个规则。

也检查这个答案。

于 2013-10-20T21:31:02.653 回答