javascript html5 使用来自不同域的图像绘制图像

2024-03-19

所以我有以下代码:

var element = document.getElementById("myCanvas");
var width = element.width;                                   
var height = element.height;  
var context = element.getContext("2d");                      

/* test 1 */
var img1 = new Image(width, height);
img1.src = "http://www.mydomain.com/image.jpg";

document.body.appendChild(img1);          // <-- A: this works 
context.drawImage(img1,0,0,width,height); // <-- B: this works

/* test 2 */
var img2 = new Image(width, height);
img2.src = "http://www.notmydomain.com/image.jpg";

document.body.appendChild(img2);          // <-- C: this works 
context.drawImage(img2,0,0,width,height); // <-- D: this does not work

好的,看看我的代码,在test 1我使用与我的页面托管在同一域中的图片创建一个图像对象。从A:我可以看到它加载得很好(A: and C:只是作为测试投入以确保 img 对象正确加载)。和B:也有效,它将图像绘制到我的画布上。

In test 2,我加载托管在与我的页面域不同的域中的图像。C:工作正常,我知道您可以加载其他域上托管的图像。然而,D:不起作用。我收到以下错误:

Error: uncaught exception: [Exception... "Security error" code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: ....

根据我的理解,这意味着这被视为跨站点脚本。

所以问题如下:

1)为什么这被认为是跨站点脚本?我的意思是,我知道why...但是为什么是D:不允许,当C:是?在我看来,它们在原则/精神上是一样的?

2)除了传统的跨站点脚本解决方法之外,还有其他方法可以解决这个问题吗?我想我必须使用 AJAX 将 URL 传递到服务器端脚本并发出请求,然后将图像保存在服务器上并向其返回 URL,以便它位于同一域中,或者否则(我认为)我可以返回原始的 Base64 编码数据并使用画布方法从原始数据构建它。我可以忍受做这些事情,但是......我有点希望我可能错过了一些关于 html5/canvas 的东西(我是新手!)


拿住。这里还发生了其他事情。

您绝对可以从不同的域中绘制图像。

以下是 jsfiddle 上从 placekitten.com 绘制图像的代码:

http://jsfiddle.net/ZZW5V/ http://jsfiddle.net/ZZW5V/

您应该尝试用 notyourdomain 图像的 url 替换该小提琴代码中的 url。它应该仍然有效。

一般来说,您应该始终能够从能够成功获取图像的任何地方将图像绘制到画布上。

在那之后你不被允许做的是得到imageData或将画布保存为 PNGtoDataUrl。有重要的安全原因 https://simonsarris.com/understanding-the-html5-canvas-image-security-rules/为什么这是不允许的。

我的猜测是,您正在做一些违反安全规则的事情,而不仅仅是试图绘制图像。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript html5 使用来自不同域的图像绘制图像 的相关文章

