我睡眠不足还是什么?以下代码
var frame=document.getElementById("viewer");
frame.width=100;
frame.height=100;
var ctx=frame.getContext("2d");
var img=new Image();
img.src="http://www.ansearch.com/images/interface/item/small/image.png"
img.onload=function() {
// draw image
ctx.drawImage(img, 0, 0)
// Here's where the error happens:
window.open(frame.toDataURL("image/png"));
}
Run Code Online (Sandbox Code Playgroud)
抛出这个错误:
SECURITY_ERR: DOM Exception 18
Run Code Online (Sandbox Code Playgroud)
这不可能不起作用!请问有人解释一下吗?
每当脚本使用HTML5地理位置API 请求地理位置时,都会UIWebView要求获得使用iOS位置服务的权限.
这非常烦人,特别是在加载静态HTML文件时,它会不断询问每个文件的权限,即使用户已经为应用程序本身授予了此权限.
有没有办法防止它?
我知道在safari上,地理定位的权限是基于域的,我同意在为不同的域完成请求时请求权限,但是在加载静态HTML时,UIWebView不应该与应用程序具有相同的地理位置权限本地文件?
难道我做错了什么?

我正在编写一个本地HTML5应用程序来处理一些科学图像.我在OS X上,我专门用JavaScript/HTML5编写它以实现可移植性,这样我就可以在Windows机器上向我的主管演示它.此应用程序永远不会部署在服务器上.
问题是,它在OS X上的Safari上完美运行,但在Windows上它会在Firefox和Chrome中引发安全性错误.我认为这是因为它认为图像位于不同的域中,但实际上它与脚本位于同一文件夹中.
有什么方法可以解决这个问题吗?
有问题的错误与此处详述的相同:
未捕获错误:SECURITY_ERR:DOM异常18当我尝试设置cookie时
编辑:我应该澄清,我链接的问题(在本地服务器上运行)的答案是不可行的,因为我无法在这些机器上安装任何软件(或服务器!).我希望得到另一个答案的原因是因为它确实可以在OS X上运行.
编辑:考虑到dennmat的建议,我已经设法将我的图像获取脚本简化为几行,使用Image():
window.onload = function(){
var img;
capture_canvas = document.createElement('canvas');
capture_canvas.width = 1000;
capture_canvas.height = 1000;
document.documentElement.appendChild(capture_canvas);
img = new Image();
img.crossOrigin = "Anonymous";
img.src = "http://www.shangalulu.com/get_resource_no_64.php?url=http://www.shangalulu.com/users/1196739508/post/41-1330377498/41-1330377498_thumb.jpg";
img.onload = function() {
var context, canvas_img;
context = capture_canvas.getContext('2d');
context.drawImage(img, 0, 0, 255, 255);
canvas_img = context.getImageData(0, 0, capture_canvas.width, capture_canvas.height);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这适用于Chrome和Firefox,但这不适用于IE9.以下链接中提到的解决方案似乎不适用于这种情况.未捕获错误:SECURITY_ERR:DOM异常18当我尝试设置cookie时
Image()IE9是否支持cors功能?
我遇到了一个小问题.
上面的图像实际上是一个包含标准png标题的文件,后跟255个字节,从255变为0(两次).我们的想法是了解Internet Explorer 9如何通过AJAX请求处理接收二进制数据.
所以,这是我的问题:我注意到当我在客户端上收到一个大于127的字节时,该值默认为253.有没有办法让IE用正确的值读取扩展字节?
需要注意以下几点:
1)我们不使用任何类型的JavaScript框架.这是一个要求,我们只使用裸骨javascript.
2)这个实验的目的是制作一个干净的方式来获取图像,这样我就可以把它放在画布上而不会弄乱它.有时这些图像来自我们的外部托管图像服务器,有时它将来自我们无法控制的另一台主机.
下面是我的测试脚本:
var request;
window.onload = function(){
request = new XMLHttpRequest();
if (window.XDomainRequest) {
request = new …Run Code Online (Sandbox Code Playgroud) 我正在尝试在另一个画布上绘制通过javascript创建的画布。但这对我没有用
这是我的代码,
<!DOCTYPE HTML>
<html>
<head>
</script>
<script>
window.onload = function(){
var can1 = document.createElement('canvas');
can1.width = 150;
can1.height = 140;
can1.style.cssText = 'top:2px;left:2px;border:2px solid black;';
var ctx1 = can1.getContext('2d');
var img=new Image();
img.src="images/211.jpg"
ctx1.drawImage(img,0,0);
var can = document.getElementById("c");
var ctx = can.getContext('2d');
ctx.drawImage(can1,0,0);
var canvas = document.getElementById("c");
window.open(canvas.toDataURL());
}
</script>
</head>
<body >
<canvas id="c" style = "position:absolute;top:150px;width:250px;height:350px;left:500px; border:2px solid black;"></canvas>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 如果将来自其他站点的图像加载到页面,然后将其作为复合材料中的部分成分写入画布,则使用:
context.drawImage(image, 0, 0, w, h);
Run Code Online (Sandbox Code Playgroud)
看起来在画布的画面上已经发生了任何不安全的事情.那么为什么呢
window.location = canvas.toDataURL('image/png');
Run Code Online (Sandbox Code Playgroud)
提供错误消息.SECURITY_ERR; DOM异常18.它似乎没有比在其他地方首先保存外部站点映像的额外步骤更不安全.
我的问题不是如何绕过这个,这么多,或错误意味着什么,而是,
为什么这不安全?如果页面由服务器加载,则作者肯定会期望该操作.
html5 ×5
javascript ×4
canvas ×3
security ×2
cors ×1
cross-domain ×1
css ×1
geolocation ×1
html5-canvas ×1
ios ×1
permissions ×1
uiwebview ×1
xdr ×1