“无法执行'getImageData''CanvasRenderingContext2D':画布已被跨域数据污染。”假人

时间:2018-09-15 21:17:34

标签: windows video-processing

当我尝试在多个站点上播放视频时,我收到消息

"Failed to execute 'getImageData' on 'CanvasRenderingContext2D': 
 The canvas has been tainted by cross-origin data."

我找到的每个解决方案-不仅是在Stackoverflow上-都是为试图向Chrome添加内容或不知道是什么的开发人员编写的。

对于像我这样的旁观者来说,答案很有趣,但是它们都涉及对某些代码进行更正。我正在使用Windows 10上运行的Chrome衍生产品Sli​​mjet,您对我在最终用户级别上可以做什么有任何建议吗?

谢谢...罗恩

1 个答案:

答案 0 :(得分:0)

  

“当我尝试在多个站点上播放视频时...”

不过,您并不是完全“播放”视频,更像是{录制Canvas时“录制”这些视频。这是一个内容保护问题(例如:保护那些高级视图类型的公司和其他所有人)。

  

“你们中的任何人对我可以在最终用户级别上做些建议吗?”

视频数据似乎必须来自您自己的域(站点),才能使Canvas正常工作。

选项1 :将所需的视频文件复制到您自己的空间(HTML页面所在的位置)。

选项2 :使用PHP代码(如果可能)“代理”链接。这意味着您的<video>标签源是PHP脚本链接,并且同一PHP脚本本身也提供了视频数据。现在,浏览器被愚弄了,以为视频数据来自服务器上的某个地方。

HTML视频标记代码:

<video id="myVid" preload="true">
  <source crossorigin="anonymous" src="http://www.yoursite.com/proxy_video.php">
</video>

PHP代码(在“ proxy_video.php”内部):

<?php

$filename = "https://www...your_video_link";
$fp = fopen($filename, 'rb'); // open file pointer
$music = fpassthru($fp); // dump file stream to http
fclose($fp);

?>