当试图从预先绘制图像的画布中读取图像数据时,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
只有当页面由文件加载时才会发生错误://scheme。
我想知道这是否是Chrome的错误。如果没有,适用哪些规则?有什么变通办法吗?
不幸的是,离线观看是最终的用例,因此
- file://scheme是必不可少的
- 在目标系统处不存在对浏览器设置的控制
用file://
加载的文件总是被认为来自不同的域,这是一个无法绕过的功能。
根据HTML5规范对起源的定义:
如果文档是以其他方式获得的(例如数据:URL由用户键入,使用createDocument()创建的DocumentAPI等)当文档已创建。
如果加载协议为file:
,则可以显示但不能分析或更改从另一个文件读取的数据。
I在您的情况下可能会做什么(如果我从您的评论中正确理解的话):我会写一个小程序,可以在外部存储介质中发布,它既可以启动http服务器,也可以启动web浏览器I可以在Go中完成(简单地用两三行代码制作http服务器,linux、Mac和Windows的本地编译,使您能够提供所有需要的可执行文件),但也可以使用其他语言。
给他们指示,让他们用标志--allow-file-access-from-files
启动chrome。
除此之外,他们还需要运行一个本地服务器实例来避免出现错误。
这是一种新的Chromium安全策略。你不能做任何事情,除了禁用这个政策如上所述由epascarello。明星这个bug,他们有点希望放松这个规则。
也请检查此答案。