随机推荐

  • NSMenuItem 未快速启用

    我的项目中有一个 NSMenuItem var statusBar NSStatusBar systemStatusBar var statusItem NSStatusItem NSStatusItem var menuItem NSMe
  • 在 iOS 中使用 Microsoft App Center 环境变量

    我想开源我的 iOS 应用程序 但仍然能够使用 Microsoft App Center 等 CI 系统来构建它 我的应用程序使用我想从开源存储库中隐藏的私有 API 密钥 幸运的是 App Center 提供了环境变量功能 旨在在构建时使
  • OpenSSL 错误消息:错误:0A000126:SSL 例程::读取时出现意外的 eof

    截图在这里 https i stack imgur com 45QV6 png 我使用 YII2 框架用 PHP 构建了一个网站 当我使用 file get contents requestUrl false stream context
  • 在我的所有 vue 组件中全局使用 axios

    我正在 Vue 应用程序和 CLI 中使用 axios 进行测试 我一直在使用 vue resource 只需将其传递给 Vue use VueResource 即可在所有组件上访问它 如何使用 axios 实现此目的 这样我就不必将其导入
  • 如何获取 Flutter 应用程序的屏幕尺寸?

    我以全页模式显示从云存储加载的图像 我可以向图像 URL 提供一个参数来请求特定大小 例如匹配最长的屏幕尺寸 这样 如果屏幕只有 1334 像素 我就不必加载 1920px 图像 如何获取屏幕尺寸作为参数传递 您可以使用MediaQuery
  • mongodb 组和子组计数

    我有以下文档类型 id fA2845ORqeyMUItKXfqZw user 553247ffdc8a4ade4bb09c5e state 2 metadata language en US pipeline api http localh
  • Swift:如何在写入时不断调整 UICollectionViewCell 高度以适应 UITextView?

    下午好 我已经在我的 iOS 应用程序的这个 功能 上苦苦挣扎了几个小时 我需要一些帮助 问题 我应该如何实现 以便当用户输入UITextView尺寸增加 仅底部边距 并且单元格增加其高度以适应UITextView同时动态 我不知道如何解决
  • 如何在 WPF 中创建按钮数组?

    我可以在 Windows 窗体中创建按钮数组 但如何在 WPF xaml 中执行此操作 提前致谢 您不能直接在 XAML 中执行此操作 尽管您可以在代码中执行此操作 其方式与在 Windows 窗体中完全相同 您可以做的是使用数据绑定和 I
  • Qt 文档和可重入

    Qt 文档陈述了关于线程安全和可重入性的内容 http qt project org doc qt 5 0 qtcore threads reentrancy html 注意 Qt 类仅在供多个线程使用时才被记录为线程安全的 如果函数未标记
  • 有意传递文件,我如何检索它

    这就是我要传递的内容 pictureFile is a File Intent intent new Intent context ShowPicActivity class intent putExtra picture pictureF
  • 如何在 IntelliJ IDEA 中设置和运行/调试 ElasticSearch

    我正在尝试了解 ES 的工作原理 但是我无法从 IDE 运行它 我想运行 2 3 3 构建 它仍然使用 Maven 作为其构建系统 但不断出现错误 有人可以告诉我在详细下载存储库后如何在 IDEA 中执行此操作吗 配置等 我从github下
  • Django:无法更改默认语言

    我已经开发了一段时间了en gb语言代码 现在临近发布日期 我打算将默认语言切换为en us 但无论我最初做什么request LANGUAGE CODE被设定为en gb即使对于未注册的用户 仅供参考 我实际上想将时区保留为伦敦 并将默认
  • 如何在 Firefox 中禁用 Ctrl + Shift + C 快捷键?

    Pressing Ctrl Shift C in Firefox opens the developer tools and activates the Pick element tool 当我想要复制某些内容时 我经常错误地使用此快捷方式
  • 如何在java中逐行上传文件到谷歌云存储

    我有以下代码 String fullFileUrl fileUrl Storage storage StorageServiceHolder getStorage BlobId blobId GCSHelper uri2blobId ful
  • 会话数据在本地工作但不在 ipage 服务器上

    我已经尝试调试这个问题几个小时了 但没有成功 我有这两个文件 我的第一个文件 session start SESSION user 1 我的第二个文件 session start print r SESSION echo SESSION u
  • 根据输入将日期添加到框架中

    我有一个 R 数据集的输入变量 用于评估工具列表 它看起来如下 type lt as integer readline prompt Enter a Barcode 我有两列 一列包含通过输入语句找到的信息 一组条形码编号 另一列包含将特定
  • VS导出的模板不适用于新项目

    我已将以下工作项目导出为 VS 模板 该模板使用 ASP NET 5 RC1 https github com mohasi vs spa template https github com mohasi vs spa template 当
  • Python defaultdict 行为可以通过多处理实现吗?

    我不确定这是否可能 希望如此 我有一个数据集 我通过使用 defaultdict 的过程运行它 DefaultDict 有一个功能 如果您搜索某些内容并且它不在字典中 它就会被添加 在我的例子中 我正在搜索它们正在添加的值 然后我稍后会搜索
  • 我正在使用 PhoneGap,在我的页面中我尝试使用 FontAwesome 但它不起作用?

    我使用 PhoneGap for Android 创建了应用程序 并在应用程序中使用 FontAwesome 图标 但我看不到图标 只能看到方块 我像这样包含 FontAwesome 我这样使用它 i class icon circle i
  • javascript html5 使用来自不同域的图像绘制图像

    所以我有以下代码 var element document getElementById myCanvas var width element width var height element height var context elem