anonymous - OpenSeadragon 本地 html 错误:crossOriginPolicy: 'Anonymous' 使演示图像在本地 html 中不可见
问题描述
(整个包可以从 https://drive.google.com/file/d/1vzAYq909e4H7qwZ-opAehmWIHkcjVM1c/view?usp=sharing下载)
我想试试 OpenSeaDragon 演示:
源码: https ://github.com/usnistgov/OpenSeadragonFiltering 同在线demo: https ://pages.nist.gov/OpenSeadragonFiltering/
在我的本地计算机上制作 html 和相关的 js 文件等进行演示。
为了在本地计算机上试用演示,我下载了 openseadragon 和这个演示,以及 highsmith 平铺图像文件夹,以及演示网站所需的所有 js 文件。然后我将 index.html 中的代码替换为演示网站的浏览器中的动态代码。然后我将js和html中的所有http路径改成本地文件,并在demo、js和demo-bundle.js中指定viewer对象,如下:
var viewer = new OpenSeadragon({
id: 'openseadragon',
prefixUrl: './images/',
//crossOriginPolicy: 'Anonymous'
tileSources: {
Image: {
xmlns: 'http://schemas.microsoft.com/deepzoom/2008',
Url: './highsmith_files/',
Overlap: '2',
TileSize: '256',
Format: 'jpg',
Size: {
Height: '9221',
Width: '7026'
}
}
}
});
如果我删除/评论该行:
crossOriginPolicy: 'Anonymous'
然后我打开 index.html 并可以准确地看到加载的图像和过滤器选项。但是一旦我点击一个过滤器,虽然过滤器被添加到了下部,但图像永远变黑了。控制台浏览器说:
Uncaught DOMException: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.
at Object.tileDrawingHandler [as handler] (file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:45407:57)
at file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:28662:34
at $.Viewer.raiseEvent (file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:28684:14)
at _drawingHandler (file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:43338:23)
at $.Tile.drawCanvas (file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:40996:10)
at $.Drawer.drawTile (file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:41659:23)
at drawTiles (file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:44495:29)
at updateViewport (file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:43944:6)
at $.TiledImage.draw (file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:43390:10)
at $.World.draw (file:///D:/QMDownload/9/test3/OpenseadragonDemo/_plugins/demo-bundle.js:45070:29)
我用谷歌搜索并找到了一个答案,即 如何修复 getImageData() 错误画布已被跨域数据污染?
As others have said you are "tainting" the canvas by loading from a cross origins domain.
https://developer.mozilla.org/en-US/docs/HTML/CORS_Enabled_Image
However, you may be able to prevent this by simply setting:
img.crossOrigin = "Anonymous";
This only works if the remote server sets the following header appropriately:
Access-Control-Allow-Origin "*"
The Dropbox file chooser when using the "direct link" option is a great example of this. I use it on oddprints.com to hoover up images from the remote dropbox image url, into my canvas, and then submit the image data back into my server. All in javascript
所以我带回
crossOriginPolicy: 'Anonymous'
在 demo,js 和 demo-bundle.js 中,但发现当我打开 index.html 时,图像是全黑的。
如何解决问题并使过滤器在本地计算机上工作?谢谢。
解决方案
推荐阅读
- javascript - 我将如何根据条件更改 id 属性?
- java - 解密 AES-GCM 时遇到问题
- php - Woocommerce 自定义端点内容网址
- python - 在熊猫中生成给定范围内的随机日期
- laravel - 我无法更新 laravel 5 中的字段
- c++ - `decltype((const int)a)` 和 `decltype((const int)1)` 的不同类型
- bash - 与单词边界不工作的bash中的多行字符串匹配
- ibm-cloud - 如何在 watson 对话中将动态输入与实体映射 (Bluemix)
- java - 代码在 Android Studio 中的某个时间会被还原几个小时或一整天
- python - 如何在 OpenCV 中将视频写入内存